theory Nat imports Base begin axiomatization Nat :: \o\ and zero :: \o\ ("0") and suc :: \o \ o\ and NatInd :: \(o \ o) \ o \ (o \ o \ o) \ o \ o\ where NatF: "Nat: U i" and Nat_zero: "0: Nat" and Nat_suc: "n: Nat \ suc n: Nat" and NatE: "\ n: Nat; c\<^sub>0: C 0; \n. n: Nat \ C n: U i; \k c. \k: Nat; c: C k\ \ f k c: C (suc k) \ \ NatInd (\n. C n) c\<^sub>0 (\k c. f k c) n: C n" and Nat_comp_zero: "\ c\<^sub>0: C 0; \k c. \k: Nat; c: C k\ \ f k c: C (suc k); \n. n: Nat \ C n: U i \ \ NatInd (\n. C n) c\<^sub>0 (\k c. f k c) 0 \ c\<^sub>0" and Nat_comp_suc: "\ n: Nat; c\<^sub>0: C 0; \k c. \k: Nat; c: C k\ \ f k c: C (suc k); \n. n: Nat \ C n: U i \ \ NatInd (\n. C n) c\<^sub>0 (\k c. f k c) (suc n) \ f n (NatInd (\n. C n) c\<^sub>0 (\k c. f k c) n)" lemmas [intros] = NatF Nat_zero Nat_suc and [elims] = NatE and [comps] = Nat_comp_zero Nat_comp_suc text \Non-dependent recursion\ abbreviation "NatRec C \ NatInd (K C)" section \Basic arithmetic\ definition add (infixl "+" 50) where [comps]: "m + n \ NatRec Nat n (K suc) m" definition mul (infixl "*" 55) where [comps]: "m * n \ NatRec Nat 0 (K $ add n) m" end