module canonical where def A : Set = 𝟐 def B (b : 𝟐) : Setβ‚€ = indβ‚‚ (Ξ» (_ : 𝟐), Setβ‚€) 𝟎 𝟏 b def Nat : Setβ‚€ = W (b : A), B b def zero : Nat = sup A B 0β‚‚ (Ξ» (e : 𝟎), indβ‚€ Nat e) def succ (n : Nat) : Nat = sup A B 1β‚‚ (Ξ» (u : 𝟏), n) def plus (m n : Nat) : Nat = indα΅‚ A B (Ξ» (_ : Nat), Nat) (Ξ» (b : 𝟐) (f : (B b) β†’ Nat) (rec : (B b) β†’ Nat), indβ‚‚ (Ξ» (b : 𝟐), (B b β†’ Nat) β†’ (B b β†’ Nat) β†’ Nat) (Ξ» (f1 : 𝟎 β†’ Nat) (rec1 : 𝟎 β†’ Nat), n) (Ξ» (f2 : 𝟏 β†’ Nat) (rec2 : 𝟏 β†’ Nat), succ (rec2 β˜…)) b f rec) m -- W-types (Internalized) def WNat : Setβ‚€ = Nat def zero_w : WNat = zero def succ_w (n : WNat) : WNat = succ n