-- generic set mod! SET(X :: TRIV) { [Elt.X < Set] -- empty set op empty : -> Set {constr} . -- assicative and commutative set constructor with identity empty op (_ _) : Set Set -> Set {constr assoc comm id: empty} . -- (_ _) is idempotent with respect to the sort Elt eq E:Elt E = E . } -- :m-and :m-or examples mod NAT-SET-PRED {pr(SET(NAT)*{sort Set -> NatSet}) pred p1 : Nat . pred p2 : Nat NatSet . pred p3 : Nat Nat NatSet . ops q1 q2 q3 : NatSet -> Bool . eq [:m-and]: q1(N1:Nat NS:NatSet) = p1(N1) . eq [:m-and]: q2(N1:Nat NS:NatSet) = p2(N1,NS) . eq [:m-and]: q3(N1:Nat N2:Nat NS:NatSet) = p3(N1,N2,NS) . ops r1 r2 : NatSet -> Bool . eq [:m-or]: r1(N1:Nat NS:NatSet) = p1(N1) . eq [:m-or]: r2(N1:Nat N2:Nat NS:NatSet) = p2(N1,N2) . } open NAT-SET-PRED . set debug meta on red q1(1 2 3) . red q2(1 2 3) . red q3(1 2 3) . red q1(1 2 3 4) . red q2(1 2 3 4) . red q3(1 2 3 4) . -- red r1(1 2 3) . red r2(1 2 3) . red r1(1 2 3 4) . -- red r2(1 2 3 4) . set debug meta off close