Mercurial > hg > Members > kono > Proof > category
annotate system-f.agda @ 347:87ad542e4145
list try ..
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Apr 2014 23:31:19 +0900 |
parents | 17acb62419ac |
children | d71ae57ed670 |
rev | line source |
---|---|
315 | 1 open import Level |
2 open import Relation.Binary.PropositionalEquality | |
3 | |
330 | 4 module system-f where |
315 | 5 |
336 | 6 Bool : {l : Level} (X : Set l) → Set l |
7 Bool = λ{l : Level} → λ(X : Set l) → X → X → X | |
315 | 8 |
336 | 9 T : {l : Level} (X : Set l) → Bool X |
10 T X = λ(x y : X) → x | |
315 | 11 |
336 | 12 F : {l : Level} (X : Set l) → Bool X |
13 F X = λ(x y : X) → y | |
315 | 14 |
336 | 15 D : {l : Level} → {U : Set l} → U → U → Bool U → U |
331 | 16 D u v t = t u v |
315 | 17 |
336 | 18 lemma04 : {l : Level} { U : Set l} {u v : U} → D {_} {U} u v (T U ) ≡ u |
315 | 19 lemma04 = refl |
20 | |
336 | 21 lemma05 : {l : Level} { U : Set l} {u v : U} → D {_} {U} u v (F U ) ≡ v |
315 | 22 lemma05 = refl |
23 | |
336 | 24 _×_ : {l : Level} → Set l → Set l → Set (suc l) |
25 _×_ {l} U V = {X : Set l} → (U → V → X) → X | |
315 | 26 |
336 | 27 <_,_> : {l : Level} {U V : Set l} → U → V → (U × V) |
28 <_,_> {l} {U} {V} u v = λ{X} → λ(x : U → V → X) → x u v | |
315 | 29 |
336 | 30 π1 : {l : Level} {U V : Set l} → (U × V) → U |
31 π1 {l} {U} {V} t = t {U} (λ(x : U) → λ(y : V) → x) | |
315 | 32 |
336 | 33 π2 : {l : Level} {U V : Set l} → (U × V) → V |
34 π2 {l} {U} {V} t = t {V} (λ(x : U) → λ(y : V) → y) | |
315 | 35 |
336 | 36 lemma06 : {l : Level} {U V : Set l } → {u : U } → {v : V} → π1 ( < u , v > ) ≡ u |
315 | 37 lemma06 = refl |
38 | |
336 | 39 lemma07 : {l : Level} {U V : Set l } → {u : U } → {v : V} → π2 ( < u , v > ) ≡ v |
315 | 40 lemma07 = refl |
41 | |
336 | 42 hoge : {l : Level} {U V : Set l} → U → V → (U × V) |
315 | 43 hoge u v = < u , v > |
44 | |
336 | 45 -- lemma08 : {l : Level} {U V : Set l } → {u : U } → (t : U × V) → < π1 t , π2 t > ≡ t |
46 -- lemma08 t = refl | |
316 | 47 |
48 -- Emp definision is still wrong... | |
49 | |
336 | 50 Emp : {l : Level} {X : Set l} → Set l |
51 Emp {l} = λ{X : Set l} → X | |
316 | 52 |
336 | 53 -- ε : {l : Level} (U : Set l) {l' : Level} {U' : Set l'} → Emp → Emp |
327 | 54 -- ε {l} U t = t |
316 | 55 |
336 | 56 -- lemma09 : {l : Level} {U : Set l} {l' : Level} {U' : Set l} → (t : Emp {l} {U} ) → ε U (ε Emp t) ≡ ε U t |
322 | 57 -- lemma09 t = refl |
321 | 58 |
336 | 59 -- lemma10 : {l : Level} {U V X : Set l} → (t : Emp {_} {U × V}) → U × V |
327 | 60 -- lemma10 {l} {U} {V} t = ε (U × V) t |
316 | 61 |
336 | 62 -- lemma10' : {l : Level} {U V X : Set l} → (t : Emp {_} {U × V}) → Emp |
327 | 63 -- lemma10' {l} {U} {V} {X} t = ε (U × V) t |
64 | |
336 | 65 -- lemma100 : {l : Level} {U V X : Set l} → (t : Emp {_} {U}) → Emp |
322 | 66 -- lemma100 {l} {U} {V} t = ε U t |
321 | 67 |
336 | 68 -- lemma101 : {l k : Level} {U V : Set l} → (t : Emp {_} {U × V}) → π1 (ε (U × V) t) ≡ ε U t |
322 | 69 -- lemma101 t = refl |
319 | 70 |
336 | 71 -- lemma102 : {l k : Level} {U V : Set l} → (t : Emp {_} {U × V}) → π2 (ε (U × V) t) ≡ ε V t |
322 | 72 -- lemma102 t = refl |
321 | 73 |
336 | 74 -- lemma103 : {l : Level} {U V : Set l} → (u : U) → (t : Emp {l} {_} ) → (ε (U → V) t) u ≡ ε V t |
322 | 75 -- lemma103 u t = refl |
316 | 76 |
336 | 77 _+_ : {l : Level} → Set l → Set l → Set (suc l) |
78 _+_ {l} U V = {X : Set l} → ( U → X ) → (V → X) → X | |
316 | 79 |
336 | 80 ι1 : {l : Level } {U V : Set l} → U → U + V |
81 ι1 {l} {U} {V} u = λ{X} → λ(x : U → X) → λ(y : V → X ) → x u | |
316 | 82 |
336 | 83 ι2 : {l : Level } {U V : Set l} → V → U + V |
84 ι2 {l} {U} {V} v = λ{X} → λ(x : U → X) → λ(y : V → X ) → y v | |
316 | 85 |
336 | 86 δ : {l : Level} { U V R S : Set l } → (R → U) → (S → U) → ( R + S ) → U |
87 δ {l} {U} {V} {R} {S} u v t = t {U} (λ(x : R) → u x) ( λ(y : S) → v y) | |
316 | 88 |
336 | 89 lemma11 : {l : Level} { U V R S : Set _ } → (u : R → U ) (v : S → U ) → (r : R) → δ {l} {U} {V} {R} {S} u v ( ι1 r ) ≡ u r |
316 | 90 lemma11 u v r = refl |
91 | |
336 | 92 lemma12 : {l : Level} { U V R S : Set _ } → (u : R → U ) (v : S → U ) → (s : S) → δ {l} {U} {V} {R} {S} u v ( ι2 s ) ≡ v s |
316 | 93 lemma12 u v s = refl |
94 | |
95 | |
336 | 96 _××_ : {l : Level} → Set (suc l) → Set l → Set (suc l) |
97 _××_ {l} U V = {X : Set l} → (U → V → X) → X | |
322 | 98 |
336 | 99 <<_,_>> : {l : Level} {U : Set (suc l) } {V : Set l} → U → V → (U ×× V) |
100 <<_,_>> {l} {U} {V} u v = λ{X} → λ(x : U → V → X) → x u v | |
316 | 101 |
102 | |
336 | 103 Int : {l : Level } ( X : Set l ) → Set l |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
104 Int X = X → ( X → X ) → X |
322 | 105 |
336 | 106 Zero : {l : Level } → { X : Set l } → Int X |
107 Zero {l} {X} = λ(x : X ) → λ(y : X → X ) → x | |
322 | 108 |
336 | 109 S : {l : Level } → { X : Set l } → Int X → Int X |
110 S {l} {X} t = λ(x : X) → λ(y : X → X ) → y ( t x y ) | |
322 | 111 |
336 | 112 n0 : {l : Level} {X : Set l} → Int X |
331 | 113 n0 = Zero |
326 | 114 |
336 | 115 n1 : {l : Level } → { X : Set l } → Int X |
116 n1 {_} {X} = λ(x : X ) → λ(y : X → X ) → y x | |
322 | 117 |
336 | 118 n2 : {l : Level } → { X : Set l } → Int X |
119 n2 {_} {X} = λ(x : X ) → λ(y : X → X ) → y (y x) | |
322 | 120 |
336 | 121 n3 : {l : Level } → { X : Set l } → Int X |
122 n3 {_} {X} = λ(x : X ) → λ(y : X → X ) → y (y (y x)) | |
323 | 123 |
336 | 124 n4 : {l : Level } → { X : Set l } → Int X |
125 n4 {_} {X} = λ(x : X ) → λ(y : X → X ) → y (y (y (y x))) | |
333
26f44a4fa494
factorial still have a problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
332
diff
changeset
|
126 |
336 | 127 lemma13 : {l : Level } → { X : Set l } → S (S (Zero {_} {X})) ≡ n2 |
331 | 128 lemma13 = refl |
322 | 129 |
336 | 130 It : {l : Level} {U : Set l} → U → ( U → U ) → Int U → U |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
131 It u f t = t u f |
316 | 132 |
344 | 133 ItInt : {l : Level} {X : Set l} → Int X → ( Int X → Int X ) → Int X → Int X |
134 ItInt {l} {X} u f t = λ z s → t (u z s) ( λ w → (f (λ z' s' → w )) z s ) | |
323 | 135 |
345 | 136 R : {l : Level} { U X : Set l} → U → ( U → Int X → U ) → Int _ → U |
137 R {l} {U} {X} u v t = π1 ( It {suc l} {U × Int X} (< u , Zero >) (λ (x : U × Int X) → < v (π1 x) (π2 x) , S (π2 x) > ) t ) | |
336 | 138 |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
139 -- bad adder which modifies input type |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
140 add' : {l : Level} {X : Set l} → Int (Int X) → Int X → Int X |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
141 add' x y = It y S x |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
142 |
336 | 143 add : {l : Level} {X : Set l} → Int X → Int X → Int X |
344 | 144 add x y = λ z s → x (y z s) s |
336 | 145 |
345 | 146 add'' : {l : Level} {X : Set l} → Int X → Int X → Int X |
147 add'' x y = ItInt y S x | |
148 | |
149 lemma22 : {l : Level} {X : Set l} ( x y : Int X ) → add x y ≡ add'' x y | |
150 lemma22 x y = refl | |
151 | |
339 | 152 -- bad adder which modifies input type |
153 mul' : {l : Level } {X : Set l} → Int X → Int (Int X) → Int X | |
154 mul' {l} {X} x y = It Zero (add x) y | |
324 | 155 |
339 | 156 mul : {l : Level } {X : Set l} → Int X → Int X → Int X |
344 | 157 mul {l} {X} x y = λ z s → x z ( λ w → y w s ) |
158 | |
159 mul'' : {l : Level } {X : Set l} → Int X → Int X → Int X | |
160 mul'' {l} {X} x y = ItInt Zero (add x) y | |
338
2f21eb997559
sym of sum and mul in system T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
337
diff
changeset
|
161 |
336 | 162 fact : {l : Level} {X : Set l} → Int _ → Int X |
339 | 163 fact {l} {X} n = R (S Zero) (λ z → λ w → mul z (S w)) n |
326 | 164 |
336 | 165 lemma13' : {l : Level} {X : Set l} → fact {l} {X} n4 ≡ mul n4 ( mul n2 n3) |
334
357d3114c9b5
add : Int X -> Int X -> Int X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
333
diff
changeset
|
166 lemma13' = refl |
324 | 167 |
345 | 168 -- lemma23 : {l : Level} {X : Set l} ( x y : Int X ) → mul x y ≡ mul'' x y |
169 -- lemma23 x y = {!!} | |
170 | |
171 lemma24 : {l : Level } {X : Set l} → mul {l} {X} n4 n3 ≡ mul'' {l} {X} n3 n4 | |
172 lemma24 = refl | |
173 | |
344 | 174 |
336 | 175 -- lemma14 : {l : Level} {X : Set l} → (x y : Int X) → mul x y ≡ mul y x |
326 | 176 -- lemma14 x y = It {!!} {!!} {!!} |
323 | 177 |
336 | 178 lemma15 : {l : Level} {X : Set l} (x y : Int X) → mul {l} {X} n2 n3 ≡ mul {l} {X} n3 n2 |
324 | 179 lemma15 x y = refl |
323 | 180 |
344 | 181 lemma15' : {l : Level} {X : Set l} (x y : Int X) → mul'' {l} {X} n2 n3 ≡ mul'' {l} {X} n3 n2 |
182 lemma15' x y = refl | |
183 | |
336 | 184 lemma16 : {l : Level} {X U : Set l} → (u : U ) → (v : U → Int X → U ) → R u v Zero ≡ u |
324 | 185 lemma16 u v = refl |
186 | |
336 | 187 -- lemma17 : {l : Level} {X U : Set l} → (u : U ) → (v : U → Int → U ) → (t : Int ) → R u v (S t) ≡ v ( R u v t ) t |
324 | 188 -- lemma17 u v t = refl |
189 | |
336 | 190 -- postulate lemma17 : {l : Level} {X U : Set l} → (u : U ) → (v : U → Int X → U ) → (t : Int X ) → R u v (S t) ≡ v ( R u v t ) t |
316 | 191 |
336 | 192 List : {l : Level} (U X : Set l) → Set l |
347 | 193 List {l} = λ( U X : Set l) → X → ( U → X → X ) → X |
323 | 194 |
336 | 195 Nil : {l : Level} {U : Set l} {X : Set l} → List U X |
196 Nil {l} {U} {X} = λ(x : X) → λ(y : U → X → X) → x | |
325 | 197 |
336 | 198 Cons : {l : Level} {U : Set l} {X : Set l} → U → List U X → List U X |
199 Cons {l} {U} {X} u t = λ(x : X) → λ(y : U → X → X) → y u (t x y ) | |
325 | 200 |
336 | 201 l0 : {l : Level} {X X' : Set l} → List (Int X) (X') |
325 | 202 l0 = Nil |
203 | |
336 | 204 l1 : {l : Level} {X X' : Set l} → List (Int X) (X') |
325 | 205 l1 = Cons n1 Nil |
206 | |
336 | 207 l2 : {l : Level} {X X' : Set l} → List (Int X) (X') |
325 | 208 l2 = Cons n2 l1 |
323 | 209 |
336 | 210 l3 : {l : Level} {X X' : Set l} → List (Int X) (X') |
330 | 211 l3 = Cons n3 l2 |
212 | |
347 | 213 -- λ x x₁ y → y x (y x (y x x₁)) |
214 l4 : {l : Level} {X X' : Set l} → Int X → List (Int X) (X') | |
215 l4 x = Cons x (Cons x (Cons x Nil)) | |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
216 |
347 | 217 ListIt : {l : Level} {U W : Set l} → W → ( U → W → W ) → List U W → W |
218 ListIt w f t = t w f | |
219 | |
220 LListIt : {l : Level} {U W : Set l} → List U W → ( U → List U W → List U W ) → List U W → List U W | |
221 LListIt {l} {U} {W} w f t = λ x y → t (w x y) (λ x' y' → (f x' (λ x'' y'' → y' )) x y ) | |
222 | |
223 -- LBistIt : {l : Level} {U W X : Set l} → Bool X → ( U → Bool X → Bool X) → List U W → Bool X | |
224 -- LBistIt {l} {U} {W} {X} w f t = λ x → t ? ? | |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
225 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
226 -- Cdr : {l : Level} {U : Set l} {X : Set l} → List U _ → List U X |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
227 -- Cdr w = λ x → λ y → w x (λ x y → y) |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
228 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
229 -- lemma181 :{l : Level} {U : Set l} {X : Set l} → Car Zero l2 ≡ n2 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
230 -- lemma181 = refl |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
231 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
232 -- lemma182 :{l : Level} {U : Set l} {X : Set l} → Cdr l2 ≡ l1 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
233 -- lemma182 = refl |
323 | 234 |
336 | 235 Nullp : {l : Level} {U : Set (suc l)} { X : Set (suc l)} → List U (Bool X) → Bool _ |
347 | 236 Nullp {_} {_} {X} list = ListIt (T X) (λ u w → (F X)) list |
237 | |
238 -- Nullp' : {l : Level} {U W : Set (suc l)} { X : Set (suc l)} → List U W → Bool _ | |
239 -- Nullp' {_} {_} {_} {X} list = LBistIt (T X) (λ u w → (F X)) list | |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
240 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
241 -- bad append |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
242 Append' : {l : Level} {U X : Set l} → List U (List U X) → List U X → List U X |
347 | 243 Append' {_} {_} {X} x y = ListIt y Cons x |
325 | 244 |
336 | 245 Append : {l : Level} {U : Set l} {X : Set l} → List U X → List U X → List U X |
246 Append x y = λ s t → x (y s t) t | |
325 | 247 |
347 | 248 Append'' : {l : Level} {U X : Set l} → List U X → List U X → List U X |
249 Append'' {_} {_} {X} x y = LListIt y Cons x | |
250 | |
336 | 251 lemma18 :{l : Level} {U : Set l} {X : Set l} → Append {_} {Int U} {X} l1 l2 ≡ Cons n1 (Cons n2 (Cons n1 Nil)) |
328 | 252 lemma18 = refl |
326 | 253 |
347 | 254 lemma18' :{l : Level} {U : Set l} {X : Set l} → Append'' {_} {Int U} {X} l1 l2 ≡ Cons n1 (Cons n2 (Cons n1 Nil)) |
255 lemma18' = refl | |
256 | |
257 lemma18'' :{l : Level} {U : Set l} {X : Set l} → Append'' {_} {Int U} {X} ≡ Append | |
258 lemma18'' = refl | |
259 | |
336 | 260 Reverse : {l : Level} {U : Set l} {X : Set l} → List U (List U X) → List U X |
347 | 261 Reverse {l} {U} {X} x = ListIt Nil ( λ u w → Append w (Cons u Nil) ) x |
330 | 262 |
336 | 263 lemma19 :{l : Level} {U : Set l} {X : Set l} → Reverse {_} {Int U} {X} l3 ≡ Cons n1 (Cons n2 (Cons n3 Nil)) |
330 | 264 lemma19 = refl |
265 | |
347 | 266 Reverse' : {l : Level} {U : Set l} {X : Set l} → List U X → List U X |
267 Reverse' {l} {U} {X} x = LListIt Nil ( λ u w → Append w (Cons u Nil) ) x | |
268 | |
269 lemma19' :{l : Level} {U : Set l} {X : Set l} → Reverse' {_} {Int U} {X} l3 ≡ Cons n1 (Cons n2 (Cons n3 Nil)) | |
270 lemma19' = {!!} | |
271 | |
336 | 272 Tree : {l : Level} → Set l → Set l → Set l |
273 Tree {l} = λ( U X : Set l) → X → ( (U → X) → X ) → X | |
325 | 274 |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
275 NilTree : {l : Level} {U : Set l} {X : Set l} → Tree U X |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
276 NilTree {l} {U} {X} = λ(x : X) → λ(y : (U → X) → X) → x |
325 | 277 |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
278 Collect : {l : Level} {U : Set l} {X : Set l} → (U → Tree U X ) → Tree U X |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
279 Collect {l} {U} {X} f = λ(x : X) → λ(y : (U → X) → X) → y (λ(z : U) → f z x y ) |
325 | 280 |
336 | 281 TreeIt : {l : Level} {U W X : Set l} → W → ( (U → W) → W ) → Tree U W → W |
331 | 282 TreeIt w h t = t w h |
337
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
283 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
284 t0 : {l : Level} {X X' : Set l} → Tree (Bool X) X' |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
285 t0 {l} {X} {X'} = NilTree |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
286 |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
287 t1 : {l : Level} {X X' : Set l} → Tree (Bool X) X' |
203593ff1e60
add Tree example ( not yet worked )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
336
diff
changeset
|
288 t1 {l} {X} {X'} = NilTree -- Collect (λ b → D b NilTree (λ c → Collect NilTree NilTree )) |