------------------------------------------------------------ -- Core ITT (minus W) data Empty : * => { } absurd [A : *] [x : Empty] : A => ( Empty-Elim x (\_ => A) ) neg [A : *] : * => (A -> Empty) record Unit : * => tt { } record Prod : [A : *] [B : A -> *] -> * => prod {fst : A, snd : B fst} data Bool : * => { true : Bool | false : Bool } -- The if_then_else_ is provided by Bool-Elim ------------------------------------------------------------ -- Examples → data Nat : * => { zero : Nat | suc : Nat -> Nat } gt [n : Nat] : Nat -> * => ( Nat-Elim n (\_ => Nat -> *) (\_ => Empty) (\n f m => Nat-Elim m (\_ => *) Unit (\m' _ => f m')) ) data List : [A : *] -> * => { nil : List A | cons : A -> List A -> List A } length [A : *] [xs : List A] : Nat => ( List-Elim xs (\_ => Nat) zero (\_ _ n => suc n) ) head [A : *] [xs : List A] : gt (length A xs) zero -> A => ( List-Elim xs (\xs => gt (length A xs) zero -> A) (\p => absurd A p) (\x _ _ _ => x) ) ------------------------------------------------------------ -- Examples ×