functor T_fp (D : G4IP) :> TEST = struct exception Error val ==> = P.Implies val & = P.And val v = P.Or val f = P.False val t = P.True val ~ = P.Not val <=> = fn (A,B) => P.And (P.Implies (A, B), P.Implies (B, A)) val <== = fn (A,B) => P.Implies (B, A) infix 9 & infix 8 v infixr 7 ==> infix 7 <== infix 6 <=> val A = P.Atom("A") val B = P.Atom("B") val C = P.Atom("C") val D = P.Atom("D") fun cfalse (A) = if D.decide A then raise Error else () fun ctrue (A) = if D.decide A then () else raise Error val ex281 = (A ==> (B ==> C)) <=> ((A & B) ==> C); val _ = ctrue ex281; val ex282 = (A ==> (B & C)) <=> ((A ==> B) & (A ==> C)); val _ = ctrue ex282; val ex283a = (A ==> (B v C)) ==> ((A ==> B) v (A ==> C)); val _ = cfalse ex283a; val ex283b = (A ==> (B v C)) <== ((A ==> B) v (A ==> C)); val _ = ctrue ex283b; val ex284a = ((A ==> B) ==> C) ==> ((A v B) & (B ==> C)); val _ = cfalse ex284a; val ex284b = ((A ==> B) ==> C) <== ((A v B) & (B ==> C)); val _ = ctrue ex284b; val ex285 = ((A v B) ==> C) <=> ((A ==> C) & (B ==> C)); val _ = ctrue ex285; val ex286 = (A & (B v C)) <=> ((A & B) v (A & C)); val _ = ctrue ex286; val ex287 = (A v (B & C)) <=> ((A v B) & (A v C)); val _ = ctrue ex287; val ex291a = ~ (A & B) ==> ~ A v ~ B; val _ = cfalse ex291a; val ex291b = ~ (A & B) <== ~ A v ~ B; val _ = ctrue ex291b; val ex292 = ~ (A v B) <=> ~ A & ~ B; val _ = ctrue ex292; val ex293a = ~ (A ==> B) ==> A & ~ B; val _ = cfalse ex293a; val ex293b = ~ (A ==> B) <== A & ~ B; val _ = ctrue ex293b; val ex294a = ~ (~ A) ==> A; val _ = cfalse ex294a; val ex294b = ~ (~ A) <== A; val _ = ctrue ex294b; val ex295 = ~ t <=> f; val _ = ctrue ex295; val ex296 = ~ f <=> t; val _ = ctrue ex296; val t1 = ~ (~ (~ A)) <=> ~ A; val _ = ctrue t1; val t2 = (A ==> B) ==> (B ==> C) ==> (C ==> D) ==> (A ==> D); val _ = ctrue t2; val k = (A ==> (B ==> A)); val _ = ctrue k; val s = (A ==> B) ==> (A ==> (B ==> C)) ==> (A ==> C); val _ = ctrue s; val p = ((A ==> B) ==> A) ==> A; val _ = cfalse p; val _ = print "Tests passed\n" end; structure X = T_fp (G_fp);