annotate src/list-level.agda @ 1124:f683d96fbc93 default tip

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