Mercurial > hg > Members > kono > Proof > category
diff system-f.agda @ 315:0d7fa6fc5979
System T and System F
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 15 Mar 2014 10:15:54 +0900 |
parents | |
children | 7a3229b32b3c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/system-f.agda Sat Mar 15 10:15:54 2014 +0900 @@ -0,0 +1,66 @@ +open import Level +open import Relation.Binary.PropositionalEquality + +module system-f {l : Level} where + +postulate A : Set +postulate B : Set + +data _∨_ (A B : Set) : Set where + or1 : A -> A ∨ B + or2 : B -> A ∨ B + +lemma01 : A -> A ∨ B +lemma01 a = or1 a + +lemma02 : B -> A ∨ B +lemma02 b = or2 b + +lemma03 : {C : Set} -> (A ∨ B) -> (A -> C) -> (B -> C) -> C +lemma03 (or1 a) ac bc = ac a +lemma03 (or2 b) ac bc = bc b + +postulate U : Set l +postulate V : Set l + + +Bool = {X : Set l} -> X -> X -> X + +T : Bool +T = \{X : Set l} -> \(x y : X) -> x + +F : Bool +F = \{X : Set l} -> \(x y : X) -> y + +D : {U : Set l} -> U -> U -> Bool -> U +D {U} u v t = t {U} u v + +lemma04 : {u v : U} -> D u v T ≡ u +lemma04 = refl + +lemma05 : {u v : U} -> D u v F ≡ v +lemma05 = refl + +_×_ : Set l -> Set l -> Set (suc l) +U × V = {X : Set l} -> (U -> V -> X) -> X + +<_,_> : {U V : Set l} -> U -> V -> (U × V) +<_,_> {U} {V} u v = \{X} -> \(x : U -> V -> X) -> x u v + +π1 : {U V : Set l} -> (U × V) -> U +π1 {U} {V} t = t {U} (\(x : U) -> \(y : V) -> x) + +π2 : {U V : Set l} -> (U × V) -> V +π2 {U} {V} t = t {V} (\(x : U) -> \(y : V) -> y) + +lemma06 : {U V : Set l } -> {u : U } -> {v : V} -> π1 ( < u , v > ) ≡ u +lemma06 = refl + +lemma07 : {U V : Set l } -> {u : U } -> {v : V} -> π2 ( < u , v > ) ≡ v +lemma07 = refl + +hoge : {U V : Set l} -> U -> V -> (U × V) +hoge u v = < u , v > + +-- lemma08 : (t : U × V) -> < π1 t , π2 t > ≡ t +-- lemma08 t = {!!}