-- Lecture 4: Proof score -- page 3, 4 mod! BASIC-NAT{ [Zero NzNat < Nat] op 0 : -> Zero op s_ : Nat -> NzNat } mod! NAT+ { pr(BASIC-NAT) op _+_ : Nat Nat -> Nat vars M N : Nat eq N + 0 = N . eq M + s N = s(M + N) . } mod! NAT* { pr(NAT+) op _*_ : Nat Nat -> Nat vars M N : Nat eq N * 0 = 0 . eq M * s N = M + (M * N) . } mod! PROOF-n { pr(NAT*) op n : -> Nat } select PROOF-n + EQL red s (0 + n) = 0 + s n . -- page 5, 6 mod! PROOF-i { pr(NAT*) ops x y : -> Nat eq x = y + y . } select PROOF-i + EQL red x * s s 0 = (y * s s 0) + (y * s s 0) . -- page 7 open NAT* + EQL ops x y : -> Nat . eq x = y + y . red x * s s 0 = (y * s s 0) + (y * s s 0) . close