Folly-0.1.5.0: test/Folly/ResolutionTests.hs
module Folly.ResolutionTests(allResolutionTests) where
import Folly.Formula
import Folly.Resolution
import Folly.Theorem
import Folly.TestUtils
allResolutionTests = do
testIsValid
testIsValid =
testFunction isValid isValidTestCases
x = var "x"
y = var "y"
z = var "z"
a = var "a"
d = var "d"
p = var "p"
one = constant "1"
john = constant "John"
fido = constant "Fido"
times a b = func "*" [a, b]
eq a b = pr "=" [a, b]
dog d = pr "Dog" [d]
owns a b = pr "Owns" [a, b]
kills a b = pr "Kills" [a, b]
loves a b = pr "Loves" [a, b]
lovesAnimals a = pr "LovesAnimals" [a]
isValidTestCases :: [(Theorem, Bool)]
isValidTestCases =
[(dog1, True),
(dog2, False),
(dog3, True),
(dog4, True),
(dog5, True),
(dog6, False),
(group1, True),
(group2, True)]
-- (group3, False)]
dog1 = theorem [] (fa a (dis (dog a) (neg (dog a))))
dog2 = theorem [] (dog a)
dog3 = theorem [dog x] (dog x)
dog4 = theorem [(fa d (imp (dog d) (loves john d))), dog fido] (loves john fido)
dog5 = theorem
[(fa p (imp (te d (con (dog d) (owns p d))) (lovesAnimals p))),
(imp (lovesAnimals x) (fa a (neg (kills x a)))),
owns john fido,
dog fido]
(fa a (neg (kills john a)))
dog6 = theorem [] (con (dog a) (neg $ dog a))
group1 = theorem
groupAxioms
(imp
(con (con (con (eq (times x y) one) (eq (times y x) one)) (eq (times x z) one)) (eq (times z x) one))
(eq y z))
group2 = theorem groupAxioms (imp (fa x (con (eq (times x z) one) (eq (times z x) one))) (eq z one))
group3 =
theorem groupAxioms (fa x (fa y (eq (times x y) (times y x))))
group4 = theorem (tail equalityAxioms) (head equalityAxioms)
equalityAxioms :: [Formula]
equalityAxioms =
[(fa x (pr "=" [x, x])),
(fa x (fa y (imp (eq x y) (eq y x)))),
(fa x (fa y (fa z (imp (con (eq x y) (eq y z)) (eq x z)))))]
groupAxioms =
[(fa x (te y (con (eq (times x y) one) (eq (times y x) one)))),
(fa x (fa y (fa z (eq (times x (times y z)) (times (times x y) z))))),
(fa x (con (eq (times x one) x) (eq (times one x) x)))] ++
equalityAxioms