annotate list-level.agda @ 790:1e7319868d77

Sets is CCC
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 19 Apr 2019 23:42:19 +0900
parents d6a6dd305da2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module list-level where
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
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 postulate A : Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 postulate B : Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 postulate C : Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 postulate a : A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 postulate b : A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 postulate c : A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 infixr 40 _::_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 data List {a} (A : Set a) : Set a where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 [] : List A
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
18 _::_ : A → List A → List A
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 infixl 30 _++_
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
22 _++_ : ∀ {a} {A : Set a} → List A → List A → List A
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 [] ++ ys = ys
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 (x :: xs) ++ ys = x :: (xs ++ ys)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 l1 = a :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 l2 = a :: b :: a :: c :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 l3 = l1 ++ l2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 L1 = A :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 L2 = A :: B :: A :: C :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 L3 = L1 ++ L2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 data Node {a} ( A : Set a ) : Set a where
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
37 leaf : A → Node A
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
38 node : Node A → Node A → Node A
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
40 flatten : ∀{n} { A : Set n } → Node A → List A
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 flatten ( leaf a ) = a :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 flatten ( node a b ) = flatten a ++ flatten b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 n1 = node ( leaf a ) ( node ( leaf b ) ( leaf c ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 open import Relation.Binary.PropositionalEquality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 infixr 20 _==_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
50 data _==_ {n} {A : Set n} : List A → List A → Set n where
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
51 reflection : {x : List A} → x == x
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
53 cong1 : ∀{a} {A : Set a } {b} { B : Set b } →
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
54 ( f : List A → List B ) → {x : List A } → {y : List A} → x == y → f x == f y
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 cong1 f reflection = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
57 eq-cons : ∀{n} {A : Set n} {x y : List A} ( a : A ) → x == y → ( a :: x ) == ( a :: y )
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
58 eq-cons a z = cong1 ( λ x → ( a :: x) ) z
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
60 trans-list : ∀{n} {A : Set n} {x y z : List A} → x == y → y == z → x == z
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 trans-list reflection reflection = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
64 ==-to-≡ : ∀{n} {A : Set n} {x y : List A} → x == y → x ≡ y
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 ==-to-≡ reflection = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
67 list-id-l : { A : Set } → { x : List A} → [] ++ x == x
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 list-id-l = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
70 list-id-r : { A : Set } → ( x : List A ) → x ++ [] == x
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 list-id-r [] = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 list-id-r (x :: xs) = eq-cons x ( list-id-r xs )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
74 list-assoc : {A : Set } → ( xs ys zs : List A ) →
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 ( ( xs ++ ys ) ++ zs ) == ( xs ++ ( ys ++ zs ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 list-assoc [] ys zs = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 list-assoc (x :: xs) ys zs = eq-cons x ( list-assoc xs ys zs )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 module ==-Reasoning {n} (A : Set n ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 infixr 2 _∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 infixr 2 _==⟨_⟩_ _==⟨⟩_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 infix 1 begin_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 data _IsRelatedTo_ (x y : List A) :
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 Set n where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 relTo : (x≈y : x == y ) → x IsRelatedTo y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 begin_ : {x : List A } {y : List A} →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 x IsRelatedTo y → x == y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 begin relTo x≈y = x≈y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 _==⟨_⟩_ : (x : List A ) {y z : List A} →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 x == y → y IsRelatedTo z → x IsRelatedTo z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 _ ==⟨ x≈y ⟩ relTo y≈z = relTo (trans-list x≈y y≈z)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 _==⟨⟩_ : (x : List A ) {y : List A}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 → x IsRelatedTo y → x IsRelatedTo y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 _ ==⟨⟩ x≈y = x≈y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 _∎ : (x : List A ) → x IsRelatedTo x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 _∎ _ = relTo reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
106 lemma11 : ∀{n} (A : Set n) ( x : List A ) → x == x
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 lemma11 A x = let open ==-Reasoning A in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 begin x ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
110 ++-assoc : ∀{n} (L : Set n) ( xs ys zs : List L ) → (xs ++ ys) ++ zs == xs ++ (ys ++ zs)
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 ++-assoc A [] ys zs = let open ==-Reasoning A in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 begin -- to prove ([] ++ ys) ++ zs == [] ++ (ys ++ zs)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 ( [] ++ ys ) ++ zs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 ==⟨ reflection ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 ys ++ zs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 ==⟨ reflection ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 [] ++ ( ys ++ zs )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 ++-assoc A (x :: xs) ys zs = let open ==-Reasoning A in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 begin -- to prove ((x :: xs) ++ ys) ++ zs == (x :: xs) ++ (ys ++ zs)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 ((x :: xs) ++ ys) ++ zs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 ==⟨ reflection ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 (x :: (xs ++ ys)) ++ zs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 ==⟨ reflection ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 x :: ((xs ++ ys) ++ zs)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 ==⟨ cong1 (_::_ x) (++-assoc A xs ys zs) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 x :: (xs ++ (ys ++ zs))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 ==⟨ reflection ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 (x :: xs) ++ (ys ++ zs)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 --data Bool : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 -- true : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 -- false : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 --postulate Obj : Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
142 --postulate Hom : Obj → Obj → Set
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
145 --postulate id : { a : Obj } → Hom a a
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 --infixr 80 _○_
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
149 --postulate _○_ : { a b c : Obj } → Hom b c → Hom a b → Hom a c
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
151 -- postulate axId1 : {a b : Obj} → ( f : Hom a b ) → f == id ○ f
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
152 -- postulate axId2 : {a b : Obj} → ( f : Hom a b ) → f == f ○ id
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
154 --assoc : { a b c d : Obj } →
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
155 -- (f : Hom c d ) → (g : Hom b c) → (h : Hom a b) →
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 -- (f ○ g) ○ h == f ○ ( g ○ h)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 --a = Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
161 -- ListObj : {A : Set} → List A
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 -- ListObj = List Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163
300
d6a6dd305da2 arrow and lambda fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
164 -- ListHom : ListObj → ListObj → Set
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165