-- Lecture 3: Confluence -- page 20 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-ASSOC{ pr(NAT+) op first : Nat -> Nat vars X Y Z : Nat eq (X + Y) + Z = X +(Y + Z) . eq first(X + Y) = X . } select NAT-ASSOC . start first((0 + s 0) + s s 0) . apply 2 at term . start first((0 + s 0) + s s 0) . apply 1 at (1) . apply 2 at term . -- page 22 mod! BRANCH{ [Elt] ops a b : -> Elt op f : Elt Elt -> Elt eq a = b . } select BRANCH . start f(a, a) . apply 1 at (1) . apply 1 at (2) . start f(a, a) . apply 1 at (2) . apply 1 at (1) . -- page 24 mod! BOOL-NOT{ [B] ops 0 1 : -> B op ~_ : B -> B eq ~ ~ X:B = X . eq ~ 0 = 1 . eq ~ 1 = 0 . } select BOOL-NOT . start ~ ~ 0 . apply 1 at term . start ~ ~ 0 . apply 2 at (1) . mod! CP(X :: TRIV){ [Cp] op (_, _) : Elt Elt -> Cp pred check : Cp var X : Elt eq check(X, X) = true . } select CP(X <= view from TRIV to BOOL-NOT {sort Elt -> B}) . red check(0, ~ 1) . red check(1, ~ 0) . red check(~ X:B, ~ X) .