Functional Programming, Formal Methods.
Nat n) -> P n -> P (Succ n)) λ (Z : P Zero) S n (n P S Z) ind = λ (P : (n : Nat n) -> Set) λ (S : (n : Nat n) -> P n -> P (Succ n)) λ (Z : P Zero) λ (n : Nat n) n P S Z Here, Nat is a predicate on itself (Nat : Nat -> Set). This allows its type to return P n, replicating what self-types do. In a