annotate RelOp.agda @ 19:5001cda86c3d

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 24 Dec 2018 14:56:01 +0900
parents
children 5e4abc1919b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# OPTIONS --universe-polymorphism #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Empty
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.Product
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Sum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.Unit
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Relation.Binary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Relation.Binary.Core
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 module RelOp (S : Set) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 Pred : Set -> Set₁
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 Pred X = X -> Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 Imply : Set -> Set -> Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 Imply X Y = X -> Y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 Iff : Set -> Set -> Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 Iff X Y = Imply X Y × Imply Y X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 NotP : {S : Set} -> Pred S -> Pred S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 NotP X s = ¬ X s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 data Id {l} {X : Set} : Rel X l where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 ref : {x : X} -> Id x x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 -- substId1 | x == y & P(x) => P(y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 substId1 : ∀ {l} -> {X : Set} -> {x y : X} ->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 Id {l} x y -> (P : Pred X) -> P x -> P y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 substId1 ref P q = q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 -- substId2 | x == y & P(y) => P(x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 substId2 : ∀ {l} -> {X : Set} -> {x y : X} ->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 Id {l} x y -> (P : Pred X) -> P y -> P x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 substId2 ref P q = q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 -- for X ⊆ S (formally, X : Pred S)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 -- delta X = { (a, a) | a ∈ X }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 delta : ∀ {l} -> Pred S -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 delta X a b = X a × Id a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 -- deltaGlob = delta S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 deltaGlob : ∀ {l} -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 deltaGlob = delta (λ (s : S) → ⊤)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 -- emptyRel = \varnothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 emptyRel : Rel S Level.zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 emptyRel a b = ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 -- comp R1 R2 = R2 ∘ R1 (= R1; R2)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 comp : ∀ {l} -> Rel S l -> Rel S l -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 comp R1 R2 a b = ∃ (λ (a' : S) → R1 a a' × R2 a' b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 -- union R1 R2 = R1 ∪ R2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 union : ∀ {l} -> Rel S l -> Rel S l -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 union R1 R2 a b = R1 a b ⊎ R2 a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 -- repeat n R = R^n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 repeat : ∀ {l} -> ℕ -> Rel S l -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 repeat ℕ.zero R = deltaGlob
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 repeat (ℕ.suc m) R = comp (repeat m R) R
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 -- unionInf f = ⋃_{n ∈ ω} f(n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 unionInf : ∀ {l} -> (ℕ -> Rel S l) -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 unionInf f a b = ∃ (λ (n : ℕ) → f n a b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 -- restPre X R = { (s1,s2) ∈ R | s1 ∈ X }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 restPre : ∀ {l} -> Pred S -> Rel S l -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 restPre X R a b = X a × R a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 -- restPost X R = { (s1,s2) ∈ R | s2 ∈ X }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 restPost : ∀ {l} -> Pred S -> Rel S l -> Rel S l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 restPost X R a b = R a b × X b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 deltaRestPre : (X : Pred S) -> (R : Rel S Level.zero) -> (a b : S) ->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 Iff (restPre X R a b) (comp (delta X) R a b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 deltaRestPre X R a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 = (λ (h : restPre X R a b) → a , (proj₁ h , ref) , proj₂ h) ,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 λ (h : comp (delta X) R a b) → proj₁ (proj₁ (proj₂ h)) ,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 substId2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 (proj₂ (proj₁ (proj₂ h)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 (λ z → R z b) (proj₂ (proj₂ h))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 deltaRestPost : (X : Pred S) -> (R : Rel S Level.zero) -> (a b : S) ->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 Iff (restPost X R a b) (comp R (delta X) a b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 deltaRestPost X R a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 = (λ (h : restPost X R a b) → b , proj₁ h , proj₂ h , ref) ,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 λ (h : comp R (delta X) a b) →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 substId1 (proj₂ (proj₂ (proj₂ h))) (R a) (proj₁ (proj₂ h)) ,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 substId1 (proj₂ (proj₂ (proj₂ h))) X (proj₁ (proj₂ (proj₂ h)))