Functional Programming, Formal Methods.
(P : Nat -> Set) -> ((n : Nat) -> P n -> P (Succ n)) -> (P Zero) -> P n Succ : Nat -> Nat Succ = λn -> λP -> λS -> λZ -> S n (P n s z) Zero : Nat Zero = λP -> λS -> λZ -> Z ind : (P : Set) -> ((n : Nat) -> P n -> P (Succ n)) -> (P Zero) -> (n : Nat) -> P n ind = λP -> λS -> λZ -> λn -> n P S Z