packages feed

speculate 0.4.0 → 0.4.1

raw patch · 193 files changed

+7140/−7268 lines, 193 filesdep ~express

Dependency ranges changed: express

Files

.gitignore view
@@ -37,17 +37,17 @@ bench/*.pdf mk/toplibs -tests/test-compose-dynamic-tests/test-engine-tests/test-expr-tests/test-eval-tests/test-haexpress-tests/test-kbc-tests/test-order-tests/test-creason-tests/test-reason-tests/test-stats-tests/test-utils+test/compose-dynamic+test/engine+test/expr+test/eval+test/haexpress+test/kbc+test/order+test/creason+test/reason+test/stats+test/utils eg/eg eg/algebraic-graphs eg/arith
Makefile view
@@ -3,7 +3,7 @@ # Copyright:   (c) 2015-2019 Rudy Matela # License:     3-Clause BSD  (see the file LICENSE) # Maintainer:  Rudy Matela <rudy@matela.com.br>-GHCIMPORTDIRS = src:eg:tests+GHCIMPORTDIRS = src:eg:test GHCFLAGS = -O2 \   $(shell grep -q "Arch Linux" /etc/lsb-release && echo -dynamic) # -Wall -Wno-name-shadowing -Wno-orphans -Wno-unused-matches@@ -16,14 +16,14 @@ MAXTESTS = 4000 MAXSIZE = -s4 TESTS = \-  tests/test-creason \-  tests/test-engine \-  tests/test-eval \-  tests/test-expr \-  tests/test-order \-  tests/test-reason \-  tests/test-utils \-  tests/test-stats+  test/creason \+  test/engine \+  test/eval \+  test/expr \+  test/order \+  test/reason \+  test/utils \+  test/stats MOSTEG = \   eg/arith \   eg/arith-negate-abs \@@ -60,36 +60,36 @@ # regexes needs regex-tdfa, which may break the build # speculate-reason output differs in different GHC versions QUICKTESTS = \-  tests/test-engine \-  tests/test-eval \-  tests/test-expr \-  tests/test-order \-  tests/test-reason+  test/engine \+  test/eval \+  test/expr \+  test/order \+  test/reason QUICKEG = \   eg/arith \   eg/bool \   eg/list-LIST_ALL_HSS = find src tests eg bench/*.hs -name \*.hs+LIST_ALL_HSS = find src test eg bench/*.hs -name \*.hs LIST_LIB_HSS = find src -name \*.hs LIB_DEPS = base leancheck express cmdargs containers  all: mk/toplibs -quick-test: $(patsubst %,%.test,$(QUICKTESTS)) \-            $(patsubst %,%.test-model,$(QUICKEG))+quick-test: $(patsubst %,%.run,$(QUICKTESTS)) \+            $(patsubst %,%.diff-test,$(QUICKEG))  test: all test-sdist \-  $(patsubst %,%.test,$(TESTS)) \-  $(patsubst %,%.test-model,$(EG) $(wildcard bench/*-c))+  $(patsubst %,%.run,$(TESTS)) \+  $(patsubst %,%.diff-test,$(EG) $(wildcard bench/*-c)) -test-without-extra-deps: all $(patsubst %,%.test,$(TESTS)) \-                             $(patsubst %,%.test-model,$(MOSTEG) $(wildcard bench/*-c))+test-without-extra-deps: all $(patsubst %,%.run,$(TESTS)) \+                             $(patsubst %,%.diff-test,$(MOSTEG) $(wildcard bench/*-c)) -test-extra-deps: all $(patsubst %,%.test,$(TESTS)) \-                     $(patsubst %,%.test-model,$(EXTRAEG) $(wildcard bench/*-c))+test-extra-deps: all $(patsubst %,%.run,$(TESTS)) \+                     $(patsubst %,%.diff-test,$(EXTRAEG) $(wildcard bench/*-c))  test-sdist:-	./tests/test-sdist+	./test/sdist  legacy-test: 	make clean  &&  make -j8 GHC=ghc-8.2   &&  make quick-test -j8 GHC=ghc-8.2@@ -137,48 +137,48 @@ slow-test: MAXSIZE = slow-test: test -%.test: %+%.run: % 	./$< $(MAXTESTS) -bench/%-c.test-model: eg/%-	./tests/test-model $(MAXSIZE) bench/$*-c+bench/%-c.diff-test: eg/%+	./test/diff $(MAXSIZE) bench/$*-c -bench/%-c.update-4-test-model: %-	./tests/update-test-model -s4 bench/$*-c+bench/%-c.update-4-diff-test: %+	./test/update-diff -s4 bench/$*-c -bench/%-c.update-slow-test-model: %-	./tests/update-test-model     bench/$*-c+bench/%-c.update-slow-diff-test: %+	./test/update-diff     bench/$*-c -%.test-model: %-	./tests/test-model $(MAXSIZE) $<+%.diff-test: %+	./test/diff $(MAXSIZE) $< -%.update-test-model: %-	./tests/update-test-model -s4 $<-	./tests/update-test-model     $<+%.update-diff-test: %+	./test/update-diff -s4 $<+	./test/update-diff     $< -%.update-4-test-model: %-	./tests/update-test-model -s4 $<+%.update-4-diff-test: %+	./test/update-diff -s4 $< -%.update-slow-test-model: %-	./tests/update-test-model     $<+%.update-slow-diff-test: %+	./test/update-diff     $< -%.update-7-test-model: %-	./tests/update-test-model -s7 $<+%.update-7-diff-test: %+	./test/update-diff -s7 $< -update-test-model: update-4-test-model update-slow-test-model+update-diff-test: update-4-diff-test update-slow-diff-test -update-4-test-model: $(patsubst %,%.update-4-test-model,$(EG) $(wildcard bench/*-c))+update-4-diff-test: $(patsubst %,%.update-4-diff-test,$(EG) $(wildcard bench/*-c)) -update-slow-test-model: $(patsubst %,%.update-slow-test-model,$(EG) $(wildcard bench/*-c))+update-slow-diff-test: $(patsubst %,%.update-slow-diff-test,$(EG) $(wildcard bench/*-c))  bench: all-	./tests/benchmark-cmp $(EG) bench/*-c+	./test/benchmark-cmp $(EG) bench/*-c  save-bench: all-	./tests/benchmark-save $(EG) bench/*-c+	./test/benchmark-save $(EG) bench/*-c  memory-benchmark: all-	./tests/memory-benchmark $(EG) bench/*-c+	./test/memory-benchmark $(EG) bench/*-c  qs-bench: 	make -sC bench/qs1 bench@@ -189,9 +189,9 @@ 	make -sC bench/qs2 save-bench  update-listable-expr:-	cp -rav ../express/test/Test/ListableExpr.hs tests/Test/+	cp -rav ../express/test/Test/ListableExpr.hs test/Test/ -ghci: tests/Test.ghci+ghci: test/Test.ghci  clean: clean-hi-o clean-haddock 	rm -f $(TESTS) $(EG) eg/*.dot eg/*.pdf TAGS tags mk/toplibs@@ -199,13 +199,13 @@ 	make clean -C bench/qs2 	rm -f doc/*.html doc/*.gif doc/*.css doc/*.js doc/*.png -tests/Test.o: src/Test/Speculate.o+test/Test.o: src/Test/Speculate.o  # NOTE: (very hacky!) the following target allows parallel compilation (-jN) of # eg and tests programs so long as they don't share dependencies _not_ stored-# in src/ and tests/.  Runnable binaries should depend on mk/toplibs instead of+# in src/ and test/.  Runnable binaries should depend on mk/toplibs instead of # actual Haskell source files-mk/toplibs: src/Test/Speculate.o tests/Test.o+mk/toplibs: src/Test/Speculate.o test/Test.o 	touch mk/toplibs  hlint:
TODO.md view
@@ -3,16 +3,14 @@  A list of things to do for Speculate. -* release new Speculate after releasing Express-  (which will happen after I have a version of Extrapolate that uses Express)--* `-U` / `--auto-constants` is broken, fix it.+* simpilfy "bench" handing.  Do like in LeanCheck and Extrapolate. -* simplify "test" handling.  Do like in LeanCheck and Extrapolate.-  instead of having to run `make tests/test-something.test`,-  run with `make test/something.run`.+* improve performance of the Reason module:+  when listing rewrites of a given expression,+  I can use a custom data structure that computes+  matches all at once while traversing an expression. -* simpilfy "bench" handing.  Do like in LeanCheck and Extrapolate.+* fix issues with Dershowitz and Knuth-Bendix orders.  * (code readability) review and document code @@ -25,24 +23,6 @@   the expensive thing.  But it does not pay off to test x + y = z + w before   testing x + y = y + x.  The second needs to hold for the first to hold.  And,   it will be far more common!--* (performance) Improve the performance of KBCompletion.-  In the process of generating equivalences, the slowest function is complete,-  accounting for 88 percent of runtime.  Of that:-  - complete     -- 88%-  - deduce       -- 79%-  - normalizedCP -- 78%-  - normalize    -- 68%-  I don't think normalizedCriticalPairs / normalize can be optimized any-  further.  Maybe the problem comes with complete itself, that should deduce-  less often or even maybe interleave steps more often.  Maybe adding-  normalizedCriticalPairs as soon as I add a rule?  Running deduce twice less-  often does not help, as other steps take a bit over and deduce still accounts-  for a high percentage (let's say 60%).  Possible fixes:-  - implement deduce2, simplify2, compose2 and collapse2 from unfailing-    completion-  - finish groundJoinable from "Ordered Rewriting and Confluence" by-    adding one last condition  * (performance and interface): actually compute what happens with   undefined values.  e.g.: head [] == undefined.  This will/may make things
bench/runtime-zero view
@@ -1,35 +1,35 @@ GHC 8.6.5-express-0.0.4+express-0.1.0 leancheck-0.9.1-arith               0.230-arith-c             0.576-arithficial         0.956-arith-negate-abs    1.750-binarytree          1.733-binarytree0         0.510-bool                1.503-bool-c              1.290-colour              2.066-digraphs            1.596-fun                 1.073-insertsort          8.216-insertsort0         0.970-length              0.636-list                2.606-list-c              1.613-minus               0.536-minus-c             0.916-monad               0.606+arith               0.260+arith-c             0.610+arithficial         0.976+arith-negate-abs    1.823+binarytree          1.793+binarytree0         0.533+bool                1.950+bool-c              1.753+colour              2.206+digraphs            1.603+fun                 1.243+insertsort          8.320+insertsort0         1.000+length              0.640+list                2.730+list-c              1.673+minus               0.580+minus-c             0.966+monad               0.653 nord                0.010-oddeven             6.753-plus-abs            3.633-pretty              8.066-ratio               9.143-regexes             7.806-sets                7.283-speculate-reason    3.180-string              0.896-tauts               4.336-tuples              1.303+oddeven             6.930+plus-abs            3.866+pretty              9.183+ratio               9.320+regexes             8.300+sets                7.610+speculate-reason    3.710+string              0.953+tauts               4.466+tuples              1.313 unit                0.010-zip                 1.993+zip                 2.490
bin/compare-arith view
@@ -11,7 +11,7 @@ sed -e "s/xd/id/" | sort > $qs2 -cat tests/model/arith |+cat test/model/arith | grep " == " | sed -e "s/ *//" | sed -e 's/\([^a-z]\) (\([a-z]* .\))/\1 \2/g' |
bin/compare-arithficial view
@@ -17,7 +17,7 @@ sed -e "s/xd/id/" | sort > $qs2 -cat tests/model/arithficial |+cat test/model/arithficial | grep " == " | sed -e "s/ *//" | sed -e 's/\([^a-z]\) (\([a-z]* .\))/\1 \2/g' |
bin/compare-bool view
@@ -10,7 +10,7 @@ sed -e "y/xyz/pqr/;s/=/==/" | sort > $qs2 -cat tests/model/bool |+cat test/model/bool | grep " == " | sed -e "s/ *//" | sed -e 's/\([^a-z]\) (\([a-z]* .\))/\1 \2/g' |
eg/fun.hs view
@@ -6,8 +6,7 @@   { maxTests = 1000   , instances = [reifyInstances (undefined :: Int -> Int)]   , constants =-      [ hole (undefined :: Int -> Int)-      , constant "map" (map :: (Int -> Int) -> [Int] -> [Int])+      [ constant "map" (map :: (Int -> Int) -> [Int] -> [Int])       , constant "id"  (id  :: Int -> Int)       , constant "."   ((.) :: (Int -> Int) -> (Int -> Int) -> (Int -> Int))       ]
eg/monad.hs view
@@ -11,8 +11,7 @@ main = speculate args   { instances = [reifyInstances (int >- [int])]   , constants =-      [ hole (int >- [int])-      , constant "return" (return :: A -> [A])+      [ constant "return" (return :: A -> [A])       , constant ">>="    ((>>=) :: [A] -> (A -> [B]) -> [B])       , constant ">=>"    ((>=>) :: (A -> [B]) -> (B -> [C]) -> (A -> [C]))       ]
mk/depend.mk view
@@ -2,7 +2,6 @@   bench/arithficial.hs \   mk/toplibs bench/arithficial.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -36,7 +35,6 @@   bench/nord.hs \   mk/toplibs bench/nord.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -70,7 +68,6 @@   bench/unit.hs \   mk/toplibs bench/unit.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -104,7 +101,6 @@   eg/algebraic-graphs.hs \   mk/toplibs eg/algebraic-graphs.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -141,7 +137,6 @@   eg/arith-negate-abs.hs \   mk/toplibs eg/arith-negate-abs.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -172,7 +167,6 @@   src/Test/Speculate/Args.hs \   eg/arith-negate-abs.hs eg/arith.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -206,7 +200,6 @@   eg/binarytree0.hs \   mk/toplibs eg/binarytree0.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -240,7 +233,6 @@   eg/binarytree.hs \   mk/toplibs eg/binarytree.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -274,7 +266,6 @@   eg/bool.hs \   mk/toplibs eg/bool.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -308,7 +299,6 @@   eg/colour.hs \   mk/toplibs eg/colour.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -345,7 +335,6 @@   eg/Digraph.hs \   mk/toplibs eg/digraphs.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -380,7 +369,6 @@   eg/fun.hs \   mk/toplibs eg/fun.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -416,7 +404,6 @@   eg/insertsort0.hs \   mk/toplibs eg/insertsort0.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -450,7 +437,6 @@   eg/insertsort.hs \   mk/toplibs eg/insertsort.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -484,7 +470,6 @@   eg/length.hs \   mk/toplibs eg/length.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -518,7 +503,6 @@   eg/list.hs \   mk/toplibs eg/list.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -552,7 +536,6 @@   eg/minus.hs \   mk/toplibs eg/minus.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -586,7 +569,6 @@   eg/monad.hs \   mk/toplibs eg/monad.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -622,7 +604,6 @@   eg/oddeven.hs \   mk/toplibs eg/oddeven.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -656,7 +637,6 @@   eg/plus-abs.hs \   mk/toplibs eg/plus-abs.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -690,7 +670,6 @@   eg/pretty-compact.hs \   mk/toplibs eg/pretty-compact.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -724,7 +703,6 @@   eg/pretty.hs \   mk/toplibs eg/pretty.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -758,7 +736,6 @@   eg/ratio.hs \   mk/toplibs eg/ratio.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -793,7 +770,6 @@   eg/regexes.hs \   mk/toplibs eg/regexes.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -833,7 +809,6 @@   eg/Set.hs \   mk/toplibs eg/sets.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -865,9 +840,8 @@   eg/sets.hs \   eg/Set.hs eg/speculate-reason.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+  test/Test.hs \+  test/Test/ListableExpr.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -898,15 +872,14 @@   src/Test/Speculate/Args.hs \   eg/speculate-reason.hs eg/speculate-reason: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \+  test/Test.hs \+  test/Test/ListableExpr.hs \   eg/speculate-reason.hs \   mk/toplibs eg/string: \   eg/string.hs \   mk/toplibs eg/string.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -946,7 +919,6 @@   eg/Taut.hs \   mk/toplibs eg/tauts.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -981,7 +953,6 @@   eg/tuples.hs \   mk/toplibs eg/tuples.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1015,7 +986,6 @@   eg/zip.hs \   mk/toplibs eg/zip.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1046,7 +1016,6 @@   src/Test/Speculate/Args.hs \   eg/zip.hs src/Test/Speculate/Args.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1064,7 +1033,6 @@   src/Test/Speculate/Expr/Core.hs \   src/Test/Speculate/Args.hs src/Test/Speculate/CondReason.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1087,7 +1055,6 @@ src/Test/Speculate/Engine: \   mk/toplibs src/Test/Speculate/Engine.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1113,11 +1080,9 @@ src/Test/Speculate/Expr/Core: \   mk/toplibs src/Test/Speculate/Expr/Core.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/List.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Expr/Equate.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1132,7 +1097,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Expr/Ground.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1148,7 +1112,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Expr/Instance.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1162,7 +1125,6 @@   src/Test/Speculate/Expr/Instance.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Expr.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1179,7 +1141,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Function/A1000.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1211,7 +1172,6 @@   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs src/Test/Speculate/Function/A100.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1243,7 +1203,6 @@   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs src/Test/Speculate/Function.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1276,7 +1235,6 @@ src/Test/Speculate: \   mk/toplibs src/Test/Speculate.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1306,7 +1264,6 @@   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs src/Test/Speculate/Pretty.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1329,7 +1286,6 @@   src/Test/Speculate/Expr/Core.hs \   src/Test/Speculate/CondReason.hs src/Test/Speculate/Reason/Order.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1347,7 +1303,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Reason.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1366,7 +1321,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/Report.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1395,7 +1349,6 @@   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs src/Test/Speculate/Sanity.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1413,7 +1366,6 @@   src/Test/Speculate/Expr/Equate.hs \   src/Test/Speculate/Expr/Core.hs src/Test/Speculate/SemiReason.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1437,7 +1389,6 @@ src/Test/Speculate/Utils/Colour.o: \   src/Test/Speculate/Utils/Colour.hs src/Test/Speculate/Utils/Digraph.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1460,7 +1411,6 @@ src/Test/Speculate/Utils/Ord.o: \   src/Test/Speculate/Utils/Ord.hs src/Test/Speculate/Utils.o: \-  src/Test/Speculate/Utils/Typeable.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1482,14 +1432,10 @@   src/Test/Speculate/Utils/Timeout.hs src/Test/Speculate/Utils/Tuple.o: \   src/Test/Speculate/Utils/Tuple.hs-src/Test/Speculate/Utils/Typeable.o: \-  src/Test/Speculate/Utils/Typeable.hs \-  src/Test/Speculate/Utils/List.hs-tests/test-creason.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-creason.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/creason.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/creason.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1518,16 +1464,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-creason: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-creason.hs \+test/creason: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/creason.hs \   mk/toplibs-tests/test-engine.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-engine.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/engine.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/engine.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1556,16 +1501,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-engine: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-engine.hs \+test/engine: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/engine.hs \   mk/toplibs-tests/test-eval.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-eval.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/eval.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/eval.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1594,16 +1538,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-eval: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-eval.hs \+test/eval: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/eval.hs \   mk/toplibs-tests/test-expr.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-expr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/expr.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/expr.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1632,18 +1575,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-expr: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  tests/test-expr.hs \+test/expr: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/expr.hs \   mk/toplibs-tests/Test/ListableExpr.o: \-  tests/Test/ListableExpr.hs-tests/test-order.o: \-  tests/Test.hs \-  tests/test-order.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/order.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/order.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1672,15 +1612,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-order: \-  tests/Test.hs \-  tests/test-order.hs \-  tests/Test/ListableExpr.hs \+test/order: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/order.hs \   mk/toplibs-tests/Test.o: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/reason.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/reason.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1709,11 +1649,15 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-reason.o: \-  tests/test-reason.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/reason: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/reason.hs \+  mk/toplibs+test/stats.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/stats.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1742,16 +1686,16 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-reason: \-  tests/test-reason.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \+test/stats: \+  test/Test.hs \+  test/Test/ListableExpr.hs \+  test/stats.hs \   mk/toplibs-tests/test-stats.o: \-  tests/test-stats.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/Test/ListableExpr.o: \+  test/Test/ListableExpr.hs+test/Test.o: \+  test/Test.hs \+  test/Test/ListableExpr.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1780,20 +1724,14 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-stats: \-  tests/test-stats.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  mk/toplibs-tests/Test: \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \+test/Test: \+  test/Test.hs \+  test/Test/ListableExpr.hs \   mk/toplibs-tests/test-utils.o: \-  tests/test-utils.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \-  src/Test/Speculate/Utils/Typeable.hs \+test/utils.o: \+  test/utils.hs \+  test/Test.hs \+  test/Test/ListableExpr.hs \   src/Test/Speculate/Utils/Tuple.hs \   src/Test/Speculate/Utils/Timeout.hs \   src/Test/Speculate/Utils/Tiers.hs \@@ -1822,8 +1760,8 @@   src/Test/Speculate/Engine.hs \   src/Test/Speculate/CondReason.hs \   src/Test/Speculate/Args.hs-tests/test-utils: \-  tests/test-utils.hs \-  tests/Test.hs \-  tests/Test/ListableExpr.hs \+test/utils: \+  test/utils.hs \+  test/Test.hs \+  test/Test/ListableExpr.hs \   mk/toplibs
speculate.cabal view
@@ -1,5 +1,5 @@ name:                speculate-version:             0.4.0+version:             0.4.1 synopsis:            discovery of properties about Haskell functions description:   Speculate automatically discovers laws about Haskell functions.@@ -58,14 +58,14 @@                   , mk/haddock-i                   , mk/haskell.mk                   , stack.yaml-                  , tests/benchmark-                  , tests/benchmark-cmp-                  , tests/benchmark-save-                  , tests/memory-benchmark-                  , tests/model/*.out-                  , tests/test-model-                  , tests/test-sdist-                  , tests/update-test-model+                  , test/benchmark+                  , test/benchmark-cmp+                  , test/benchmark-save+                  , test/memory-benchmark+                  , test/model/*.out+                  , test/diff+                  , test/update-diff+                  , test/sdist  tested-with: GHC==8.6            , GHC==8.4@@ -81,7 +81,7 @@ source-repository this   type:            git   location:        https://github.com/rudymatela/speculate-  tag:             v0.4.0+  tag:             v0.4.1   library@@ -116,67 +116,66 @@                  , Test.Speculate.Utils.Tiers                  , Test.Speculate.Utils.Timeout                  , Test.Speculate.Utils.Tuple-                 , Test.Speculate.Utils.Typeable   build-depends: base >= 4 && < 5                , leancheck >= 0.9.1-               , express >= 0.1.0+               , express >= 0.1.1                , cmdargs                , containers   hs-source-dirs:    src   default-language:  Haskell2010  test-suite creason-  main-is:           test-creason.hs+  main-is:           creason.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite engine-  main-is:           test-engine.hs+  main-is:           engine.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite eval-  main-is:           test-eval.hs+  main-is:           eval.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite expr-  main-is:           test-expr.hs+  main-is:           expr.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite order-  main-is:           test-order.hs+  main-is:           order.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite reason-  main-is:           test-reason.hs+  main-is:           reason.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0  test-suite utils-  main-is:           test-utils.hs+  main-is:           utils.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0@@ -189,9 +188,9 @@   type:              exitcode-stdio-1.0  benchmark test-stats-  main-is:           test-stats.hs+  main-is:           stats.hs   other-modules:     Test, Test.ListableExpr-  hs-source-dirs:    tests+  hs-source-dirs:    test   build-depends:     base >= 4 && < 5, leancheck, express, speculate   default-language:  Haskell2010   type:              exitcode-stdio-1.0
src/Test/Speculate/Args.hs view
@@ -190,7 +190,7 @@        `union` [val True  | showConds || showDot args]        `union` [val False | showConds || showDot args]        `union` (nubSort . catMaybes) [lookupComparison "==" t is | showConds, t <- ts] ]-         \-/ foldr (\/) [] [lookupTiersT is t | autoConstants args, t <- ts]+         \-/ foldr (\/) [] [lookupTiersT is t | autoConstants args, t <- ts, isListableT is t]   where   ts = types args   is = computeInstances args@@ -202,7 +202,7 @@  -- misnomer: these are not all types, but just the star kinded ones... types :: Args -> [TypeRep]-types = nubMergeMap (typesIn . typ) . allConstants+types = typesInList . map typ . allConstants  foregroundConstants, backgroundConstants :: Args -> [Expr] foregroundConstants = fst . partitionByMarkers foreground background . constants
src/Test/Speculate/Engine.hs view
@@ -168,14 +168,15 @@   | not (s === s) = (thy,sssWs)  -- uncomparable type   | rehole (normalizeE thy (mostGeneral s)) `elem` ss = (thy,sss)   | otherwise =-    ( append thy $ equivalencesBetween (===) s s ++ eqs+    ( append thy $ equivalencesBetween (-===-) s s ++ eqs     , if any (\(e1,e2) -> unrepeatedVars e1 && unrepeatedVars e2) eqs         then sss         else sssWs )     where+    e1 -===- e2  =  normalize thy e1 == normalize thy e2 || e1 === e2     ss = uptoT sz sss     sssWs = sss \/ wcons0 sz s-    eqs = concatMap (equivalencesBetween (===) s) $ filter (s ===) ss+    eqs = concatMap (equivalencesBetween (-===-) s) $ filter (s ===) ss     wcons0 :: Int -> a -> [[a]]     wcons0 n s = replicate (n-1) [] ++ [[s]] @@ -294,11 +295,13 @@ subConsequence :: Thy -> [Class Expr] -> Expr -> Expr -> Expr -> Bool subConsequence thy clpres ((Value "==" _ :$ ea) :$ eb) e1 e2   -- NOTE: the first 4 are uneeded, but make it a bit faster...-  | ea `isSubexprOf` e1 && equivalent thy{closureLimit=1} (sub ea eb e1) e2 = True-  | eb `isSubexprOf` e1 && equivalent thy{closureLimit=1} (sub eb ea e1) e2 = True-  | ea `isSubexprOf` e2 && equivalent thy{closureLimit=1} (sub ea eb e2) e1 = True-  | eb `isSubexprOf` e2 && equivalent thy{closureLimit=1} (sub eb ea e2) e1 = True+  | ea `isSubexprOf` e1 && equivalent thy{closureLimit=1} (e1 / (ea,eb)) e2 = True+  | eb `isSubexprOf` e1 && equivalent thy{closureLimit=1} (e1 / (eb,ea)) e2 = True+  | ea `isSubexprOf` e2 && equivalent thy{closureLimit=1} (e2 / (ea,eb)) e1 = True+  | eb `isSubexprOf` e2 && equivalent thy{closureLimit=1} (e2 / (eb,ea)) e1 = True   | equivalent ((ea,eb) `insert` thy){closureLimit=1} e1 e2 = True+  where+  e / (e1,e2)  =  e // [(e1,e2)] subConsequence thy clpres ce e1 e2 = or   [ subConsequence thy clpres ce' e1 e2   | (rce,ces) <- clpres, ce == rce, ce' <- ces ]
src/Test/Speculate/Expr.hs view
@@ -12,7 +12,6 @@   , module Test.Speculate.Expr.Ground   , module Test.Speculate.Expr.Instance   , module Test.Speculate.Expr.Equate-  , module Test.Speculate.Utils.Typeable   ) where @@ -20,4 +19,3 @@ import Test.Speculate.Expr.Ground import Test.Speculate.Expr.Instance import Test.Speculate.Expr.Equate-import Test.Speculate.Utils.Typeable
src/Test/Speculate/Expr/Core.hs view
@@ -9,6 +9,7 @@ -- This module reexports 'Data.Express' along with some extra utilities. module Test.Speculate.Expr.Core   ( module Data.Express+  , module Data.Express.Utils.Typeable    -- * Order   , lexicompare@@ -22,7 +23,6 @@   -- * Assigning   , Binds   , fill-  , sub    -- * Matching   , unify@@ -33,7 +33,7 @@ where  import Data.Express-import Test.Speculate.Utils.Typeable+import Data.Express.Utils.Typeable import Test.Speculate.Utils.List import Data.Monoid ((<>)) import Data.Functor ((<$>)) -- for GHC <= 7.8@@ -85,15 +85,6 @@                         in (e1' :$ e2', es'')   fill' eh (e:es) | isHole eh && typ eh == typ e = (e,es)   fill' e es = (e,es)---- | Substitute matching subexpressios.------ sub (x + y) 0 ((x + y) + z) == (0 + z)--- sub (x + y) 0 (x + (y + z)) == (x + (y + z))------ TODO: remove-sub :: Expr -> Expr -> Expr -> Expr-sub ef et = (// [(ef,et)])  unify :: Expr -> Expr -> Maybe Expr unify e1 e2 = (e1 //-) <$> unification e1 e2
src/Test/Speculate/Reason.hs view
@@ -28,7 +28,6 @@   , criticalPairs   , normalizedCriticalPairs   , append-  , difference    , okThy   , canonicalEqn@@ -273,13 +272,12 @@ append :: Thy -> [Equation] -> Thy append thy eqs = updateEquationsBy (nubSort . (++ eqs')) thy   where-  eqs' = [ canonicalizeEqn thy (e1,e2)-         | (e1,e2) <- eqs, normalize thy e1 /= normalize thy e2 ]--difference :: Thy -> Thy -> Thy-difference thy1@Thy {equations = eqs1, rules = rs1}-           thy2@Thy {equations = eqs2, rules = rs2} =-  thy1 {equations = eqs1 \\ eqs2, rules = rs1 \\ rs2}+  eqs' = [ canonicalizeEqn thy (e1',e2')+         | (e1,e2) <- eqs+         , let e1' = normalize thy e1+         , let e2' = normalize thy e2+         , e1' /= e2'+         ]  complete :: Thy -> Thy complete = iterateUntil (==)
src/Test/Speculate/Report.hs view
@@ -94,13 +94,13 @@ warnMissingInstances is ts = putLines   $  ["Warning: no Listable instance for " ++ show t ++       ", variables of this type will not be considered"-     | t <- ts, not (isListableT is t)]+     | t <- ts, not (isFunTy t), not (isListableT is t)]   ++ ["Warning: no Eq instance for " ++ show t ++       ", equations of this type will not be considered"-     | t <- ts, not (isEqT is t)]+     | t <- ts, not (isFunTy t), not (isEqT is t)]   ++ ["Warning: no Ord instance for " ++ show t ++       ", inequations of this type will not be considered"-     | t <- ts, not (isOrdT is t)]+     | t <- ts, not (isFunTy t), not (isOrdT is t)]  reportClassesFor :: Instances -> Int -> [Int] -> Thy -> [Expr] -> IO () reportClassesFor ti nTests nVarss thy res = do
src/Test/Speculate/Sanity.hs view
@@ -30,7 +30,7 @@ -- returns a list of errors on the Eq instances (if any) -- returns an empty list when ok eqErrors :: Instances -> Int -> TypeRep -> [String]-eqErrors is n t =+eqErrors is n t = takeWhile (const $ isListableT is t) $      ["not reflexive"  | f   (x -==- x)]   ++ ["not symmetric"  | f  ((x -==- y) -==- (y -==- x))]   ++ ["not transitive" | f (((x -==- y) -&&- (y -==- z)) -==>- (x -==- z))]@@ -44,7 +44,7 @@  -- returns a list of errors on the Ord instance (if any) ordErrors :: Instances -> Int -> TypeRep -> [String]-ordErrors is n t =+ordErrors is n t = takeWhile (const $ isListableT is t) $      ["not reflexive"     | f   (x -<=- x)]   ++ ["not antisymmetric" | f (((x -<=- y) -&&- (y -<=- x)) -==>- (x -==- y))]   ++ ["not transitive"    | f (((x -<=- y) -&&- (y -<=- z)) -==>- (x -<=- z))]@@ -60,12 +60,15 @@ eqOrdErrors :: Instances -> Int -> TypeRep -> [String] eqOrdErrors is n t =      [ "(==) :: " ++ ty ++ "  is not an equiavalence (" ++ intercalate ", " es ++ ")"-     | let es = eqErrors is n t, isEqT is t, not (null es) ]+     | listable, eq,  let es = eqErrors  is n t, not (null es) ]   ++ [ "(<=) :: " ++ ty ++ "  is not an ordering ("     ++ intercalate ", " es ++ ")"-     | let es = ordErrors is n t, isOrdT is t, not (null es) ]+     | listable, ord, let es = ordErrors is n t, not (null es) ]   ++ [ "(==) and (<=) :: " ++ ty ++ " are inconsistent: (x == y) /= (x <= y && y <= x)"-     | f $ (x -==- y) -==- (x -<=- y -&&- y -<=- x), isEqT is t, isOrdT is t ]+     | listable, eq, ord, f $ (x -==- y) -==- (x -<=- y -&&- y -<=- x) ]   where+  listable = isListableT is t+  eq       = isEqT       is t+  ord      = isOrdT      is t   f = not . isTrue (take n . grounds (lookupTiers is))   e = holeOfTy is t   x = "x" `varAsTypeOf` e
src/Test/Speculate/Utils.hs view
@@ -18,7 +18,6 @@   , module Test.Speculate.Utils.String   , module Test.Speculate.Utils.List   , module Test.Speculate.Utils.Tiers-  , module Test.Speculate.Utils.Typeable   , module Test.Speculate.Utils.Timeout   , module Test.Speculate.Utils.Ord   , module Test.Speculate.Utils.Memoize@@ -31,7 +30,6 @@ import Test.Speculate.Utils.String import Test.Speculate.Utils.List import Test.Speculate.Utils.Tiers-import Test.Speculate.Utils.Typeable import Test.Speculate.Utils.Timeout import Test.Speculate.Utils.Ord import Test.Speculate.Utils.Memoize
− src/Test/Speculate/Utils/Typeable.hs
@@ -1,28 +0,0 @@--- |--- Module      : Test.Speculate.Utils.Typeable--- Copyright   : (c) 2016-2019 Rudy Matela--- License     : 3-Clause BSD  (see the file LICENSE)--- Maintainer  : Rudy Matela <rudy@matela.com.br>------ This module is part of Speculate.------ Utilities to manipulate 'TypeRep's (of 'Typeable' values).-module Test.Speculate.Utils.Typeable-  ( module Data.Express.Utils.Typeable-  , typesIn-  )-where--import Data.Express.Utils.Typeable-import Test.Speculate.Utils.List ((+++))---- | For a given type, return all *-kinded types.---   (all non-function types)------ > typesIn (typeOf (undefined :: (Int -> Int) -> Int -> Bool))--- >   == [Bool,Int]-typesIn :: TypeRep -> [TypeRep]-typesIn t-  | isFunTy t = typesIn (argumentTy t)-            +++ typesIn (resultTy   t)-  | otherwise = [t]
stack.yaml view
@@ -5,7 +5,7 @@  extra-deps: - leancheck-0.9.1-- express-0.1.0+- express-0.1.1  flags: {} 
+ test/Test.hs view
@@ -0,0 +1,237 @@+-- | This module defines utilities to test 'Speculate' itself.+--+-- It should never be exported in a cabal package, and should not be included+-- in Haddock documentation.  Hence the weird name, simply "Test".+--+-- This module exports a Listable Expr instance, that does not, by any means,+-- list all possible expressions.  But instead, list expressions based on the+-- names exported by this module.+module Test+  (+  -- * Module exports+    module Test.LeanCheck+  , module Test.LeanCheck.Utils+  , module Test.Speculate+  , module Data.Express.Fixtures+  , module Test.ListableExpr++  -- * Test reporting+  , reportTests+  , getMaxTestsFromArgs+  , mainTest+  , printLines++  -- * Test types+  , listThyInefficient++  , Thyght (..)+  , Equation (..)++  -- * Test fixtures+  , foo, goo++  -- * Enumerate expressions+  , expressionsT+  )+where++import Test.LeanCheck+import Test.LeanCheck.Utils hiding (comparison)++import Data.Express.Fixtures++import System.Environment (getArgs)+import System.Exit (exitFailure)+import Data.List (elemIndices)++import Test.Speculate hiding (getArgs)+import Test.Speculate.Reason+import Test.Speculate.Reason.Order++import Data.List (sort)++import Test.Speculate.Utils++import Test.ListableExpr+++-- test reporting --++reportTests :: [Bool] -> IO ()+reportTests tests  =  case elemIndices False tests of+  [] -> putStrLn "+++ Tests passed!"+  is -> putStrLn ("*** Failed tests:" ++ show is) >> exitFailure++getMaxTestsFromArgs :: Int -> IO Int+getMaxTestsFromArgs n = do+  as <- getArgs+  return $ case as of+             (s:_) -> read s+             _     -> n++mainTest :: (Int -> [Bool]) -> Int -> IO ()+mainTest tests n' = do+  n <- getMaxTestsFromArgs n'+  reportTests (tests n)++printLines :: Show a => [a] -> IO ()+printLines = putStrLn . unlines . map show+++-- test fixtures --++foo :: Expr -> Expr+foo = (value "f" (undefined :: Int -> Int) :$)++goo :: Expr -> Expr+goo = (value "g" (undefined :: Int -> Int) :$)+++-- test types --++data Rule = Rule Expr Expr deriving (Show, Eq, Ord)+data Equation = Equation Expr Expr deriving (Show, Eq, Ord)+newtype RuleSet = RuleSet [(Expr,Expr)] deriving Show+newtype EquationSet = EquationSet [(Expr,Expr)] deriving Show+newtype Thyght = Thyght { unThyght :: Thy } deriving Show+++-- Listable instances --++-- beware: enumerating beyond 600 values will  make this very slow as it is+-- very hard to satisfy canonicalEqn and ->-.  In practice, this should not be a+-- problem as we enumerate far less than that when enerating 'Thy's.+instance Listable Rule where+  tiers = (`ofWeight` 0)+        . filterT (\(Rule e1 e2) -> canonicalRule (e1,e2) && e1 ->- e2)+        . mapT (uncurry Rule . orientRule)+        . filterT (uncurry (<))+        . mapT unSameTypeE+        $ tiers+    where+    (->-) = canReduceTo emptyThy+    orientRule (e1,e2) | e1 ->- e2 = (e1,e2)+                       | otherwise = (e2,e1)++instance Listable Equation where+  tiers = (`ofWeight` 0)+        . mapT (uncurry Equation)+        . filterT (canonicalEqn emptyThy)+        . mapT orientEqn+        . filterT (uncurry (<=))+        . mapT unSameTypeE+        $ tiers+    where+    orientEqn (e1,e2) | e1 `compare` e2 == LT = (e2,e1)+                      | otherwise             = (e1,e2)++instance Listable RuleSet where+  tiers = setCons (RuleSet . map unRule) `ofWeight` 0+    where+    unRule (Rule e1 e2) = (e1,e2)++instance Listable EquationSet where+  tiers = setCons (EquationSet . map unEquation) `ofWeight` 0+    where+    unEquation (Equation e1 e2) = (e1,e2)++instance Listable Thy where+  tiers = concatMapT expandCanReduceTo+        $ concatMapT expandClosureLimit+        $ concatMapT expandKeepE+        $ cons2 (\(RuleSet rs) (EquationSet eqs)+                   -> emptyThy { rules     = sort rs+                               , equations = sort eqs })++instance Listable Thyght where+  tiers = mapT Thyght+        $ concatMapT expandCanReduceTo+        $ concatMapT expandClosureLimit+        $ mapT defaultKeep+        $ cons2 (\(RuleSet rs) (EquationSet eqs)+                   -> emptyThy { rules     = sort rs+                               , equations = sort eqs })++expandKeepE :: Thy -> [[Thy]]+expandKeepE thy = cons0 thy+               \/ cons0 thy {keepE = keepUpToLength (maxLen + 0)} `ofWeight` 1+               \/ cons0 thy {keepE = keepUpToLength (maxLen + 1)} `ofWeight` 2+               \/ cons0 thy {keepE = keepUpToLength (maxLen + 2)} `ofWeight` 4+               \/ cons0 thy {keepE = keepUpToLength (maxLen + 3)} `ofWeight` 6+               \/ cons0 thy {keepE = keepUpToLength (maxLen + 4)} `ofWeight` 8+  where+  maxLen = maximum . (0:) . map size . catPairs $ equations thy ++ rules thy++expandClosureLimit :: Thy -> [[Thy]]+expandClosureLimit thy = cons0 thy {closureLimit = 3}+                      \/ cons0 thy {closureLimit = 0} `ofWeight` 1+                      \/ cons0 thy {closureLimit = 2} `ofWeight` 2+                      \/ cons0 thy {closureLimit = 1} `ofWeight` 3++-- TODO: make Listable Thy enumeration complete w.r.t: canReduceTo+-- for a complete version, Listable Rule will have to be transformed on a+-- higher order function that take canReduceTo.  (harder to maintain)+expandCanReduceTo :: Thy -> [[Thy]]+expandCanReduceTo thy = cons0 thy+                     \/ if all (uncurry (|>|)) (rules thy)+                          then cons0 thy {canReduceTo = (|>|)} `ofWeight` 1+                          else []+-- FIXME: KBO is broken ATM:+--                   \/ if all (uncurry ( >|)) (rules thy)+--                        then cons0 thy {canReduceTo = ( >|)} `ofWeight` 2+--                        else []++listThyInefficient :: [Thy]+listThyInefficient = concat+                   . concatMapT expandCanReduceTo+                   . concatMapT expandClosureLimit+                   . concatMapT expandKeepE+                   $ cons2 (\(SameTypedPairsE rs) (SameTypedPairsE eqs)+                              -> emptyThy { rules     = sort rs+                                          , equations = sort eqs+                                          }) `suchThat` okThy++-- Quick and Dirty!+instance Show Thy where+  show Thy { rules = rs+           , equations = eqs+           , canReduceTo = (->-)+           , closureLimit = cl+           , keepE = keep+           }+    = "Thy { rules = "+   ++ drop 14 (indent 14 . listLines $ map showEquation rs)+   ++ "    , equations = "+   ++ drop 18 (indent 18 . listLines $ map showEquation eqs)+   ++ "    , canReduceTo = " ++ showCanReduceTo (->-) ++ "\n"+   ++ "    , closureLimit = " ++ show cl ++ "\n"+   ++ "    , keepE = " ++ showKeepE keep ++ "\n"+   ++ "    }"+    where+    showEquation (e1,e2) = showExpr e1 ++ " == " ++ showExpr e2+    listLines [] = "[]"+    listLines ss = '[':(tail . unlines $ map (", " ++) ss) ++ "]"+    showCanReduceTo (->-) | holds 1000 $ (->-) ==== (|>|) = "(|>|)"+                          | holds 1000 $ (->-) ==== ( >|) =  "(>|)"+                          | holds 1000 $ (->-) ==== (|> ) = "(|>)"+                          | otherwise = "(??)"+    showKeepE keep | holds 1000 $ keep === const True = "const True"+                   | holds 1000 $ keep === keepUpToLength 0 = "keepUpToLength 0"+                   | holds 1000 $ keep === keepUpToLength 1 = "keepUpToLength 1"+                   | holds 1000 $ keep === keepUpToLength 2 = "keepUpToLength 2"+                   | holds 1000 $ keep === keepUpToLength 3 = "keepUpToLength 3"+                   | holds 1000 $ keep === keepUpToLength 4 = "keepUpToLength 4"+                   | holds 1000 $ keep === keepUpToLength 5 = "keepUpToLength 5"+                   | holds 1000 $ keep === keepUpToLength 6 = "keepUpToLength 6"+                   | holds 1000 $ keep === keepUpToLength 7 = "keepUpToLength 7"+                   | holds 1000 $ keep === keepUpToLength 8 = "keepUpToLength 8"+                   | holds 1000 $ keep === keepUpToLength 9 = "keepUpToLength 9"+                   | otherwise = "\\e -> ??"++expressionsT :: [Expr] -> [[Expr]]+expressionsT ds = [ds] \/ productMaybeWith ($$) es es `addWeight` 1+  where+  es = expressionsT ds+-- TODO: maybe use expressionsT as the main function to generate Exprs.+-- By using it, I speculate a 20% increase in runtime.  But the code will+-- certainly be smaller and easier to maintain.
+ test/Test/ListableExpr.hs view
@@ -0,0 +1,272 @@+module Test.ListableExpr+  (+  -- * The Expr type+    Expr++  -- * Expressions of a type+  , IntE (..)+  , BoolE (..)+  , IntsE (..)+  , CharE (..)++  , IntE0 (..)+  , IntEV (..)+  , BoolE0 (..)+  , BoolEV (..)+  , IntsE0 (..)+  , IntsEV (..)+  , CharE0 (..)+  , CharEV (..)++  -- ** Functional values+  , IntToIntE (..)+  , IntToIntToIntE (..)+  , BoolToBoolE (..)+  , BoolToBoolToBoolE (..)++  , SameTypeE (..)+  , unSameTypeE+  , SameTypedPairsE (..)++  -- * Terminal expressions+  , E0 (..)+  , EV (..)++  -- * Ill typed expressions+  , Ill (..)+  )+where++-- TODO: StringE++import Test.LeanCheck+import Test.LeanCheck.Function.ShowFunction+import Data.Express.Fixtures+import Data.Function (on)++-- | Terminal constants.+newtype E0  =  E0 { unE0 :: Expr }++-- | Variables.+newtype EV  =  EV { unEV :: Expr }++-- | Expression of 'Int' type.+newtype IntE  =  IntE { unIntE :: Expr }++-- | Constant terminal value of 'Int' type.+newtype IntE0  =  IntE0 { unIntE0 :: Expr }++-- | Varialbe of 'Int' type.+newtype IntEV  =  IntEV { unIntEV :: Expr }++-- | Functions from Int to Int+newtype IntToIntE  =  IntToIntE { unIntToIntE :: Expr }+newtype IntToIntToIntE  =  IntToIntToIntE { unIntToIntToIntE :: Expr }++-- | Expression of 'Bool' type.+newtype BoolE  =  BoolE { unBoolE :: Expr }++-- | Constant terminal value of 'Bool' type.+newtype BoolE0  =  BoolE0 { unBoolE0 :: Expr }++-- | Varialbe of 'Bool' type.+newtype BoolEV  =  BoolEV { unBoolEV :: Expr }++-- | Functions from Bool to Bool+newtype BoolToBoolE  =  BoolToBoolE { unBoolToBoolE :: Expr }+newtype BoolToBoolToBoolE  =  BoolToBoolToBoolE { unBoolToBoolToBoolE :: Expr }++newtype CharE  =  CharE { unCharE :: Expr }++newtype CharE0  =  CharE0 { unCharE0 :: Expr }++newtype CharEV  =  CharEV { unCharEV :: Expr }++data SameTypeE  =  SameTypeE Expr Expr++unSameTypeE :: SameTypeE -> (Expr,Expr)+unSameTypeE (SameTypeE e1 e2)  =  (e1,e2)++data SameTypedPairsE  =  SameTypedPairsE { unSameTypedPairsE :: [(Expr,Expr)] }++-- | Ill typed expressions.+newtype Ill  =  Ill { unIll :: Expr }+++instance Show E0  where  show (E0 e) = show e+instance Show EV  where  show (EV e) = show e++instance Show IntE  where  show (IntE e) = show e++instance Show IntE0  where  show (IntE0 e) = show e+instance Show IntEV  where  show (IntEV e) = show e++instance Show IntToIntE  where  show (IntToIntE e) = show e+instance Show IntToIntToIntE  where  show (IntToIntToIntE e) = show e++instance Show BoolE  where  show (BoolE e) = show e++instance Show BoolE0  where  show (BoolE0 e) = show e+instance Show BoolEV  where  show (BoolEV e) = show e++instance Show BoolToBoolE  where  show (BoolToBoolE e) = show e+instance Show BoolToBoolToBoolE  where  show (BoolToBoolToBoolE e) = show e++instance Show IntsE  where  show (IntsE e) = show e++instance Show IntsE0  where  show (IntsE0 e) = show e+instance Show IntsEV  where  show (IntsEV e) = show e++instance Show CharE  where  show (CharE e) = show e++instance Show CharE0  where  show (CharE0 e) = show e+instance Show CharEV  where  show (CharEV e) = show e++instance Show SameTypeE  where  show (SameTypeE e1 e2) = show (e1,e2)++instance Show SameTypedPairsE  where  show (SameTypedPairsE ees)  =  show ees++-- | Expression of 'Ints' type.+newtype IntsE  =  IntsE { unIntsE :: Expr }++-- | Constant terminal value of 'Ints' type.+newtype IntsE0  =  IntsE0 { unIntsE0 :: Expr }++-- | Varialbe of 'Ints' type.+newtype IntsEV  =  IntsEV { unIntsEV :: Expr }++instance Show Ill where  show (Ill e) = show e++instance Listable IntE  where+  tiers  =  mapT IntE+         $  cons0 i_+         \/ cons1 unIntEV+         \/ cons1 unIntE0+         \/ cons2 (\(IntToIntE f) (IntE xx) -> f :$ xx)+         \/ cons1 (head' . unIntsE) `ofWeight` 2+         \/ cons1 (ord' . unCharE) `ofWeight` 2++instance Listable IntE0 where+  tiers  =  (IntE0 . val) `mapT` (tiers :: [[Int]])++instance Listable IntEV where+  list  =  map IntEV $ listVars "x" (undefined :: Int)++instance Listable IntToIntE where+  tiers  =  mapT IntToIntE+         $  cons0 idE+         \/ cons0 negateE `addWeight` 1+         \/ cons0 absE    `addWeight` 1+         \/ cons2 (\(IntToIntToIntE ef) (IntE ex) -> ef :$ ex)+         \/ toTiers (listVars "f" (undefined :: Int -> Int)) `addWeight` 2++instance Listable IntToIntToIntE where+  list  =  map IntToIntToIntE [plus, times]++instance Listable IntsE  where+  tiers  =  mapT IntsE+         $  cons0 is_+         \/ cons1 unIntsEV+         \/ cons1 unIntsE0+         \/ cons2 (\(IntE ex) (IntsE exs) -> ex -:- exs)+         \/ cons1 (tail' . unIntsE) `ofWeight` 2+         \/ cons2 (\(IntsE exs) (IntsE eys) -> exs -++- eys) `ofWeight` 2+         \/ cons1 (\(IntsE exs) -> sort' exs) `ofWeight` 3+         \/ cons2 (\(IntE ex) (IntsE exs) -> insert' ex exs) `ofWeight` 3++instance Listable IntsE0 where+  tiers  =  (IntsE0 . val) `mapT` (tiers :: [[ [Int] ]])++instance Listable IntsEV where+  list  =  map IntsEV $ listVars "xs" (undefined :: [Int])++instance Listable BoolE  where+  tiers  =  mapT BoolE+         $  cons0 b_+         \/ cons1 unBoolEV+         \/ cons1 unBoolE0+         \/ cons2 (\(BoolToBoolE ef) (BoolE ep) -> ef :$ ep)+         \/ cons2 ((-==-) `on` unIntE)  `addWeight` 2+         \/ cons2 ((-==-) `on` unBoolE) `addWeight` 2+         \/ cons2 ((-<=-) `on` unIntE)  `addWeight` 3+         \/ cons2 ((-<=-) `on` unBoolE) `addWeight` 3+         \/ cons2 ((-<-)  `on` unIntE)  `addWeight` 4+         \/ cons2 ((-<-)  `on` unBoolE) `addWeight` 4+         \/ cons2 ((-/=-) `on` unIntE)  `addWeight` 5+         \/ cons2 ((-/=-) `on` unBoolE) `addWeight` 5+         \/ cons1 (odd'  . unIntE) `addWeight` 2+         \/ cons1 (even' . unIntE) `addWeight` 2+         \/ cons2 (\(IntE ex) (IntsE exs) -> elem' ex exs) `addWeight` 2++instance Listable BoolE0 where+  tiers  =  (BoolE0 . val) `mapT` (tiers :: [[Bool]])++instance Listable BoolEV where+  list  =  map BoolEV $ listVars "p" (undefined :: Bool)++instance Listable BoolToBoolE where+  tiers  =  mapT BoolToBoolE+         $  cons0 notE+         \/ cons2 (\(BoolToBoolToBoolE ef) (BoolE ex) -> ef :$ ex)++instance Listable BoolToBoolToBoolE where+  list  =  map BoolToBoolToBoolE [orE, andE, implies]++instance Listable CharE where+  tiers  =  mapT CharE $ cons0 c_+                      \/ cons1 unCharEV+                      \/ cons1 unCharE0++instance Listable CharEV where+  list  =  map CharEV $ listVars "c" (undefined :: Char)++instance Listable CharE0 where+  tiers  =  (CharE0 . val) `mapT` (tiers :: [[Char]])++instance Listable SameTypeE where+  tiers = cons1 (\(IntE  e1, IntE  e2) -> SameTypeE e1 e2) `ofWeight` 0+       \/ cons1 (\(BoolE e1, BoolE e2) -> SameTypeE e1 e2) `ofWeight` 1+       \/ cons1 (\(IntsE e1, IntsE e2) -> SameTypeE e1 e2) `ofWeight` 1+       \/ cons1 (\(CharE e1, CharE e2) -> SameTypeE e1 e2) `ofWeight` 2+       \/ cons1 (\(IntToIntE e1, IntToIntE e2)     -> SameTypeE e1 e2) `ofWeight` 2+       \/ cons1 (\(BoolToBoolE e1, BoolToBoolE e2) -> SameTypeE e1 e2) `ofWeight` 2+       \/ cons1 (\(BoolToBoolToBoolE e1, BoolToBoolToBoolE e2) -> SameTypeE e1 e2) `ofWeight` 2+       \/ cons1 (\(IntToIntToIntE e1, IntToIntToIntE e2)       -> SameTypeE e1 e2) `ofWeight` 2++instance Listable SameTypedPairsE where+  tiers = cons1 (SameTypedPairsE . map unSameTypeE) `ofWeight` 0++instance Listable E0 where+  tiers  =  mapT E0+         $  cons1 unIntE0  `ofWeight` 0+         \/ cons1 unBoolE0 `ofWeight` 1+         \/ cons1 unIntsE0 `ofWeight` 1++instance Listable EV where+  tiers  =  mapT EV+         $  cons1 unIntEV  `ofWeight` 0+         \/ cons1 unBoolEV `ofWeight` 1+         \/ cons1 unIntsEV `ofWeight` 1+++instance Listable Expr where+  tiers  =  reset (cons1 unIntE)+         \/ cons1 unBoolE+         \/ cons1 unCharE+         \/ cons1 unIntsE+         \/ cons1 unIntToIntE         `addWeight` 1+         \/ cons1 unIntToIntToIntE    `addWeight` 1+         \/ cons1 unBoolToBoolE       `addWeight` 2+         \/ cons1 unBoolToBoolToBoolE `addWeight` 2+++-- | This listable instance only produces Ill typed expressions+instance Listable Ill where+  tiers  =  mapT Ill+         $  cons2 (\(IntE ef) (IntE ex) -> ef :$ ex) `ofWeight` 0+         \/ cons2 (\(IntToIntE ef) (IntToIntE ex) -> ef :$ ex)+         \/ cons2 (\(Ill ef) ex -> ef :$ ex)+         \/ cons2 (\ef (Ill ex)-> ef :$ ex)+++instance ShowFunction Expr where bindtiers  =  bindtiersShow
+ test/benchmark view
@@ -0,0 +1,74 @@+#!/bin/bash+top=`dirname $0`/..+eg=$top/eg+model=$top/test/model++case "$1" in+	-*) sz="$1"+	    shift+		;;+esac++diff-() {+	$1 $sz | diff -rud $model/$2$sz.out - || exit 1+}++update-diff-() {+	$1 $sz > $model/$2$sz.out+}++tym() {+	/usr/bin/time -f%e "$@"+}++spc() {+	/usr/bin/time -f%M "$@"+}++mean() {+	sum="`echo -n $* | sed -e "s/ / + /g"`"+	mean="`echo "scale = 3; ($sum) / $#" | bc`"+	printf "%3.3f\n" $mean+}+export -f mean++div1024() {+	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"+}+export -f div1024++benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++memory-benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		spc $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean    "$@"' mean |+	       xargs bash -c 'div1024 "$@"' div1024+}++benchmark-cmp-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '+	echo -n ' '+	for run in {1..1}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++find $* | sed -e "s/^bench/     /;s/^eg/  /" |+sort -b | sed -e "s/^     /bench/;s/^  /eg/" |+while read e+do+	`basename $0`- $top/$e `basename $e`+done
+ test/benchmark-cmp view
@@ -0,0 +1,74 @@+#!/bin/bash+top=`dirname $0`/..+eg=$top/eg+model=$top/test/model++case "$1" in+	-*) sz="$1"+	    shift+		;;+esac++diff-() {+	$1 $sz | diff -rud $model/$2$sz.out - || exit 1+}++update-diff-() {+	$1 $sz > $model/$2$sz.out+}++tym() {+	/usr/bin/time -f%e "$@"+}++spc() {+	/usr/bin/time -f%M "$@"+}++mean() {+	sum="`echo -n $* | sed -e "s/ / + /g"`"+	mean="`echo "scale = 3; ($sum) / $#" | bc`"+	printf "%3.3f\n" $mean+}+export -f mean++div1024() {+	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"+}+export -f div1024++benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++memory-benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		spc $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean    "$@"' mean |+	       xargs bash -c 'div1024 "$@"' div1024+}++benchmark-cmp-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '+	echo -n ' '+	for run in {1..1}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++find $* | sed -e "s/^bench/     /;s/^eg/  /" |+sort -b | sed -e "s/^     /bench/;s/^  /eg/" |+while read e+do+	`basename $0`- $top/$e `basename $e`+done
+ test/benchmark-save view
@@ -0,0 +1,23 @@+#!/bin/bash+top=`dirname $0`+get-ghc-v() {+	ghc --version | sed -e "s/.* version/GHC/"+}+get-express-v() {+	ghc-pkg list express 2>/dev/null |+	grep " express-" |+	sed -e "s/^ *//" |+	tail -1+}+get-leancheck-v() {+	ghc-pkg list leancheck 2>/dev/null |+	grep " leancheck-" |+	sed -e "s/^ *//" |+	tail -1+}+(+	get-ghc-v+	get-express-v+	get-leancheck-v+	$top/benchmark "$@"+) | tee bench/runtime-$HOSTNAME
+ test/creason.hs view
@@ -0,0 +1,61 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.CondReason++-- Utils+import Test.Speculate.Reason (canonicalEqn, canonicalizeEqn, emptyThy)+import Test.Speculate.Expr (val)++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True++  , creductions1 (zero -<=- yy) (yy -+- abs' yy) (zero -<=- xx, abs' xx, xx)+    == [yy -+- yy]++  , creductions1 (zero -<=- yy) (abs' yy -+- abs' yy) (zero -<=- xx, abs' xx, xx)+    == [yy -+- abs' yy, abs' yy -+- yy]++  , cnormalize+      emptyChy{cequations = [(zero -<=- xx, abs' xx, xx)]}+      (zero -<=- yy) (abs' yy -+- abs' yy)+    == yy -+- yy++  , not+  $ cequivalent+      emptyChy{cequations = []}+      (zero -<=- yy) (abs' yy -+- yy) (yy -+- yy)++  , cequivalent+      emptyChy{cequations = [(zero -<=- xx, abs' xx, xx)]}+      (zero -<=- yy) (abs' yy -+- yy) (yy -+- yy)++  , holds n $ \e1 e2    -> canonicalCEqn compare (val False,e1,e2) == canonicalEqn emptyThy (e1,e2)+  , holds n $ \e1 e2    -> sndTrd (canonicalizeCEqn compare (val False,e1,e2))+                        == canonicalizeEqn emptyThy (e1,e2)+  , holds n $ \e1 e2 ce -> sndTrd (canonicalizeCEqn compare (val False,e1,e2))+                        == sndTrd (canonicalizeCEqn compare (ce,    e1,e2))++  , const True -- TODO: make the following test pass!+  $ let chy = cinsert ( elem' xx xxs+                      , insert' xx (xxs -++- yys)+                      , insert' xx xxs -++- yys+                      )+                      emptyChy+    in cnormalize chy (elem' xx xxs) (insert' xx (xxs -++- yys)) == insert' xx xxs -++- yys++  , const True -- TODO: make the following test pass!+  $ creductions1 (elem' xx xxs) (insert' xx (xxs -++- yys))+      ( elem' xx xxs, insert' xx (xxs -++- yys), insert' xx xxs -++- yys)+    == [insert' xx xxs -++- yys]++  , const True -- TODO: make the following test pass!+  $ holds n $ \(BoolE ce) (SameTypeE e1 e2) -> creductions1 ce e1 (ce,e1,e2) == [e2]+  ]+  where+  sndTrd (_,y,z) = (y,z)
+ test/diff view
@@ -0,0 +1,74 @@+#!/bin/bash+top=`dirname $0`/..+eg=$top/eg+model=$top/test/model++case "$1" in+	-*) sz="$1"+	    shift+		;;+esac++diff-() {+	$1 $sz | diff -rud $model/$2$sz.out - || exit 1+}++update-diff-() {+	$1 $sz > $model/$2$sz.out+}++tym() {+	/usr/bin/time -f%e "$@"+}++spc() {+	/usr/bin/time -f%M "$@"+}++mean() {+	sum="`echo -n $* | sed -e "s/ / + /g"`"+	mean="`echo "scale = 3; ($sum) / $#" | bc`"+	printf "%3.3f\n" $mean+}+export -f mean++div1024() {+	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"+}+export -f div1024++benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++memory-benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		spc $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean    "$@"' mean |+	       xargs bash -c 'div1024 "$@"' div1024+}++benchmark-cmp-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '+	echo -n ' '+	for run in {1..1}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++find $* | sed -e "s/^bench/     /;s/^eg/  /" |+sort -b | sed -e "s/^     /bench/;s/^  /eg/" |+while read e+do+	`basename $0`- $top/$e `basename $e`+done
+ test/engine.hs view
@@ -0,0 +1,93 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.Engine++-- Helper functions+import Test.Speculate.Reason (emptyThy)+import Test.Speculate.Utils++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True+  +  , holds n $ \e -> mostGeneral  e == head (fastCanonicalVariations e)+  , holds n $ \e -> mostSpecific e == last (fastCanonicalVariations e)+  , holds n $ \e -> allLater (\e1 e0 -> not (e0 `isInstanceOf` e1))+                  $ fastCanonicalVariations e++  , equivalencesBetween (===) (i_ -+- i_) (i_ -+- i_)+    == [ ( xx -+- yy, yy -+- xx ) ]++  , equivalencesBetween (===) (i_ -+- (i_ -+- i_)) ((i_ -+- i_) -+- i_)+    == [ ( xx -+- (yy -+- zz), (xx -+- yy) -+- zz )+       , ( xx -+- (yy -+- zz), (xx -+- zz) -+- yy )+       , ( xx -+- (yy -+- zz), (yy -+- xx) -+- zz )+       , ( xx -+- (yy -+- zz), (yy -+- zz) -+- xx )+       , ( xx -+- (yy -+- zz), (zz -+- xx) -+- yy )+       , ( xx -+- (yy -+- zz), (zz -+- yy) -+- xx ) ]++-- TODO: make the following pass (add ValueE and SameTypeValueE to Test)+--, holds n $ \(SameTypeE e1 e2) (SameTypeE e3 e4)+--         -> subConsequence emptyThy (e1 -==- e2) e3 e4+--         == subConsequence emptyThy (e2 -==- e1) e3 e4+--, holds n $ \(SameTypeE e1 e2) (SameTypeE e3 e4)+--         -> subConsequence emptyThy (e1 -==- e2) e3 e4+--         == subConsequence emptyThy (e1 -==- e2) e4 e3+--, holds n $ \...+--         -> not $ subConsequence emptyThy (e1 -<=- e2) e3 e4+  ,       subConsequence emptyThy [] (xx -==- yy) (xx -+- yy) (xx -+- xx)+  , not $ subConsequence emptyThy [] (xx -<=- yy) (xx -+- yy) (xx -+- xx)+  ,       subConsequence emptyThy [(xx -<=- yy, [xx -==- yy])]+                                     (xx -<=- yy) (xx -+- yy) (xx -+- xx)+  ,       subConsequence emptyThy [] (abs' xx -==- abs' yy) (abs' xx) (abs' yy)+  , not $ subConsequence emptyThy [] (abs' xx -<=- abs' yy) (abs' xx) (abs' yy)+  , not $ subConsequence emptyThy [] (abs' xx -==- one) (xx -+- abs' xx) zero++  , holds n $ \e -> length (expansions preludeInstances 1 e) == 1++  , expansions preludeInstances 2 (i_ -+- i_)+    == [ xx -+- xx+       , xx -+- yy+       , yy -+- xx+       , yy -+- yy ]++  , expansions preludeInstances 2 (i_ -+- i_ -+- ord' c_)+    == [ xx -+- xx -+- ord' cc+       , xx -+- xx -+- ord' dd+       , xx -+- yy -+- ord' cc+       , xx -+- yy -+- ord' dd+       , yy -+- xx -+- ord' cc+       , yy -+- xx -+- ord' dd+       , yy -+- yy -+- ord' cc+       , yy -+- yy -+- ord' dd ]++  , expansionsOfType i_ ["x","y"] (i_ -+- i_ -+- ord' c_)+    == [ xx -+- xx -+- ord' c_+       , xx -+- yy -+- ord' c_+       , yy -+- xx -+- ord' c_+       , yy -+- yy -+- ord' c_ ]++  , expansionsOfType i_ [] (i_ -+- i_ -+- ord' c_) == []++  , expansionsWith [xx, yy]     (i_ -+- i_ -+- ord' c_)+    == [ xx -+- xx -+- ord' c_+       , xx -+- yy -+- ord' c_+       , yy -+- xx -+- ord' c_+       , yy -+- yy -+- ord' c_ ]++  , expansionsWith [cc]         (i_ -+- i_ -+- ord' c_)+    == [ i_ -+- i_ -+- ord' cc ]++  , expansionsWith [xx, yy, cc] (i_ -+- i_ -+- ord' c_)+    == [ xx -+- xx -+- ord' cc+       , xx -+- yy -+- ord' cc+       , yy -+- xx -+- ord' cc+       , yy -+- yy -+- ord' cc ]+  ]+  where+  x === y = equal preludeInstances 1000 x y
+ test/eval.hs view
@@ -0,0 +1,61 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.Expr.Ground+import Test.Speculate.Expr++-- TODO: rename test-eval to test-ground++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True++  ,                                    xx -+- yy === yy -+- xx+  , holds n' $ \(IntE e1) (IntE e2) -> notUndefined e1 && notUndefined e2+                                   ==> e1 -+- e2 === e2 -+- e1+  ,                                    xx -+- yy =/= xx -+- xx+  ,                                      abs' xx === abs' (abs' xx)+  ,                      abs' (xx -+- abs' xx) === (xx -+- abs' xx) -- 2*x or 0+  , holds n' $ \e1 e2 -> typ e1 /= typ e2 ==> e1 =/= e2++  , holds n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2+                         in  notUndefined e1 && notUndefined e2 && isEquation e1e2+                         ==> condEqual preludeInstances 500 e1e2 e1 e2+  , holds n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2+                         in  notUndefined e1 && notUndefined e2 && isEquation e1e2+                         ==> condEqualM preludeInstances 500 0 e1e2 e1 e2+  , fails n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2+                         in  isEquation e1e2+                         ==> condEqualM preludeInstances 500 500 e1e2 e1 e2++  , holds n $ ordOK -:> int+  , holds n $ ordOK -:> ()+  , holds n $ ordOK -:> bool+  , holds n $ ordOK -:> [int]+  ]+  where+  notUndefined e = e === e+  n' = n `div` 50+  x === y = equal preludeInstances 500 x y+  infix 4 ===+  x =/= y = not (x === y)+  infix 4 =/=++(*==*), (*/=*), (*<=*), (*<*) :: (Show a, Typeable a) => a -> a -> Bool+x *==* y = eval undefined $ val x -==- val y+x */=* y = eval undefined $ val x -/=- val y+x *<=* y = eval undefined $ val x -<=- val y+x *<*  y = eval undefined $ val x -<-  val y++eqOK :: (Eq a, Show a, Typeable a) => a -> a -> Bool+eqOK x y =  (x *==* y) == (x == y)+         && (x */=* y) == (x /= y)++ordOK :: (Eq a, Ord a, Show a, Typeable a) => a -> a -> Bool+ordOK x y =  eqOK x y+          && (x *<=* y) == (x <= y)+          && (x *<*  y) == (x <  y)
+ test/expr.hs view
@@ -0,0 +1,71 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.Expr++-- Helper functions+import Data.Functor ((<$>)) -- for GHC < 7.10++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True++  , holds n $ \(SameTypeE e1 e2) -> unify e1 e2 =$ fmap canonicalize $= unify e2 e1++  , unification xx yy == Just [(xx,yy)]+  , (canonicalize <$> unify xx yy) == Just xx+  , unification zero zero == Just []+  , unification zero one  == Nothing+  , unification xx one == Just [(xx,one)]+  , unification (zero -+- xx) (zero -+- one) == Just [(xx,one)]+  , unification (zero -+- xx) (yy -+- one) == Just [(xx,one),(yy,zero)]+  , unify (zero -+- xx) (yy -+- one) == Just (zero -+- one)+  , unification (foo xx) (foo (goo yy)) == Just [(xx,goo yy)]+  , unification (foo xx -+- xx) (yy -+- zero) == Just [(xx,zero),(yy,foo zero)]+  , unify (foo xx -+- xx) (yy -+- zero) == Just (foo zero -+- zero)+  , unification (foo xx) (goo yy) == Nothing+  , unification (foo xx) (foo yy) == unification xx yy+  , (canonicalize <$> unify (negate' (negate' xx) -+- yy) (zz -+- zero))+    == Just (negate' (negate' xx) -+- zero)+  , unification (xx -+- one) (one -+- xx) == Just [(xx,one)]+  , unification (xx -+- xx) (one -+- one) == Just [(xx,one)]+  , unification (zz -+- zz) (xx -+- yy) == Just [(xx,yy),(zz,yy)]+  , unification (xx     -*- (-+-) xx xx)+                (foo zz -*- (-+-) xx yy) == Just [(yy,foo zz),(xx,foo zz)]++  -- The following two tests are adapted from Baader and Snyder:+  -- Example 2.8, Chapter 8, Handbook of Automated Reasoning (page 453).+  , unification (hh5 yy zz (ff2 ii ii) (ff2 jj jj) kk) (hh5 (ff2 xx xx) (ff2 yy yy) jj kk zz)+    == Just [ (ii,xx)+            , (kk,ff2 (ff2 xx xx) (ff2 xx xx))+            , (jj,ff2 xx xx)+            , (zz,ff2 (ff2 xx xx) (ff2 xx xx))+            , (yy,ff2 xx xx)+            ]+  , unification (hh7 yy zz xx' (ff2 ii ii) (ff2 jj jj) (ff2 kk kk) ii')+                (hh7 (ff2 xx xx) (ff2 yy yy) (ff2 zz zz) jj kk ii' xx')+    == Just [ (ii,xx)+            , (ii',ff2 (ff2 (ff2 xx xx) (ff2 xx xx)) (ff2 (ff2 xx xx) (ff2 xx xx)))+            , (kk,ff2 (ff2 xx xx) (ff2 xx xx))+            , (jj,ff2 xx xx)+            , (xx',ff2 (ff2 (ff2 xx xx) (ff2 xx xx)) (ff2 (ff2 xx xx) (ff2 xx xx)))+            , (zz,ff2 (ff2 xx xx) (ff2 xx xx))+            , (yy,ff2 xx xx)+            ]+  ]++ff2 :: Expr -> Expr -> Expr+ff2 e1 e2 = ffE :$ e1 :$ e2+  where ffE = value "f" (undefined :: Int -> Int -> Int)++hh5 :: Expr -> Expr -> Expr -> Expr -> Expr -> Expr+hh5 e1 e2 e3 e4 e5 = hhE :$ e1 :$ e2 :$ e3 :$ e4 :$ e5+  where hhE = value "h" (undefined :: Int -> Int -> Int -> Int -> Int -> Int)++hh7 :: Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr+hh7 e1 e2 e3 e4 e5 e6 e7 = hhE :$ e1 :$ e2 :$ e3 :$ e4 :$ e5 :$ e6 :$ e7+  where hhE = value "h" (undefined :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int)
+ test/memory-benchmark view
@@ -0,0 +1,74 @@+#!/bin/bash+top=`dirname $0`/..+eg=$top/eg+model=$top/test/model++case "$1" in+	-*) sz="$1"+	    shift+		;;+esac++diff-() {+	$1 $sz | diff -rud $model/$2$sz.out - || exit 1+}++update-diff-() {+	$1 $sz > $model/$2$sz.out+}++tym() {+	/usr/bin/time -f%e "$@"+}++spc() {+	/usr/bin/time -f%M "$@"+}++mean() {+	sum="`echo -n $* | sed -e "s/ / + /g"`"+	mean="`echo "scale = 3; ($sum) / $#" | bc`"+	printf "%3.3f\n" $mean+}+export -f mean++div1024() {+	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"+}+export -f div1024++benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++memory-benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		spc $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean    "$@"' mean |+	       xargs bash -c 'div1024 "$@"' div1024+}++benchmark-cmp-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '+	echo -n ' '+	for run in {1..1}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++find $* | sed -e "s/^bench/     /;s/^eg/  /" |+sort -b | sed -e "s/^     /bench/;s/^  /eg/" |+while read e+do+	`basename $0`- $top/$e `basename $e`+done
+ test/model/algebraic-graphs-s4.out view
@@ -0,0 +1,51 @@+max expr size  =    4+max  #-tests   = 1080+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool  (holes: Bool)+_ :: Int  (holes: Int)+_ :: Nat3  (holes: Nat3)+_ :: Graph Nat3  (holes: Graph Nat3)+0 :: Nat3+0 :: Int+True :: Bool+empty :: Graph Nat3+vertex :: Nat3 -> Graph Nat3+(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+edge :: Nat3 -> Nat3 -> Graph Nat3+length :: Graph Nat3 -> Int+size :: Graph Nat3 -> Int++length (vertex i) == length (vertex j)+  size (vertex i) == length (vertex 0)+length (edge i j) == length (edge k i')+length (edge i j) == size (edge k i')+   length (x * y) == length (x + y)+     size (x * y) == size (x + y)+            x + x == x+        x + empty == x+        x * empty == x+        empty * x == x+            x + y == y + x+      overlay x y == x + y+      connect x y == x * y++                0 <= length x+                0 <= size x+         length x <= size x+       size empty <= size x+         length x <= length (x + y)+           size x <= size (x + y)+         length x <= size (y + x)+length (edge i i) <= size x+            empty <= x+                x <= x + y+                x <= x * y+                x <= y * x+         vertex i <= edge i j+         vertex i <= edge j i+            x + y <= x * y+
+ test/model/algebraic-graphs-s7.out view
@@ -0,0 +1,64 @@+max expr size  =    7+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   = 1080+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool  (holes: Bool)+_ :: Int  (holes: Int)+_ :: Nat3  (holes: Nat3)+_ :: Graph Nat3  (holes: Graph Nat3)+0 :: Nat3+0 :: Int+True :: Bool+empty :: Graph Nat3+vertex :: Nat3 -> Graph Nat3+(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+edge :: Nat3 -> Nat3 -> Graph Nat3+length :: Graph Nat3 -> Int+size :: Graph Nat3 -> Int++    length (vertex i) == length (vertex j)+      size (vertex i) == length (vertex 0)+       length (x * y) == length (x + y)+         size (x * y) == size (x + y)+length (x + vertex i) == length (x + vertex j)+  size (x + vertex i) == size (x + vertex j)+   length (x * y + z) == length (x + (y + z))+     size (x * y + z) == size (x + (y + z))+                x + x == x+            x + empty == x+            x * empty == x+            empty * x == x+                x + y == y + x+          overlay x y == x + y+          connect x y == x * y+            x + x * y == x * y+            x + y * x == y * x+             edge i j == vertex i * vertex j+          (x + y) + z == x + (y + z)+          (x * y) * z == x * (y * z)+      x + y * (x * z) == y * (x * z)+      x + y * (z * x) == y * (z * x)+          x * (y + z) == x * y + x * z+          (x + y) * z == x * z + y * z+          x * (x * y) == x * x + x * y+          x * (y * y) == x * y + y * y+    x * (y * (x * z)) == x * (y * x) + x * (y * z)++         0 <= length x+         0 <= size x+  length x <= size x+size empty <= size x+         x <= size (y + z)+  length x <= length (edge i i)+  length x <= length (x + y)+     empty <= x+         x <= x + y+         x <= x * y+         x <= y * x+     x + y <= x * y+
+ test/model/algebraic-graphs.out view
@@ -0,0 +1,58 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   = 1080+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool  (holes: Bool)+_ :: Int  (holes: Int)+_ :: Nat3  (holes: Nat3)+_ :: Graph Nat3  (holes: Graph Nat3)+0 :: Nat3+0 :: Int+True :: Bool+empty :: Graph Nat3+vertex :: Nat3 -> Graph Nat3+(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3+edge :: Nat3 -> Nat3 -> Graph Nat3+length :: Graph Nat3 -> Int+size :: Graph Nat3 -> Int++    length (vertex i) == length (vertex j)+      size (vertex i) == length (vertex 0)+       length (x * y) == length (x + y)+         size (x * y) == size (x + y)+length (x + vertex i) == length (x + vertex j)+  size (x + vertex i) == size (x + vertex j)+                x + x == x+            x + empty == x+            x * empty == x+            empty * x == x+                x + y == y + x+          overlay x y == x + y+          connect x y == x * y+            x + x * y == x * y+            x + y * x == y * x+             edge i j == vertex i * vertex j+          (x + y) + z == x + (y + z)+          (x * y) * z == x * (y * z)+          x * (x * y) == x * (x + y)+          (x + y) * x == y * (x * x)++         0 <= length x+         0 <= size x+  length x <= size x+size empty <= size x+  length x <= length (x + y)+    size x <= size (x + y)+  length x <= size (y + x)+size empty <= length (edge i i)+     empty <= x+         x <= x + y+         x <= x * y+         x <= y * x+     x + y <= x * y+
+ test/model/arith-c-s4.out view
@@ -0,0 +1,183 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++_ :: Int+0 :: Int+1 :: Int+_ + _ :: Int+_ + 1 :: Int+1 + 1 :: Int+_ * _ :: Int+_ + (_ + _) :: Int+_ + (_ + 1) :: Int+_ + (1 + 1) :: Int+_ + _ * _ :: Int+1 + (1 + 1) :: Int+1 + _ * _ :: Int+_ * (_ + _) :: Int+_ * (_ + 1) :: Int+_ * (_ * _) :: Int++x :: Int+0 :: Int+1 :: Int+x + x :: Int+x + 1 :: Int+1 + 1 :: Int+x * x :: Int+x + (x + x) :: Int+x + (x + 1) :: Int+x + (1 + 1) :: Int+x + x * x :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+x * (x + x) :: Int+x * (x * x) :: Int++x :: Int+y :: Int+0 :: Int+1 :: Int+x + x :: Int+x + y :: Int+y + y :: Int+x + 1 :: Int+y + 1 :: Int+1 + 1 :: Int+x * x :: Int+x * y :: Int+y * y :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (y + y) :: Int+y + (y + y) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+y + (y + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+x + x * x :: Int+x + x * y :: Int+x + y * y :: Int+y + x * x :: Int+y + x * y :: Int+y + y * y :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+1 + x * y :: Int+1 + y * y :: Int+x * (x + x) :: Int+x * (x + y) :: Int+x * (y + y) :: Int+y * (x + y) :: Int+y * (y + y) :: Int+x * (x * x) :: Int+x * (x * y) :: Int+x * (y * y) :: Int+y * (y * y) :: Int++x :: Int+y :: Int+z :: Int+0 :: Int+1 :: Int+x + x :: Int+x + y :: Int+x + z :: Int+y + y :: Int+y + z :: Int+z + z :: Int+x + 1 :: Int+y + 1 :: Int+z + 1 :: Int+1 + 1 :: Int+x * x :: Int+x * y :: Int+x * z :: Int+y * y :: Int+y * z :: Int+z * z :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (x + z) :: Int+x + (y + y) :: Int+x + (y + z) :: Int+x + (z + z) :: Int+y + (y + y) :: Int+y + (y + z) :: Int+y + (z + z) :: Int+z + (z + z) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+x + (z + 1) :: Int+y + (y + 1) :: Int+y + (z + 1) :: Int+z + (z + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+z + (1 + 1) :: Int+x + x * x :: Int+x + x * y :: Int+x + x * z :: Int+x + y * y :: Int+x + y * z :: Int+x + z * z :: Int+y + x * x :: Int+y + x * y :: Int+y + x * z :: Int+y + y * y :: Int+y + y * z :: Int+y + z * z :: Int+z + x * x :: Int+z + x * y :: Int+z + x * z :: Int+z + y * y :: Int+z + y * z :: Int+z + z * z :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+1 + x * y :: Int+1 + x * z :: Int+1 + y * y :: Int+1 + y * z :: Int+1 + z * z :: Int+x * (x + x) :: Int+x * (x + y) :: Int+x * (x + z) :: Int+x * (y + y) :: Int+x * (y + z) :: Int+x * (z + z) :: Int+y * (x + y) :: Int+y * (x + z) :: Int+y * (y + y) :: Int+y * (y + z) :: Int+y * (z + z) :: Int+z * (x + y) :: Int+z * (x + z) :: Int+z * (y + z) :: Int+z * (z + z) :: Int+x * (x * x) :: Int+x * (x * y) :: Int+x * (x * z) :: Int+x * (y * y) :: Int+x * (y * z) :: Int+x * (z * z) :: Int+y * (y * y) :: Int+y * (y * z) :: Int+y * (z * z) :: Int+z * (z * z) :: Int++Number of Eq schema classes: 16+Number of Eq 1-var classes: 15+Number of Eq 2-var classes: 41+Number of Eq 3-var classes: 90
+ test/model/arith-c.out view
@@ -0,0 +1,183 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++_ :: Int+0 :: Int+1 :: Int+_ + _ :: Int+_ + 1 :: Int+1 + 1 :: Int+_ * _ :: Int+_ + (_ + _) :: Int+_ + (_ + 1) :: Int+_ + (1 + 1) :: Int+_ + _ * _ :: Int+1 + (1 + 1) :: Int+1 + _ * _ :: Int+_ * (_ + _) :: Int+_ * (_ + 1) :: Int+_ * (_ * _) :: Int++x :: Int+0 :: Int+1 :: Int+x + x :: Int+x + 1 :: Int+1 + 1 :: Int+x * x :: Int+x + (x + x) :: Int+x + (x + 1) :: Int+x + (1 + 1) :: Int+x + x * x :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+x * (x + x) :: Int+x * (x * x) :: Int++x :: Int+y :: Int+0 :: Int+1 :: Int+x + x :: Int+x + y :: Int+y + y :: Int+x + 1 :: Int+y + 1 :: Int+1 + 1 :: Int+x * x :: Int+x * y :: Int+y * y :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (y + y) :: Int+y + (y + y) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+y + (y + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+x + x * x :: Int+x + x * y :: Int+x + y * y :: Int+y + x * x :: Int+y + x * y :: Int+y + y * y :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+1 + x * y :: Int+1 + y * y :: Int+x * (x + x) :: Int+x * (x + y) :: Int+x * (y + y) :: Int+y * (x + y) :: Int+y * (y + y) :: Int+x * (x * x) :: Int+x * (x * y) :: Int+x * (y * y) :: Int+y * (y * y) :: Int++x :: Int+y :: Int+z :: Int+0 :: Int+1 :: Int+x + x :: Int+x + y :: Int+x + z :: Int+y + y :: Int+y + z :: Int+z + z :: Int+x + 1 :: Int+y + 1 :: Int+z + 1 :: Int+1 + 1 :: Int+x * x :: Int+x * y :: Int+x * z :: Int+y * y :: Int+y * z :: Int+z * z :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (x + z) :: Int+x + (y + y) :: Int+x + (y + z) :: Int+x + (z + z) :: Int+y + (y + y) :: Int+y + (y + z) :: Int+y + (z + z) :: Int+z + (z + z) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+x + (z + 1) :: Int+y + (y + 1) :: Int+y + (z + 1) :: Int+z + (z + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+z + (1 + 1) :: Int+x + x * x :: Int+x + x * y :: Int+x + x * z :: Int+x + y * y :: Int+x + y * z :: Int+x + z * z :: Int+y + x * x :: Int+y + x * y :: Int+y + x * z :: Int+y + y * y :: Int+y + y * z :: Int+y + z * z :: Int+z + x * x :: Int+z + x * y :: Int+z + x * z :: Int+z + y * y :: Int+z + y * z :: Int+z + z * z :: Int+1 + (1 + 1) :: Int+1 + x * x :: Int+1 + x * y :: Int+1 + x * z :: Int+1 + y * y :: Int+1 + y * z :: Int+1 + z * z :: Int+x * (x + x) :: Int+x * (x + y) :: Int+x * (x + z) :: Int+x * (y + y) :: Int+x * (y + z) :: Int+x * (z + z) :: Int+y * (x + y) :: Int+y * (x + z) :: Int+y * (y + y) :: Int+y * (y + z) :: Int+y * (z + z) :: Int+z * (x + y) :: Int+z * (x + z) :: Int+z * (y + z) :: Int+z * (z + z) :: Int+x * (x * x) :: Int+x * (x * y) :: Int+x * (x * z) :: Int+x * (y * y) :: Int+x * (y * z) :: Int+x * (z * z) :: Int+y * (y * y) :: Int+y * (y * z) :: Int+y * (z * z) :: Int+z * (z * z) :: Int++Number of Eq schema classes: 16+Number of Eq 1-var classes: 15+Number of Eq 2-var classes: 41+Number of Eq 3-var classes: 90
+ test/model/arith-negate-abs-s4.out view
@@ -0,0 +1,40 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+abs :: Int -> Int+negate :: Int -> Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++             id x == x+negate (negate x) == x+            x + 0 == x+            x * 1 == x+            x * 0 == 0+      abs (abs x) == abs x+   abs (negate x) == abs x+     x + negate x == 0+            x + y == y + x+            x * y == y * x+      abs (x * x) == x * x+     x * negate y == negate (x * y)++             x <= abs x+             0 <= abs x+             x <= x * x+             x <= x + 1+             0 <= x * x+      negate x <= abs x+negate (abs x) <= x+negate (abs x) <= 0+         abs x <= x * x+negate (abs x) <= negate x+
+ test/model/arith-negate-abs.out view
@@ -0,0 +1,68 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+abs :: Int -> Int+negate :: Int -> Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++             id x == x+negate (negate x) == x+            x + 0 == x+            x * 1 == x+            x * 0 == 0+      abs (abs x) == abs x+   abs (negate x) == abs x+     x + negate x == 0+            x + y == y + x+            x * y == y * x+      abs (x * x) == x * x+     x * negate y == negate (x * y)+  abs (x * abs y) == abs (x * y)+     negate x + y == negate (x + negate y)+    abs x * abs y == abs (x * y)+  abs (x + abs x) == x + abs x+    abs x + abs x == abs (x + x)+  abs (1 + abs x) == 1 + abs x+      (x + y) + z == x + (y + z)+      (x * y) * z == x * (y * z)+      (x + x) * y == x * (y + y)+      x * (y + 1) == x + x * y++             x <= abs x+             0 <= abs x+             x <= x * x+             x <= x + 1+             0 <= x * x+      negate x <= abs x+negate (abs x) <= x+negate (abs x) <= 0+             x <= x + abs y+             x <= abs (x + x)+         abs x <= x * x+negate (x * x) <= x+negate (abs x) <= negate x+             x <= 1 + abs x+             0 <= x + abs x+negate (x * x) <= 0+  x + negate 1 <= x+         abs x <= abs (x + x)+negate (x * x) <= negate x+negate (x + 1) <= negate x+         x + y <= x + abs y+     x * abs x <= x * x+negate (x * x) <= negate (abs x)+     x * abs y <= abs (x * y)+  x + negate y <= x + abs y+     x + abs x <= abs (x + x)+negate (x * x) <= x * abs x+   abs (x + 1) <= 1 + abs x+
+ test/model/arith-s4.out view
@@ -0,0 +1,23 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++x + 0 == x+x * 1 == x+x * 0 == 0+x + y == y + x+x * y == y * x++x <= x * x+x <= x + 1+0 <= x * x+
+ test/model/arith.out view
@@ -0,0 +1,27 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+(+) :: Int -> Int -> Int+(*) :: Int -> Int -> Int++      x + 0 == x+      x * 1 == x+      x * 0 == 0+      x + y == y + x+      x * y == y * x+(x + y) + z == x + (y + z)+(x * y) * z == x * (y * z)+(x + x) * y == x * (y + y)+x * (y + 1) == x + x * y++x <= x * x+x <= x + 1+0 <= x * x+
+ test/model/arithficial-s4.out view
@@ -0,0 +1,26 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+f :: Int -> Int -> Int+g :: Int -> Int -> Int+h :: Int -> Int -> Int++ id x == x+x + 0 == x+g x y == g z x'+f x y == f x z+h x y == h z y+x + y == y + x++x <= g y y+x <= f 0 y+x <= h y 0+
+ test/model/arithficial.out view
@@ -0,0 +1,27 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+f :: Int -> Int -> Int+g :: Int -> Int -> Int+h :: Int -> Int -> Int++       id x == x+      x + 0 == x+      g x y == g z x'+      f x y == f x z+      h x y == h z y+      x + y == y + x+(x + y) + z == x + (y + z)++x <= g y y+x <= f 0 y+x <= h y 0+
+ test/model/binarytree-s4.out view
@@ -0,0 +1,41 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Word2+_ :: BT Word2+_ :: [Word2]+Null :: BT Word2+insert :: Word2 -> BT Word2 -> BT Word2+delete :: Word2 -> BT Word2 -> BT Word2+isIn :: Word2 -> BT Word2 -> Bool+(<=) :: Word2 -> Word2 -> Bool+(/=) :: Word2 -> Word2 -> Bool+ordered :: [Word2] -> Bool+strictlyOrdered :: [Word2] -> Bool+toList :: BT Word2 -> [Word2]+fromList :: [Word2] -> BT Word2+isSearch :: BT Word2 -> Bool+[] :: [Word2]+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Word2 -> Word2 -> Bool+(==) :: BT Word2 -> BT Word2 -> Bool+(==) :: [Word2] -> [Word2] -> Bool++  isIn x Null == False+   (xs == []) == (Null == fromList xs)+delete x Null == Null++         Null <= t+            t <= insert x t+   delete x t <= t+insert x Null <= insert x t++isIn x t ==> insert x t == t+
+ test/model/binarytree.out view
@@ -0,0 +1,55 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Word2+_ :: BT Word2+_ :: [Word2]+Null :: BT Word2+insert :: Word2 -> BT Word2 -> BT Word2+delete :: Word2 -> BT Word2 -> BT Word2+isIn :: Word2 -> BT Word2 -> Bool+(<=) :: Word2 -> Word2 -> Bool+(/=) :: Word2 -> Word2 -> Bool+ordered :: [Word2] -> Bool+strictlyOrdered :: [Word2] -> Bool+toList :: BT Word2 -> [Word2]+fromList :: [Word2] -> BT Word2+isSearch :: BT Word2 -> Bool+[] :: [Word2]+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Word2 -> Word2 -> Bool+(==) :: BT Word2 -> BT Word2 -> Bool+(==) :: [Word2] -> [Word2] -> Bool++           isIn x Null == False+   isIn x (insert x t) == True+   isIn x (delete x t) == False+  (Null == insert x t) == False+            (xs == []) == (Null == fromList xs)+     (t == insert x t) == isIn x t+              (x == y) == isIn x (insert y Null)+     (t == delete x t) == (False == isIn x t)+isIn x (insert y Null) == isIn y (insert x Null)+   (False == (x /= y)) == isIn x (insert y Null)+         delete x Null == Null+ insert x (insert x t) == insert x t+ delete x (delete x t) == delete x t+ insert x (delete x t) == insert x t+ delete x (insert x t) == delete x t+ insert x (insert y t) == insert y (insert x t)+ delete x (delete y t) == delete y (delete x t)++         Null <= t+            t <= insert x t+   delete x t <= t+insert x Null <= insert x t++x /= y ==> delete y (insert x t) == insert x (delete y t)+
+ test/model/binarytree0-s4.out view
@@ -0,0 +1,31 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Word2+_ :: BT Word2+Null :: BT Word2+insert :: Word2 -> BT Word2 -> BT Word2+delete :: Word2 -> BT Word2 -> BT Word2+isIn :: Word2 -> BT Word2 -> Bool+(/=) :: Word2 -> Word2 -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Word2 -> Word2 -> Bool+(==) :: BT Word2 -> BT Word2 -> Bool++  isIn x Null == False+delete x Null == Null++         Null <= t+            t <= insert x t+   delete x t <= t+insert x Null <= insert x t++isIn x t ==> insert x t == t+
+ test/model/binarytree0.out view
@@ -0,0 +1,45 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Word2+_ :: BT Word2+Null :: BT Word2+insert :: Word2 -> BT Word2 -> BT Word2+delete :: Word2 -> BT Word2 -> BT Word2+isIn :: Word2 -> BT Word2 -> Bool+(/=) :: Word2 -> Word2 -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Word2 -> Word2 -> Bool+(==) :: BT Word2 -> BT Word2 -> Bool++           isIn x Null == False+   isIn x (insert x t) == True+   isIn x (delete x t) == False+  (Null == insert x t) == False+     (t == insert x t) == isIn x t+              (x == y) == isIn x (insert y Null)+     (t == delete x t) == (False == isIn x t)+isIn x (insert y Null) == isIn y (insert x Null)+   (False == (x /= y)) == isIn x (insert y Null)+         delete x Null == Null+ insert x (insert x t) == insert x t+ delete x (delete x t) == delete x t+ insert x (delete x t) == insert x t+ delete x (insert x t) == delete x t+ insert x (insert y t) == insert y (insert x t)+ delete x (delete y t) == delete y (delete x t)++         Null <= t+            t <= insert x t+   delete x t <= t+insert x Null <= insert x t++x /= y ==> delete y (insert x t) == insert x (delete y t)+
+ test/model/bool-c-s4.out view
@@ -0,0 +1,124 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+False :: Bool+True :: Bool+not :: Bool -> Bool+(&&) :: Bool -> Bool -> Bool+(||) :: Bool -> Bool -> Bool+(==) :: Bool -> Bool -> Bool+++_ :: Bool+False :: Bool+True :: Bool+not _ :: Bool+_ && _ :: Bool+_ || _ :: Bool+_ == _ :: Bool+not (_ && _) :: Bool+not (_ || _) :: Bool+not (_ == _) :: Bool+_ && not _ :: Bool+_ || not _ :: Bool+_ && (_ && _) :: Bool+_ && (_ || _) :: Bool+_ && _ == _ :: Bool+_ || _ && _ :: Bool+_ || (_ || _) :: Bool+_ || _ == _ :: Bool+_ == (_ && _) :: Bool+_ == (_ || _) :: Bool+_ == (_ == _) :: Bool++p :: Bool+False :: Bool+True :: Bool+not p :: Bool++p :: Bool+q :: Bool+False :: Bool+True :: Bool+not p :: Bool+not q :: Bool+p && q :: Bool+p || q :: Bool+p == q :: Bool+not (p && q) :: Bool+not (p || q) :: Bool+not (p == q) :: Bool+p && not q :: Bool+q && not p :: Bool+p || not q :: Bool+q || not p :: Bool++p :: Bool+q :: Bool+r :: Bool+False :: Bool+True :: Bool+not p :: Bool+not q :: Bool+not r :: Bool+p && q :: Bool+p && r :: Bool+q && r :: Bool+p || q :: Bool+p || r :: Bool+q || r :: Bool+p == q :: Bool+p == r :: Bool+q == r :: Bool+not (p && q) :: Bool+not (p && r) :: Bool+not (q && r) :: Bool+not (p || q) :: Bool+not (p || r) :: Bool+not (q || r) :: Bool+not (p == q) :: Bool+not (p == r) :: Bool+not (q == r) :: Bool+p && not q :: Bool+p && not r :: Bool+q && not p :: Bool+q && not r :: Bool+r && not p :: Bool+r && not q :: Bool+p || not q :: Bool+p || not r :: Bool+q || not p :: Bool+q || not r :: Bool+r || not p :: Bool+r || not q :: Bool+p && (q && r) :: Bool+p && (q || r) :: Bool+q && (p || r) :: Bool+r && (p || q) :: Bool+p && q == r :: Bool+q && p == r :: Bool+r && p == q :: Bool+p || q && r :: Bool+q || p && r :: Bool+r || p && q :: Bool+p || (q || r) :: Bool+p || q == r :: Bool+q || p == r :: Bool+r || p == q :: Bool+p == (q && r) :: Bool+q == (p && r) :: Bool+r == (p && q) :: Bool+p == (q || r) :: Bool+q == (p || r) :: Bool+r == (p || q) :: Bool+p == (q == r) :: Bool++Number of Eq schema classes: 21+Number of Eq 1-var classes: 4+Number of Eq 2-var classes: 16+Number of Eq 3-var classes: 59
+ test/model/bool-c.out view
@@ -0,0 +1,124 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+False :: Bool+True :: Bool+not :: Bool -> Bool+(&&) :: Bool -> Bool -> Bool+(||) :: Bool -> Bool -> Bool+(==) :: Bool -> Bool -> Bool+++_ :: Bool+False :: Bool+True :: Bool+not _ :: Bool+_ && _ :: Bool+_ || _ :: Bool+_ == _ :: Bool+not (_ && _) :: Bool+not (_ || _) :: Bool+not (_ == _) :: Bool+_ && not _ :: Bool+_ || not _ :: Bool+_ && (_ && _) :: Bool+_ && (_ || _) :: Bool+_ && _ == _ :: Bool+_ || _ && _ :: Bool+_ || (_ || _) :: Bool+_ || _ == _ :: Bool+_ == (_ && _) :: Bool+_ == (_ || _) :: Bool+_ == (_ == _) :: Bool++p :: Bool+False :: Bool+True :: Bool+not p :: Bool++p :: Bool+q :: Bool+False :: Bool+True :: Bool+not p :: Bool+not q :: Bool+p && q :: Bool+p || q :: Bool+p == q :: Bool+not (p && q) :: Bool+not (p || q) :: Bool+not (p == q) :: Bool+p && not q :: Bool+q && not p :: Bool+p || not q :: Bool+q || not p :: Bool++p :: Bool+q :: Bool+r :: Bool+False :: Bool+True :: Bool+not p :: Bool+not q :: Bool+not r :: Bool+p && q :: Bool+p && r :: Bool+q && r :: Bool+p || q :: Bool+p || r :: Bool+q || r :: Bool+p == q :: Bool+p == r :: Bool+q == r :: Bool+not (p && q) :: Bool+not (p && r) :: Bool+not (q && r) :: Bool+not (p || q) :: Bool+not (p || r) :: Bool+not (q || r) :: Bool+not (p == q) :: Bool+not (p == r) :: Bool+not (q == r) :: Bool+p && not q :: Bool+p && not r :: Bool+q && not p :: Bool+q && not r :: Bool+r && not p :: Bool+r && not q :: Bool+p || not q :: Bool+p || not r :: Bool+q || not p :: Bool+q || not r :: Bool+r || not p :: Bool+r || not q :: Bool+p && (q && r) :: Bool+p && (q || r) :: Bool+q && (p || r) :: Bool+r && (p || q) :: Bool+p && q == r :: Bool+q && p == r :: Bool+r && p == q :: Bool+p || q && r :: Bool+q || p && r :: Bool+r || p && q :: Bool+p || (q || r) :: Bool+p || q == r :: Bool+q || p == r :: Bool+r || p == q :: Bool+p == (q && r) :: Bool+q == (p && r) :: Bool+r == (p && q) :: Bool+p == (q || r) :: Bool+q == (p || r) :: Bool+r == (p || q) :: Bool+p == (q == r) :: Bool++Number of Eq schema classes: 21+Number of Eq 1-var classes: 4+Number of Eq 2-var classes: 16+Number of Eq 3-var classes: 59
+ test/model/bool-s4.out view
@@ -0,0 +1,38 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+False :: Bool+True :: Bool+not :: Bool -> Bool+(&&) :: Bool -> Bool -> Bool+(||) :: Bool -> Bool -> Bool+(==) :: Bool -> Bool -> Bool++    (p && p) == p+    (p || p) == p+ not (not p) == p+ (p && True) == p+(p || False) == p+    (p == p) == True+ (p == True) == p+(p && False) == False+ (p || True) == True+(p && not p) == False+(p || not p) == True+(p == False) == not p+    (p && q) == (q && p)+    (p || q) == (q || p)+(p == not q) == not (p == q)++     p ==> True+ False ==> p+     p ==> p || q+p && q ==> p+p && q ==> p == q++
+ test/model/bool.out view
@@ -0,0 +1,55 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+False :: Bool+True :: Bool+not :: Bool -> Bool+(&&) :: Bool -> Bool -> Bool+(||) :: Bool -> Bool -> Bool+(==) :: Bool -> Bool -> Bool++       (p && p) == p+       (p || p) == p+    not (not p) == p+    (p && True) == p+   (p || False) == p+       (p == p) == True+    (p == True) == p+   (p && False) == False+    (p || True) == True+   (p && not p) == False+   (p == False) == not p+       (p && q) == (q && p)+       (p || q) == (q || p)+(p && (p || q)) == p+  (p || p && q) == p+  (p && p == q) == (p && q)+   (p == not q) == not (p == q)+   not (p || q) == (not p && not q)+   (p || not q) == not (q && not p)+((p && q) && r) == (p && (q && r))+((p || q) || r) == (p || (q || r))+(p == (p && q)) == not (p && not q)+  (p || p == q) == not (q && not p)+(p == (p || q)) == not (q && not p)++           p ==> True+       False ==> p+           p ==> p || q+      p && q ==> p+      p && q ==> p == q+       not p ==> not (p && q)+not (p || q) ==> p == q+not (p == q) ==> p || q+  p && not q ==> q || p+      p == q ==> p || not q+  p && not q ==> not (q && p)+not (p == q) ==> not (p && q)+  p && not q ==> not (p == q)++
+ test/model/colour-s4.out view
@@ -0,0 +1,89 @@+max expr size  =    4+  |- on ineqs  =    2+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Colour+_ :: Integer+_ :: Maybe (Ratio Integer)+_ :: Ratio Integer+(+) :: Colour -> Colour -> Colour+(-) :: Colour -> Colour -> Colour+chroma :: Colour -> Ratio Integer+hue :: Colour -> Maybe (Ratio Integer)+saturation :: Colour -> Ratio Integer+value :: Colour -> Ratio Integer+lightness :: Colour -> Ratio Integer+fromHSV :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour+fromHSL :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour+mix :: Colour -> Colour -> Colour+black :: Colour+white :: Colour+red :: Colour+grey :: Colour+green :: Colour+blue :: Colour+Just :: Ratio Integer -> Maybe (Ratio Integer)+Nothing :: Maybe (Ratio Integer)+0 % 1 :: Ratio Integer+1 % 1 :: Ratio Integer+1 % 2 :: Ratio Integer++Warning: (<=) :: Colour -> Colour -> Bool  is not an ordering (not antisymmetric)+Warning: (==) and (<=) :: Colour -> Colour -> Bool are inconsistent: (x == y) /= (x <= y && y <= x)++                  mix c c == c+                c + black == c+                    c - c == black+                c - black == c+                c + white == white+                black - c == black+                c - white == black+      fromHSV q r (0 % 1) == black+      fromHSL q r (0 % 1) == black+      fromHSL q r (1 % 1) == white+fromHSL q (0 % 1) (1 % 2) == grey+                    c + d == d + c+                  mix c d == mix d c+      fromHSL q (0 % 1) r == fromHSL s (0 % 1) r+      fromHSV q (0 % 1) r == fromHSL s (0 % 1) r+      fromHSV (1 % 1) q r == fromHSV (0 % 1) q r+      fromHSL (1 % 1) q r == fromHSL (0 % 1) q r+fromHSL q (1 % 1) (1 % 2) == fromHSV q (1 % 1) (1 % 1)+        hue (mix c black) == hue c+        hue (mix c white) == hue c+         hue (mix c grey) == hue c+              hue (c + c) == hue (c + grey)+          value (c + red) == 1 % 1+        value (c + green) == 1 % 1+         value (c + blue) == 1 % 1+       chroma (white - c) == chroma c+ saturation (mix c black) == saturation c+        chroma (grey - c) == chroma (c + grey)+     chroma (mix c white) == chroma (mix c black)+      chroma (mix c grey) == chroma (mix c black)+     saturation (c + red) == chroma (c + red)+   saturation (c + green) == chroma (c + green)+    saturation (c + blue) == chroma (c + blue)+          value (c - red) == chroma (c - red)+        value (c - green) == chroma (c - green)+         value (c - blue) == chroma (c - blue)+          value (red - c) == chroma (red - c)+        value (green - c) == chroma (green - c)+         value (blue - c) == chroma (blue - c)++       hue c <= Just (1 % 1)+       0 % 1 <= chroma c+       0 % 1 <= saturation c+       0 % 1 <= value c+       0 % 1 <= lightness c+    chroma c <= 1 % 1+saturation c <= 1 % 1+     value c <= 1 % 1+ lightness c <= 1 % 1+    chroma c <= saturation c+    chroma c <= value c+ lightness c <= value c+
+ test/model/colour.out view
@@ -0,0 +1,89 @@+max expr size  =    4+  |- on ineqs  =    2+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Colour+_ :: Integer+_ :: Maybe (Ratio Integer)+_ :: Ratio Integer+(+) :: Colour -> Colour -> Colour+(-) :: Colour -> Colour -> Colour+chroma :: Colour -> Ratio Integer+hue :: Colour -> Maybe (Ratio Integer)+saturation :: Colour -> Ratio Integer+value :: Colour -> Ratio Integer+lightness :: Colour -> Ratio Integer+fromHSV :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour+fromHSL :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour+mix :: Colour -> Colour -> Colour+black :: Colour+white :: Colour+red :: Colour+grey :: Colour+green :: Colour+blue :: Colour+Just :: Ratio Integer -> Maybe (Ratio Integer)+Nothing :: Maybe (Ratio Integer)+0 % 1 :: Ratio Integer+1 % 1 :: Ratio Integer+1 % 2 :: Ratio Integer++Warning: (<=) :: Colour -> Colour -> Bool  is not an ordering (not antisymmetric)+Warning: (==) and (<=) :: Colour -> Colour -> Bool are inconsistent: (x == y) /= (x <= y && y <= x)++                  mix c c == c+                c + black == c+                    c - c == black+                c - black == c+                c + white == white+                black - c == black+                c - white == black+      fromHSV q r (0 % 1) == black+      fromHSL q r (0 % 1) == black+      fromHSL q r (1 % 1) == white+fromHSL q (0 % 1) (1 % 2) == grey+                    c + d == d + c+                  mix c d == mix d c+      fromHSL q (0 % 1) r == fromHSL s (0 % 1) r+      fromHSV q (0 % 1) r == fromHSL s (0 % 1) r+      fromHSV (1 % 1) q r == fromHSV (0 % 1) q r+      fromHSL (1 % 1) q r == fromHSL (0 % 1) q r+fromHSL q (1 % 1) (1 % 2) == fromHSV q (1 % 1) (1 % 1)+        hue (mix c black) == hue c+        hue (mix c white) == hue c+         hue (mix c grey) == hue c+              hue (c + c) == hue (c + grey)+          value (c + red) == 1 % 1+        value (c + green) == 1 % 1+         value (c + blue) == 1 % 1+       chroma (white - c) == chroma c+ saturation (mix c black) == saturation c+        chroma (grey - c) == chroma (c + grey)+     chroma (mix c white) == chroma (mix c black)+      chroma (mix c grey) == chroma (mix c black)+     saturation (c + red) == chroma (c + red)+   saturation (c + green) == chroma (c + green)+    saturation (c + blue) == chroma (c + blue)+          value (c - red) == chroma (c - red)+        value (c - green) == chroma (c - green)+         value (c - blue) == chroma (c - blue)+          value (red - c) == chroma (red - c)+        value (green - c) == chroma (green - c)+         value (blue - c) == chroma (blue - c)++       hue c <= Just (1 % 1)+       0 % 1 <= chroma c+       0 % 1 <= saturation c+       0 % 1 <= value c+       0 % 1 <= lightness c+    chroma c <= 1 % 1+saturation c <= 1 % 1+     value c <= 1 % 1+ lightness c <= 1 % 1+    chroma c <= saturation c+    chroma c <= value c+ lightness c <= value c+
+ test/model/digraphs-s4.out view
@@ -0,0 +1,41 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Nat+_ :: Digraph Nat+_ :: [Nat]+[] :: [Nat]+elem :: Nat -> [Nat] -> Bool+empty :: Digraph Nat+addNode :: Nat -> Digraph Nat -> Digraph Nat+addEdge :: Nat -> Nat -> Digraph Nat -> Digraph Nat+isNode :: Nat -> Digraph Nat -> Bool+isEdge :: Nat -> Nat -> Digraph Nat -> Bool+isPath :: Nat -> Nat -> Digraph Nat -> Bool+subgraph :: [Nat] -> Digraph Nat -> Digraph Nat+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Nat -> Nat -> Bool+(==) :: Digraph Nat -> Digraph Nat -> Bool+(==) :: [Nat] -> [Nat] -> Bool++   isNode x empty == False+ isEdge x y empty == False+ isPath x y empty == False+     isPath x x a == isNode x a+subgraph xs empty == empty+    subgraph [] a == empty++          empty <= a+              a <= addNode x a+  subgraph xs a <= a+addNode x empty <= addNode x a++isNode x a ==> addNode x a == a+
+ test/model/digraphs.out view
@@ -0,0 +1,59 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Nat+_ :: Digraph Nat+_ :: [Nat]+[] :: [Nat]+elem :: Nat -> [Nat] -> Bool+empty :: Digraph Nat+addNode :: Nat -> Digraph Nat -> Digraph Nat+addEdge :: Nat -> Nat -> Digraph Nat -> Digraph Nat+isNode :: Nat -> Digraph Nat -> Bool+isEdge :: Nat -> Nat -> Digraph Nat -> Bool+isPath :: Nat -> Nat -> Digraph Nat -> Bool+subgraph :: [Nat] -> Digraph Nat -> Digraph Nat+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Nat -> Nat -> Bool+(==) :: Digraph Nat -> Digraph Nat -> Bool+(==) :: [Nat] -> [Nat] -> Bool++             isNode x empty == False+           isEdge x y empty == False+           isPath x y empty == False+     isNode x (addNode x a) == True+     (empty == addNode x a) == False+               isPath x x a == isNode x a+         (a == addNode x a) == isNode x a+                   (x == y) == isNode x (addNode y empty)+ isNode x (addNode y empty) == isNode y (addNode x empty)+          subgraph xs empty == empty+              subgraph [] a == empty+    addNode x (addNode x a) == addNode x a+subgraph xs (subgraph xs a) == subgraph xs a+    addNode x (addNode y a) == addNode y (addNode x a)+subgraph xs (subgraph ys a) == subgraph ys (subgraph xs a)++     isEdge x y a ==> isNode x a+     isEdge x y a ==> isNode y a+     isPath x y a ==> isNode x a+     isPath x y a ==> isNode y a+     isEdge x y a ==> isPath x y a+            empty <=  a+                a <=  addNode x a+    subgraph xs a <=  a+                a <=  addEdge x y a+  addNode x empty <=  addNode x a+      addNode x a <=  addEdge x y a+addEdge x y empty <=  addEdge x y a++isEdge x y a ==>             addEdge x y a == a+   elem x xs ==> subgraph xs (addNode x a) == addNode x (subgraph xs a)+
+ test/model/fun-s4.out view
@@ -0,0 +1,21 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   = 1000+min  #-tests   =   50  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+_ :: Int -> Int+map :: (Int -> Int) -> [Int] -> [Int]+id :: Int -> Int+(.) :: (Int -> Int) -> (Int -> Int) -> Int -> Int++     id x == x+  f (g x) == (f . g) x+map id xs == xs+   f . id == f+   id . f == f++
+ test/model/fun.out view
@@ -0,0 +1,23 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   = 1000+min  #-tests   =   50  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+_ :: Int -> Int+map :: (Int -> Int) -> [Int] -> [Int]+id :: Int -> Int+(.) :: (Int -> Int) -> (Int -> Int) -> Int -> Int++          id x == x+       f (g x) == (f . g) x+     map id xs == xs+map (f . g) xs == map f (map g xs)+        f . id == f+        id . f == f+   (f . g) . h == f . (g . h)++
+ test/model/insertsort-s4.out view
@@ -0,0 +1,41 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+False :: Bool+True :: Bool+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+elem :: Int -> [Int] -> Bool+ordered :: [Int] -> Bool+all :: (Int -> Bool) -> [Int] -> Bool+insert :: Int -> [Int] -> [Int]+sort :: [Int] -> [Int]+(==) :: Int -> Int -> Bool+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+(==) :: Bool -> Bool -> Bool+(==) :: [Int] -> [Int] -> Bool++    ordered (sort xs) == True+ordered (insert x xs) == ordered xs+      (xs == sort xs) == ordered xs+     elem x (sort xs) == elem x xs+      (sort xs == []) == (xs == [])+       sort (sort xs) == sort xs+          insert x [] == [x]+      sort (xs ++ ys) == sort (ys ++ xs)+   sort (insert x xs) == insert x (sort xs)+          sort (x:xs) == insert x (sort xs)++    sort xs <= xs+insert x xs <= x:xs++
+ test/model/insertsort.out view
@@ -0,0 +1,71 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+False :: Bool+True :: Bool+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+elem :: Int -> [Int] -> Bool+ordered :: [Int] -> Bool+all :: (Int -> Bool) -> [Int] -> Bool+insert :: Int -> [Int] -> [Int]+sort :: [Int] -> [Int]+(==) :: Int -> Int -> Bool+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+(==) :: Bool -> Bool -> Bool+(==) :: [Int] -> [Int] -> Bool++      ordered (sort xs) == True+  ordered (insert x xs) == ordered xs+    (xs == insert x xs) == False+    ([] == insert x xs) == False+        (xs == sort xs) == ordered xs+       elem x (sort xs) == elem x xs+        (sort xs == []) == (xs == [])+   all (x ==) (sort xs) == all (x ==) xs+    all (x <) (sort xs) == all (x <) xs+          all (x <=) xs == ordered (x:sort xs)+ordered (xs ++ sort xs) == ordered (xs ++ xs)+ordered (sort xs ++ xs) == ordered (xs ++ xs)+   elem x (insert y xs) == elem x (y:xs)+         sort (sort xs) == sort xs+            insert x [] == [x]+        sort (xs ++ ys) == sort (ys ++ xs)+     sort (insert x xs) == insert x (sort xs)+            sort (x:xs) == insert x (sort xs)+   sort (xs ++ sort ys) == sort (xs ++ ys)+ insert x (insert y xs) == insert y (insert x xs)+        insert x (x:xs) == x:x:xs+           insert x [y] == insert y [x]++  xs == sort ys ==> ordered xs+        sort xs <=  xs+    insert x xs <=  x:xs+      x:sort xs <=  x:xs+  xs ++ sort ys <=  xs ++ ys+  sort xs ++ ys <=  xs ++ ys+    sort (x:xs) <=  insert x xs+sort (xs ++ ys) <=  xs ++ sort ys+sort (xs ++ ys) <=  sort xs ++ ys+  sort xs ++ xs <=  xs ++ sort xs++     all (x <=) xs ==>         insert x xs == x:xs+ordered (ys ++ xs) ==>       ys ++ sort xs == sort (xs ++ ys)+ordered (ys ++ xs) ==>       sort ys ++ xs == sort (xs ++ ys)+     all (x <=) xs ==>           x:sort xs == sort (x:xs)+         elem x xs ==> insert x (xs ++ ys) == insert x xs ++ ys+            x <= y ==>     insert x (y:xs) == x:y:xs+             x < y ==>     insert y (x:xs) == x:insert y xs+ordered (ys ++ xs) ==>  sort ys ++ sort xs == sort (xs ++ ys)+     all (x <=) xs ==>     insert y (x:xs) == insert x (insert y xs)+     all (x <=) ys ==> insert x (xs ++ ys) == insert x xs ++ ys+
+ test/model/insertsort0-s4.out view
@@ -0,0 +1,30 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+insert :: Int -> [Int] -> [Int]+sort :: [Int] -> [Int]+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool+(==) :: [Int] -> [Int] -> Bool++   (sort xs == []) == (xs == [])+           sort [] == []+    sort (sort xs) == sort xs+       insert x [] == [x]+sort (insert x xs) == insert x (sort xs)+       sort (x:xs) == insert x (sort xs)++
+ test/model/insertsort0.out view
@@ -0,0 +1,37 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+insert :: Int -> [Int] -> [Int]+sort :: [Int] -> [Int]+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool+(==) :: [Int] -> [Int] -> Bool++   (xs == insert x xs) == False+   ([] == insert x xs) == False+       (sort xs == []) == (xs == [])+               sort [] == []+        sort (sort xs) == sort xs+           insert x [] == [x]+    sort (insert x xs) == insert x (sort xs)+           sort (x:xs) == insert x (sort xs)+insert x (insert y xs) == insert y (insert x xs)+       insert x (x:xs) == x:x:xs+          insert x [y] == insert y [x]++x <= y ==> insert x (y:xs) == x:y:xs+ x < y ==> insert y (x:xs) == x:insert y xs+
+ test/model/length-s4.out view
@@ -0,0 +1,20 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+0 :: Int+length :: [Int] -> Int++    length (x:xs) == length (y:xs)+length (xs ++ ys) == length (ys ++ xs)++0 <= length xs+
+ test/model/length.out view
@@ -0,0 +1,23 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+0 :: Int+length :: [Int] -> Int++    length (x:xs) == length (y:xs)+length (xs ++ ys) == length (ys ++ xs)++         0 <= length xs+ length xs <= length (x:xs)+ length xs <= length (xs ++ ys)+length [x] <= length (x:xs)+
+ test/model/list-c-s4.out view
@@ -0,0 +1,777 @@+max expr size  =    5+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+head :: [Int] -> Int+tail :: [Int] -> [Int]++_ :: Int+_ :: [Int]+[] :: [Int]+head _ :: Int+head [] :: Int+tail _ :: [Int]+tail [] :: [Int]+head (tail _) :: Int+head (tail []) :: Int+tail (tail _) :: [Int]+tail (tail []) :: [Int]+_:_ :: [Int]+[_] :: [Int]+_ ++ _ :: [Int]+head (tail (tail _)) :: Int+head (tail (tail [])) :: Int+head (_ ++ _) :: Int+tail (tail (tail _)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (_ ++ _) :: [Int]+_:tail _ :: [Int]+_:tail [] :: [Int]+_ ++ tail _ :: [Int]+_ ++ tail [] :: [Int]+[] ++ tail _ :: [Int]+[] ++ tail [] :: [Int]+head _:_ :: [Int]+[head _] :: [Int]+head []:_ :: [Int]+[head []] :: [Int]+tail _ ++ _ :: [Int]+tail _ ++ [] :: [Int]+tail [] ++ _ :: [Int]+tail [] ++ [] :: [Int]+head (tail (tail (tail _))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (_ ++ _)) :: Int+head (_ ++ tail _) :: Int+head (_ ++ tail []) :: Int+head ([] ++ tail _) :: Int+head ([] ++ tail []) :: Int+head (head _:_) :: Int+head [head _] :: Int+head (head []:_) :: Int+head [head []] :: Int+head (tail _ ++ _) :: Int+head (tail _ ++ []) :: Int+head (tail [] ++ _) :: Int+head (tail [] ++ []) :: Int+tail (tail (tail (tail _))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (_ ++ _)) :: [Int]+tail (_:tail _) :: [Int]+tail (_:tail []) :: [Int]+tail (_ ++ tail _) :: [Int]+tail (_ ++ tail []) :: [Int]+tail ([] ++ tail _) :: [Int]+tail ([] ++ tail []) :: [Int]+tail (tail _ ++ _) :: [Int]+tail (tail _ ++ []) :: [Int]+tail (tail [] ++ _) :: [Int]+tail (tail [] ++ []) :: [Int]+_:tail (tail _) :: [Int]+_:tail (tail []) :: [Int]+_:_:_ :: [Int]+[_,_] :: [Int]+_:(_ ++ _) :: [Int]+_ ++ tail (tail _) :: [Int]+_ ++ tail (tail []) :: [Int]+_ ++ (_:_) :: [Int]+_ ++ [_] :: [Int]+_ ++ (_ ++ _) :: [Int]+[] ++ tail (tail _) :: [Int]+[] ++ tail (tail []) :: [Int]+head _:tail _ :: [Int]+head _:tail [] :: [Int]+head []:tail _ :: [Int]+head []:tail [] :: [Int]+tail _ ++ tail _ :: [Int]+tail _ ++ tail [] :: [Int]+tail [] ++ tail _ :: [Int]+tail [] ++ tail [] :: [Int]+head (tail _):_ :: [Int]+[head (tail _)] :: [Int]+head (tail []):_ :: [Int]+[head (tail [])] :: [Int]+tail (tail _) ++ _ :: [Int]+tail (tail _) ++ [] :: [Int]+tail (tail []) ++ _ :: [Int]+tail (tail []) ++ [] :: [Int]++x :: Int+xs :: [Int]+[] :: [Int]+head xs :: Int+head [] :: Int+tail xs :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+[x] :: [Int]+xs ++ xs :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+x:tail xs :: [Int]+x:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail [] :: [Int]+head xs:xs :: [Int]+[head xs] :: [Int]+head []:xs :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail [] ++ xs :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail [] ++ xs) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail [] ++ xs) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail []) :: [Int]+x:x:xs :: [Int]+[x,x] :: [Int]+x:(xs ++ xs) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ [x] :: [Int]+xs ++ (xs ++ xs) :: [Int]+head xs:tail xs :: [Int]+head xs:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+[head (tail xs)] :: [Int]+head (tail []):xs :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail []) ++ xs :: [Int]++x :: Int+y :: Int+xs :: [Int]+ys :: [Int]+[] :: [Int]+head xs :: Int+head ys :: Int+head [] :: Int+tail xs :: [Int]+tail ys :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail ys) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail ys) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+x:ys :: [Int]+y:xs :: [Int]+y:ys :: [Int]+[x] :: [Int]+[y] :: [Int]+xs ++ xs :: [Int]+xs ++ ys :: [Int]+ys ++ xs :: [Int]+ys ++ ys :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail ys)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+head (xs ++ ys) :: Int+head (ys ++ xs) :: Int+head (ys ++ ys) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail ys)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+tail (xs ++ ys) :: [Int]+tail (ys ++ xs) :: [Int]+tail (ys ++ ys) :: [Int]+x:tail xs :: [Int]+x:tail ys :: [Int]+y:tail xs :: [Int]+y:tail ys :: [Int]+x:tail [] :: [Int]+y:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail ys :: [Int]+ys ++ tail xs :: [Int]+ys ++ tail ys :: [Int]+xs ++ tail [] :: [Int]+ys ++ tail [] :: [Int]+head xs:xs :: [Int]+head xs:ys :: [Int]+head ys:xs :: [Int]+head ys:ys :: [Int]+[head xs] :: [Int]+[head ys] :: [Int]+head []:xs :: [Int]+head []:ys :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail xs ++ ys :: [Int]+tail ys ++ xs :: [Int]+tail ys ++ ys :: [Int]+tail [] ++ xs :: [Int]+tail [] ++ ys :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail ys))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (tail (xs ++ ys)) :: Int+head (tail (ys ++ xs)) :: Int+head (tail (ys ++ ys)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail ys) :: Int+head (ys ++ tail xs) :: Int+head (ys ++ tail ys) :: Int+head (xs ++ tail []) :: Int+head (ys ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail xs ++ ys) :: Int+head (tail ys ++ xs) :: Int+head (tail ys ++ ys) :: Int+head (tail [] ++ xs) :: Int+head (tail [] ++ ys) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail ys))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (tail (xs ++ ys)) :: [Int]+tail (tail (ys ++ xs)) :: [Int]+tail (tail (ys ++ ys)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail ys) :: [Int]+tail (ys ++ tail xs) :: [Int]+tail (ys ++ tail ys) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (ys ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail xs ++ ys) :: [Int]+tail (tail ys ++ xs) :: [Int]+tail (tail ys ++ ys) :: [Int]+tail (tail [] ++ xs) :: [Int]+tail (tail [] ++ ys) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail ys) :: [Int]+y:tail (tail xs) :: [Int]+y:tail (tail ys) :: [Int]+x:tail (tail []) :: [Int]+y:tail (tail []) :: [Int]+x:x:xs :: [Int]+x:x:ys :: [Int]+x:y:xs :: [Int]+x:y:ys :: [Int]+y:x:xs :: [Int]+y:x:ys :: [Int]+y:y:xs :: [Int]+y:y:ys :: [Int]+[x,x] :: [Int]+[x,y] :: [Int]+[y,x] :: [Int]+[y,y] :: [Int]+x:(xs ++ xs) :: [Int]+x:(xs ++ ys) :: [Int]+x:(ys ++ xs) :: [Int]+x:(ys ++ ys) :: [Int]+y:(xs ++ xs) :: [Int]+y:(xs ++ ys) :: [Int]+y:(ys ++ xs) :: [Int]+y:(ys ++ ys) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail ys) :: [Int]+ys ++ tail (tail xs) :: [Int]+ys ++ tail (tail ys) :: [Int]+xs ++ tail (tail []) :: [Int]+ys ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ (y:xs) :: [Int]+xs ++ (x:ys) :: [Int]+xs ++ (y:ys) :: [Int]+ys ++ (x:xs) :: [Int]+ys ++ (y:xs) :: [Int]+ys ++ (x:ys) :: [Int]+ys ++ (y:ys) :: [Int]+xs ++ [x] :: [Int]+xs ++ [y] :: [Int]+ys ++ [x] :: [Int]+ys ++ [y] :: [Int]+xs ++ (xs ++ xs) :: [Int]+xs ++ (xs ++ ys) :: [Int]+xs ++ (ys ++ xs) :: [Int]+xs ++ (ys ++ ys) :: [Int]+ys ++ (xs ++ xs) :: [Int]+ys ++ (xs ++ ys) :: [Int]+ys ++ (ys ++ xs) :: [Int]+ys ++ (ys ++ ys) :: [Int]+head xs:tail xs :: [Int]+head xs:tail ys :: [Int]+head ys:tail xs :: [Int]+head ys:tail ys :: [Int]+head xs:tail [] :: [Int]+head ys:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail ys :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail ys :: [Int]+tail ys ++ tail xs :: [Int]+tail ys ++ tail ys :: [Int]+tail xs ++ tail [] :: [Int]+tail ys ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail ys :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+head (tail xs):ys :: [Int]+head (tail ys):xs :: [Int]+head (tail ys):ys :: [Int]+[head (tail xs)] :: [Int]+[head (tail ys)] :: [Int]+head (tail []):xs :: [Int]+head (tail []):ys :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail xs) ++ ys :: [Int]+tail (tail ys) ++ xs :: [Int]+tail (tail ys) ++ ys :: [Int]+tail (tail []) ++ xs :: [Int]+tail (tail []) ++ ys :: [Int]++x :: Int+y :: Int+z :: Int+xs :: [Int]+ys :: [Int]+zs :: [Int]+[] :: [Int]+head xs :: Int+head ys :: Int+head zs :: Int+head [] :: Int+tail xs :: [Int]+tail ys :: [Int]+tail zs :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail ys) :: Int+head (tail zs) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail ys) :: [Int]+tail (tail zs) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+x:ys :: [Int]+x:zs :: [Int]+y:xs :: [Int]+y:ys :: [Int]+y:zs :: [Int]+z:xs :: [Int]+z:ys :: [Int]+z:zs :: [Int]+[x] :: [Int]+[y] :: [Int]+[z] :: [Int]+xs ++ xs :: [Int]+xs ++ ys :: [Int]+xs ++ zs :: [Int]+ys ++ xs :: [Int]+ys ++ ys :: [Int]+ys ++ zs :: [Int]+zs ++ xs :: [Int]+zs ++ ys :: [Int]+zs ++ zs :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail ys)) :: Int+head (tail (tail zs)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+head (xs ++ ys) :: Int+head (xs ++ zs) :: Int+head (ys ++ xs) :: Int+head (ys ++ ys) :: Int+head (ys ++ zs) :: Int+head (zs ++ xs) :: Int+head (zs ++ ys) :: Int+head (zs ++ zs) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail ys)) :: [Int]+tail (tail (tail zs)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+tail (xs ++ ys) :: [Int]+tail (xs ++ zs) :: [Int]+tail (ys ++ xs) :: [Int]+tail (ys ++ ys) :: [Int]+tail (ys ++ zs) :: [Int]+tail (zs ++ xs) :: [Int]+tail (zs ++ ys) :: [Int]+tail (zs ++ zs) :: [Int]+x:tail xs :: [Int]+x:tail ys :: [Int]+x:tail zs :: [Int]+y:tail xs :: [Int]+y:tail ys :: [Int]+y:tail zs :: [Int]+z:tail xs :: [Int]+z:tail ys :: [Int]+z:tail zs :: [Int]+x:tail [] :: [Int]+y:tail [] :: [Int]+z:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail ys :: [Int]+xs ++ tail zs :: [Int]+ys ++ tail xs :: [Int]+ys ++ tail ys :: [Int]+ys ++ tail zs :: [Int]+zs ++ tail xs :: [Int]+zs ++ tail ys :: [Int]+zs ++ tail zs :: [Int]+xs ++ tail [] :: [Int]+ys ++ tail [] :: [Int]+zs ++ tail [] :: [Int]+head xs:xs :: [Int]+head xs:ys :: [Int]+head xs:zs :: [Int]+head ys:xs :: [Int]+head ys:ys :: [Int]+head ys:zs :: [Int]+head zs:xs :: [Int]+head zs:ys :: [Int]+head zs:zs :: [Int]+[head xs] :: [Int]+[head ys] :: [Int]+[head zs] :: [Int]+head []:xs :: [Int]+head []:ys :: [Int]+head []:zs :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail xs ++ ys :: [Int]+tail xs ++ zs :: [Int]+tail ys ++ xs :: [Int]+tail ys ++ ys :: [Int]+tail ys ++ zs :: [Int]+tail zs ++ xs :: [Int]+tail zs ++ ys :: [Int]+tail zs ++ zs :: [Int]+tail [] ++ xs :: [Int]+tail [] ++ ys :: [Int]+tail [] ++ zs :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail ys))) :: Int+head (tail (tail (tail zs))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (tail (xs ++ ys)) :: Int+head (tail (xs ++ zs)) :: Int+head (tail (ys ++ xs)) :: Int+head (tail (ys ++ ys)) :: Int+head (tail (ys ++ zs)) :: Int+head (tail (zs ++ xs)) :: Int+head (tail (zs ++ ys)) :: Int+head (tail (zs ++ zs)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail ys) :: Int+head (xs ++ tail zs) :: Int+head (ys ++ tail xs) :: Int+head (ys ++ tail ys) :: Int+head (ys ++ tail zs) :: Int+head (zs ++ tail xs) :: Int+head (zs ++ tail ys) :: Int+head (zs ++ tail zs) :: Int+head (xs ++ tail []) :: Int+head (ys ++ tail []) :: Int+head (zs ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail xs ++ ys) :: Int+head (tail xs ++ zs) :: Int+head (tail ys ++ xs) :: Int+head (tail ys ++ ys) :: Int+head (tail ys ++ zs) :: Int+head (tail zs ++ xs) :: Int+head (tail zs ++ ys) :: Int+head (tail zs ++ zs) :: Int+head (tail [] ++ xs) :: Int+head (tail [] ++ ys) :: Int+head (tail [] ++ zs) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail ys))) :: [Int]+tail (tail (tail (tail zs))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (tail (xs ++ ys)) :: [Int]+tail (tail (xs ++ zs)) :: [Int]+tail (tail (ys ++ xs)) :: [Int]+tail (tail (ys ++ ys)) :: [Int]+tail (tail (ys ++ zs)) :: [Int]+tail (tail (zs ++ xs)) :: [Int]+tail (tail (zs ++ ys)) :: [Int]+tail (tail (zs ++ zs)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail ys) :: [Int]+tail (xs ++ tail zs) :: [Int]+tail (ys ++ tail xs) :: [Int]+tail (ys ++ tail ys) :: [Int]+tail (ys ++ tail zs) :: [Int]+tail (zs ++ tail xs) :: [Int]+tail (zs ++ tail ys) :: [Int]+tail (zs ++ tail zs) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (ys ++ tail []) :: [Int]+tail (zs ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail xs ++ ys) :: [Int]+tail (tail xs ++ zs) :: [Int]+tail (tail ys ++ xs) :: [Int]+tail (tail ys ++ ys) :: [Int]+tail (tail ys ++ zs) :: [Int]+tail (tail zs ++ xs) :: [Int]+tail (tail zs ++ ys) :: [Int]+tail (tail zs ++ zs) :: [Int]+tail (tail [] ++ xs) :: [Int]+tail (tail [] ++ ys) :: [Int]+tail (tail [] ++ zs) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail ys) :: [Int]+x:tail (tail zs) :: [Int]+y:tail (tail xs) :: [Int]+y:tail (tail ys) :: [Int]+y:tail (tail zs) :: [Int]+z:tail (tail xs) :: [Int]+z:tail (tail ys) :: [Int]+z:tail (tail zs) :: [Int]+x:tail (tail []) :: [Int]+y:tail (tail []) :: [Int]+z:tail (tail []) :: [Int]+x:x:xs :: [Int]+x:x:ys :: [Int]+x:x:zs :: [Int]+x:y:xs :: [Int]+x:y:ys :: [Int]+x:y:zs :: [Int]+x:z:xs :: [Int]+x:z:ys :: [Int]+x:z:zs :: [Int]+y:x:xs :: [Int]+y:x:ys :: [Int]+y:x:zs :: [Int]+y:y:xs :: [Int]+y:y:ys :: [Int]+y:y:zs :: [Int]+y:z:xs :: [Int]+y:z:ys :: [Int]+y:z:zs :: [Int]+z:x:xs :: [Int]+z:x:ys :: [Int]+z:x:zs :: [Int]+z:y:xs :: [Int]+z:y:ys :: [Int]+z:y:zs :: [Int]+z:z:xs :: [Int]+z:z:ys :: [Int]+z:z:zs :: [Int]+[x,x] :: [Int]+[x,y] :: [Int]+[x,z] :: [Int]+[y,x] :: [Int]+[y,y] :: [Int]+[y,z] :: [Int]+[z,x] :: [Int]+[z,y] :: [Int]+[z,z] :: [Int]+x:(xs ++ xs) :: [Int]+x:(xs ++ ys) :: [Int]+x:(xs ++ zs) :: [Int]+x:(ys ++ xs) :: [Int]+x:(ys ++ ys) :: [Int]+x:(ys ++ zs) :: [Int]+x:(zs ++ xs) :: [Int]+x:(zs ++ ys) :: [Int]+x:(zs ++ zs) :: [Int]+y:(xs ++ xs) :: [Int]+y:(xs ++ ys) :: [Int]+y:(xs ++ zs) :: [Int]+y:(ys ++ xs) :: [Int]+y:(ys ++ ys) :: [Int]+y:(ys ++ zs) :: [Int]+y:(zs ++ xs) :: [Int]+y:(zs ++ ys) :: [Int]+y:(zs ++ zs) :: [Int]+z:(xs ++ xs) :: [Int]+z:(xs ++ ys) :: [Int]+z:(xs ++ zs) :: [Int]+z:(ys ++ xs) :: [Int]+z:(ys ++ ys) :: [Int]+z:(ys ++ zs) :: [Int]+z:(zs ++ xs) :: [Int]+z:(zs ++ ys) :: [Int]+z:(zs ++ zs) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail ys) :: [Int]+xs ++ tail (tail zs) :: [Int]+ys ++ tail (tail xs) :: [Int]+ys ++ tail (tail ys) :: [Int]+ys ++ tail (tail zs) :: [Int]+zs ++ tail (tail xs) :: [Int]+zs ++ tail (tail ys) :: [Int]+zs ++ tail (tail zs) :: [Int]+xs ++ tail (tail []) :: [Int]+ys ++ tail (tail []) :: [Int]+zs ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ (y:xs) :: [Int]+xs ++ (z:xs) :: [Int]+xs ++ (x:ys) :: [Int]+xs ++ (y:ys) :: [Int]+xs ++ (z:ys) :: [Int]+xs ++ (x:zs) :: [Int]+xs ++ (y:zs) :: [Int]+xs ++ (z:zs) :: [Int]+ys ++ (x:xs) :: [Int]+ys ++ (y:xs) :: [Int]+ys ++ (z:xs) :: [Int]+ys ++ (x:ys) :: [Int]+ys ++ (y:ys) :: [Int]+ys ++ (z:ys) :: [Int]+ys ++ (x:zs) :: [Int]+ys ++ (y:zs) :: [Int]+ys ++ (z:zs) :: [Int]+zs ++ (x:xs) :: [Int]+zs ++ (y:xs) :: [Int]+zs ++ (z:xs) :: [Int]+zs ++ (x:ys) :: [Int]+zs ++ (y:ys) :: [Int]+zs ++ (z:ys) :: [Int]+zs ++ (x:zs) :: [Int]+zs ++ (y:zs) :: [Int]+zs ++ (z:zs) :: [Int]+xs ++ [x] :: [Int]+xs ++ [y] :: [Int]+xs ++ [z] :: [Int]+ys ++ [x] :: [Int]+ys ++ [y] :: [Int]+ys ++ [z] :: [Int]+zs ++ [x] :: [Int]+zs ++ [y] :: [Int]+zs ++ [z] :: [Int]+xs ++ (xs ++ xs) :: [Int]+xs ++ (xs ++ ys) :: [Int]+xs ++ (xs ++ zs) :: [Int]+xs ++ (ys ++ xs) :: [Int]+xs ++ (ys ++ ys) :: [Int]+xs ++ (ys ++ zs) :: [Int]+xs ++ (zs ++ xs) :: [Int]+xs ++ (zs ++ ys) :: [Int]+xs ++ (zs ++ zs) :: [Int]+ys ++ (xs ++ xs) :: [Int]+ys ++ (xs ++ ys) :: [Int]+ys ++ (xs ++ zs) :: [Int]+ys ++ (ys ++ xs) :: [Int]+ys ++ (ys ++ ys) :: [Int]+ys ++ (ys ++ zs) :: [Int]+ys ++ (zs ++ xs) :: [Int]+ys ++ (zs ++ ys) :: [Int]+ys ++ (zs ++ zs) :: [Int]+zs ++ (xs ++ xs) :: [Int]+zs ++ (xs ++ ys) :: [Int]+zs ++ (xs ++ zs) :: [Int]+zs ++ (ys ++ xs) :: [Int]+zs ++ (ys ++ ys) :: [Int]+zs ++ (ys ++ zs) :: [Int]+zs ++ (zs ++ xs) :: [Int]+zs ++ (zs ++ ys) :: [Int]+zs ++ (zs ++ zs) :: [Int]+head xs:tail xs :: [Int]+head xs:tail ys :: [Int]+head xs:tail zs :: [Int]+head ys:tail xs :: [Int]+head ys:tail ys :: [Int]+head ys:tail zs :: [Int]+head zs:tail xs :: [Int]+head zs:tail ys :: [Int]+head zs:tail zs :: [Int]+head xs:tail [] :: [Int]+head ys:tail [] :: [Int]+head zs:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail ys :: [Int]+head []:tail zs :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail ys :: [Int]+tail xs ++ tail zs :: [Int]+tail ys ++ tail xs :: [Int]+tail ys ++ tail ys :: [Int]+tail ys ++ tail zs :: [Int]+tail zs ++ tail xs :: [Int]+tail zs ++ tail ys :: [Int]+tail zs ++ tail zs :: [Int]+tail xs ++ tail [] :: [Int]+tail ys ++ tail [] :: [Int]+tail zs ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail ys :: [Int]+tail [] ++ tail zs :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+head (tail xs):ys :: [Int]+head (tail xs):zs :: [Int]+head (tail ys):xs :: [Int]+head (tail ys):ys :: [Int]+head (tail ys):zs :: [Int]+head (tail zs):xs :: [Int]+head (tail zs):ys :: [Int]+head (tail zs):zs :: [Int]+[head (tail xs)] :: [Int]+[head (tail ys)] :: [Int]+[head (tail zs)] :: [Int]+head (tail []):xs :: [Int]+head (tail []):ys :: [Int]+head (tail []):zs :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail xs) ++ ys :: [Int]+tail (tail xs) ++ zs :: [Int]+tail (tail ys) ++ xs :: [Int]+tail (tail ys) ++ ys :: [Int]+tail (tail ys) ++ zs :: [Int]+tail (tail zs) ++ xs :: [Int]+tail (tail zs) ++ ys :: [Int]+tail (tail zs) ++ zs :: [Int]+tail (tail []) ++ xs :: [Int]+tail (tail []) ++ ys :: [Int]+tail (tail []) ++ zs :: [Int]++Number of Eq schema classes: 90+Number of Eq 1-var classes: 68+Number of Eq 2-var classes: 191+Number of Eq 3-var classes: 406
+ test/model/list-c.out view
@@ -0,0 +1,777 @@+max expr size  =    5+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+head :: [Int] -> Int+tail :: [Int] -> [Int]++_ :: Int+_ :: [Int]+[] :: [Int]+head _ :: Int+head [] :: Int+tail _ :: [Int]+tail [] :: [Int]+head (tail _) :: Int+head (tail []) :: Int+tail (tail _) :: [Int]+tail (tail []) :: [Int]+_:_ :: [Int]+[_] :: [Int]+_ ++ _ :: [Int]+head (tail (tail _)) :: Int+head (tail (tail [])) :: Int+head (_ ++ _) :: Int+tail (tail (tail _)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (_ ++ _) :: [Int]+_:tail _ :: [Int]+_:tail [] :: [Int]+_ ++ tail _ :: [Int]+_ ++ tail [] :: [Int]+[] ++ tail _ :: [Int]+[] ++ tail [] :: [Int]+head _:_ :: [Int]+[head _] :: [Int]+head []:_ :: [Int]+[head []] :: [Int]+tail _ ++ _ :: [Int]+tail _ ++ [] :: [Int]+tail [] ++ _ :: [Int]+tail [] ++ [] :: [Int]+head (tail (tail (tail _))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (_ ++ _)) :: Int+head (_ ++ tail _) :: Int+head (_ ++ tail []) :: Int+head ([] ++ tail _) :: Int+head ([] ++ tail []) :: Int+head (head _:_) :: Int+head [head _] :: Int+head (head []:_) :: Int+head [head []] :: Int+head (tail _ ++ _) :: Int+head (tail _ ++ []) :: Int+head (tail [] ++ _) :: Int+head (tail [] ++ []) :: Int+tail (tail (tail (tail _))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (_ ++ _)) :: [Int]+tail (_:tail _) :: [Int]+tail (_:tail []) :: [Int]+tail (_ ++ tail _) :: [Int]+tail (_ ++ tail []) :: [Int]+tail ([] ++ tail _) :: [Int]+tail ([] ++ tail []) :: [Int]+tail (tail _ ++ _) :: [Int]+tail (tail _ ++ []) :: [Int]+tail (tail [] ++ _) :: [Int]+tail (tail [] ++ []) :: [Int]+_:tail (tail _) :: [Int]+_:tail (tail []) :: [Int]+_:_:_ :: [Int]+[_,_] :: [Int]+_:(_ ++ _) :: [Int]+_ ++ tail (tail _) :: [Int]+_ ++ tail (tail []) :: [Int]+_ ++ (_:_) :: [Int]+_ ++ [_] :: [Int]+_ ++ (_ ++ _) :: [Int]+[] ++ tail (tail _) :: [Int]+[] ++ tail (tail []) :: [Int]+head _:tail _ :: [Int]+head _:tail [] :: [Int]+head []:tail _ :: [Int]+head []:tail [] :: [Int]+tail _ ++ tail _ :: [Int]+tail _ ++ tail [] :: [Int]+tail [] ++ tail _ :: [Int]+tail [] ++ tail [] :: [Int]+head (tail _):_ :: [Int]+[head (tail _)] :: [Int]+head (tail []):_ :: [Int]+[head (tail [])] :: [Int]+tail (tail _) ++ _ :: [Int]+tail (tail _) ++ [] :: [Int]+tail (tail []) ++ _ :: [Int]+tail (tail []) ++ [] :: [Int]++x :: Int+xs :: [Int]+[] :: [Int]+head xs :: Int+head [] :: Int+tail xs :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+[x] :: [Int]+xs ++ xs :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+x:tail xs :: [Int]+x:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail [] :: [Int]+head xs:xs :: [Int]+[head xs] :: [Int]+head []:xs :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail [] ++ xs :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail [] ++ xs) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail [] ++ xs) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail []) :: [Int]+x:x:xs :: [Int]+[x,x] :: [Int]+x:(xs ++ xs) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ [x] :: [Int]+xs ++ (xs ++ xs) :: [Int]+head xs:tail xs :: [Int]+head xs:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+[head (tail xs)] :: [Int]+head (tail []):xs :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail []) ++ xs :: [Int]++x :: Int+y :: Int+xs :: [Int]+ys :: [Int]+[] :: [Int]+head xs :: Int+head ys :: Int+head [] :: Int+tail xs :: [Int]+tail ys :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail ys) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail ys) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+x:ys :: [Int]+y:xs :: [Int]+y:ys :: [Int]+[x] :: [Int]+[y] :: [Int]+xs ++ xs :: [Int]+xs ++ ys :: [Int]+ys ++ xs :: [Int]+ys ++ ys :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail ys)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+head (xs ++ ys) :: Int+head (ys ++ xs) :: Int+head (ys ++ ys) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail ys)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+tail (xs ++ ys) :: [Int]+tail (ys ++ xs) :: [Int]+tail (ys ++ ys) :: [Int]+x:tail xs :: [Int]+x:tail ys :: [Int]+y:tail xs :: [Int]+y:tail ys :: [Int]+x:tail [] :: [Int]+y:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail ys :: [Int]+ys ++ tail xs :: [Int]+ys ++ tail ys :: [Int]+xs ++ tail [] :: [Int]+ys ++ tail [] :: [Int]+head xs:xs :: [Int]+head xs:ys :: [Int]+head ys:xs :: [Int]+head ys:ys :: [Int]+[head xs] :: [Int]+[head ys] :: [Int]+head []:xs :: [Int]+head []:ys :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail xs ++ ys :: [Int]+tail ys ++ xs :: [Int]+tail ys ++ ys :: [Int]+tail [] ++ xs :: [Int]+tail [] ++ ys :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail ys))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (tail (xs ++ ys)) :: Int+head (tail (ys ++ xs)) :: Int+head (tail (ys ++ ys)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail ys) :: Int+head (ys ++ tail xs) :: Int+head (ys ++ tail ys) :: Int+head (xs ++ tail []) :: Int+head (ys ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail xs ++ ys) :: Int+head (tail ys ++ xs) :: Int+head (tail ys ++ ys) :: Int+head (tail [] ++ xs) :: Int+head (tail [] ++ ys) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail ys))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (tail (xs ++ ys)) :: [Int]+tail (tail (ys ++ xs)) :: [Int]+tail (tail (ys ++ ys)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail ys) :: [Int]+tail (ys ++ tail xs) :: [Int]+tail (ys ++ tail ys) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (ys ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail xs ++ ys) :: [Int]+tail (tail ys ++ xs) :: [Int]+tail (tail ys ++ ys) :: [Int]+tail (tail [] ++ xs) :: [Int]+tail (tail [] ++ ys) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail ys) :: [Int]+y:tail (tail xs) :: [Int]+y:tail (tail ys) :: [Int]+x:tail (tail []) :: [Int]+y:tail (tail []) :: [Int]+x:x:xs :: [Int]+x:x:ys :: [Int]+x:y:xs :: [Int]+x:y:ys :: [Int]+y:x:xs :: [Int]+y:x:ys :: [Int]+y:y:xs :: [Int]+y:y:ys :: [Int]+[x,x] :: [Int]+[x,y] :: [Int]+[y,x] :: [Int]+[y,y] :: [Int]+x:(xs ++ xs) :: [Int]+x:(xs ++ ys) :: [Int]+x:(ys ++ xs) :: [Int]+x:(ys ++ ys) :: [Int]+y:(xs ++ xs) :: [Int]+y:(xs ++ ys) :: [Int]+y:(ys ++ xs) :: [Int]+y:(ys ++ ys) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail ys) :: [Int]+ys ++ tail (tail xs) :: [Int]+ys ++ tail (tail ys) :: [Int]+xs ++ tail (tail []) :: [Int]+ys ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ (y:xs) :: [Int]+xs ++ (x:ys) :: [Int]+xs ++ (y:ys) :: [Int]+ys ++ (x:xs) :: [Int]+ys ++ (y:xs) :: [Int]+ys ++ (x:ys) :: [Int]+ys ++ (y:ys) :: [Int]+xs ++ [x] :: [Int]+xs ++ [y] :: [Int]+ys ++ [x] :: [Int]+ys ++ [y] :: [Int]+xs ++ (xs ++ xs) :: [Int]+xs ++ (xs ++ ys) :: [Int]+xs ++ (ys ++ xs) :: [Int]+xs ++ (ys ++ ys) :: [Int]+ys ++ (xs ++ xs) :: [Int]+ys ++ (xs ++ ys) :: [Int]+ys ++ (ys ++ xs) :: [Int]+ys ++ (ys ++ ys) :: [Int]+head xs:tail xs :: [Int]+head xs:tail ys :: [Int]+head ys:tail xs :: [Int]+head ys:tail ys :: [Int]+head xs:tail [] :: [Int]+head ys:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail ys :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail ys :: [Int]+tail ys ++ tail xs :: [Int]+tail ys ++ tail ys :: [Int]+tail xs ++ tail [] :: [Int]+tail ys ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail ys :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+head (tail xs):ys :: [Int]+head (tail ys):xs :: [Int]+head (tail ys):ys :: [Int]+[head (tail xs)] :: [Int]+[head (tail ys)] :: [Int]+head (tail []):xs :: [Int]+head (tail []):ys :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail xs) ++ ys :: [Int]+tail (tail ys) ++ xs :: [Int]+tail (tail ys) ++ ys :: [Int]+tail (tail []) ++ xs :: [Int]+tail (tail []) ++ ys :: [Int]++x :: Int+y :: Int+z :: Int+xs :: [Int]+ys :: [Int]+zs :: [Int]+[] :: [Int]+head xs :: Int+head ys :: Int+head zs :: Int+head [] :: Int+tail xs :: [Int]+tail ys :: [Int]+tail zs :: [Int]+tail [] :: [Int]+head (tail xs) :: Int+head (tail ys) :: Int+head (tail zs) :: Int+head (tail []) :: Int+tail (tail xs) :: [Int]+tail (tail ys) :: [Int]+tail (tail zs) :: [Int]+tail (tail []) :: [Int]+x:xs :: [Int]+x:ys :: [Int]+x:zs :: [Int]+y:xs :: [Int]+y:ys :: [Int]+y:zs :: [Int]+z:xs :: [Int]+z:ys :: [Int]+z:zs :: [Int]+[x] :: [Int]+[y] :: [Int]+[z] :: [Int]+xs ++ xs :: [Int]+xs ++ ys :: [Int]+xs ++ zs :: [Int]+ys ++ xs :: [Int]+ys ++ ys :: [Int]+ys ++ zs :: [Int]+zs ++ xs :: [Int]+zs ++ ys :: [Int]+zs ++ zs :: [Int]+head (tail (tail xs)) :: Int+head (tail (tail ys)) :: Int+head (tail (tail zs)) :: Int+head (tail (tail [])) :: Int+head (xs ++ xs) :: Int+head (xs ++ ys) :: Int+head (xs ++ zs) :: Int+head (ys ++ xs) :: Int+head (ys ++ ys) :: Int+head (ys ++ zs) :: Int+head (zs ++ xs) :: Int+head (zs ++ ys) :: Int+head (zs ++ zs) :: Int+tail (tail (tail xs)) :: [Int]+tail (tail (tail ys)) :: [Int]+tail (tail (tail zs)) :: [Int]+tail (tail (tail [])) :: [Int]+tail (xs ++ xs) :: [Int]+tail (xs ++ ys) :: [Int]+tail (xs ++ zs) :: [Int]+tail (ys ++ xs) :: [Int]+tail (ys ++ ys) :: [Int]+tail (ys ++ zs) :: [Int]+tail (zs ++ xs) :: [Int]+tail (zs ++ ys) :: [Int]+tail (zs ++ zs) :: [Int]+x:tail xs :: [Int]+x:tail ys :: [Int]+x:tail zs :: [Int]+y:tail xs :: [Int]+y:tail ys :: [Int]+y:tail zs :: [Int]+z:tail xs :: [Int]+z:tail ys :: [Int]+z:tail zs :: [Int]+x:tail [] :: [Int]+y:tail [] :: [Int]+z:tail [] :: [Int]+xs ++ tail xs :: [Int]+xs ++ tail ys :: [Int]+xs ++ tail zs :: [Int]+ys ++ tail xs :: [Int]+ys ++ tail ys :: [Int]+ys ++ tail zs :: [Int]+zs ++ tail xs :: [Int]+zs ++ tail ys :: [Int]+zs ++ tail zs :: [Int]+xs ++ tail [] :: [Int]+ys ++ tail [] :: [Int]+zs ++ tail [] :: [Int]+head xs:xs :: [Int]+head xs:ys :: [Int]+head xs:zs :: [Int]+head ys:xs :: [Int]+head ys:ys :: [Int]+head ys:zs :: [Int]+head zs:xs :: [Int]+head zs:ys :: [Int]+head zs:zs :: [Int]+[head xs] :: [Int]+[head ys] :: [Int]+[head zs] :: [Int]+head []:xs :: [Int]+head []:ys :: [Int]+head []:zs :: [Int]+[head []] :: [Int]+tail xs ++ xs :: [Int]+tail xs ++ ys :: [Int]+tail xs ++ zs :: [Int]+tail ys ++ xs :: [Int]+tail ys ++ ys :: [Int]+tail ys ++ zs :: [Int]+tail zs ++ xs :: [Int]+tail zs ++ ys :: [Int]+tail zs ++ zs :: [Int]+tail [] ++ xs :: [Int]+tail [] ++ ys :: [Int]+tail [] ++ zs :: [Int]+head (tail (tail (tail xs))) :: Int+head (tail (tail (tail ys))) :: Int+head (tail (tail (tail zs))) :: Int+head (tail (tail (tail []))) :: Int+head (tail (xs ++ xs)) :: Int+head (tail (xs ++ ys)) :: Int+head (tail (xs ++ zs)) :: Int+head (tail (ys ++ xs)) :: Int+head (tail (ys ++ ys)) :: Int+head (tail (ys ++ zs)) :: Int+head (tail (zs ++ xs)) :: Int+head (tail (zs ++ ys)) :: Int+head (tail (zs ++ zs)) :: Int+head (xs ++ tail xs) :: Int+head (xs ++ tail ys) :: Int+head (xs ++ tail zs) :: Int+head (ys ++ tail xs) :: Int+head (ys ++ tail ys) :: Int+head (ys ++ tail zs) :: Int+head (zs ++ tail xs) :: Int+head (zs ++ tail ys) :: Int+head (zs ++ tail zs) :: Int+head (xs ++ tail []) :: Int+head (ys ++ tail []) :: Int+head (zs ++ tail []) :: Int+head (tail xs ++ xs) :: Int+head (tail xs ++ ys) :: Int+head (tail xs ++ zs) :: Int+head (tail ys ++ xs) :: Int+head (tail ys ++ ys) :: Int+head (tail ys ++ zs) :: Int+head (tail zs ++ xs) :: Int+head (tail zs ++ ys) :: Int+head (tail zs ++ zs) :: Int+head (tail [] ++ xs) :: Int+head (tail [] ++ ys) :: Int+head (tail [] ++ zs) :: Int+tail (tail (tail (tail xs))) :: [Int]+tail (tail (tail (tail ys))) :: [Int]+tail (tail (tail (tail zs))) :: [Int]+tail (tail (tail (tail []))) :: [Int]+tail (tail (xs ++ xs)) :: [Int]+tail (tail (xs ++ ys)) :: [Int]+tail (tail (xs ++ zs)) :: [Int]+tail (tail (ys ++ xs)) :: [Int]+tail (tail (ys ++ ys)) :: [Int]+tail (tail (ys ++ zs)) :: [Int]+tail (tail (zs ++ xs)) :: [Int]+tail (tail (zs ++ ys)) :: [Int]+tail (tail (zs ++ zs)) :: [Int]+tail (xs ++ tail xs) :: [Int]+tail (xs ++ tail ys) :: [Int]+tail (xs ++ tail zs) :: [Int]+tail (ys ++ tail xs) :: [Int]+tail (ys ++ tail ys) :: [Int]+tail (ys ++ tail zs) :: [Int]+tail (zs ++ tail xs) :: [Int]+tail (zs ++ tail ys) :: [Int]+tail (zs ++ tail zs) :: [Int]+tail (xs ++ tail []) :: [Int]+tail (ys ++ tail []) :: [Int]+tail (zs ++ tail []) :: [Int]+tail (tail xs ++ xs) :: [Int]+tail (tail xs ++ ys) :: [Int]+tail (tail xs ++ zs) :: [Int]+tail (tail ys ++ xs) :: [Int]+tail (tail ys ++ ys) :: [Int]+tail (tail ys ++ zs) :: [Int]+tail (tail zs ++ xs) :: [Int]+tail (tail zs ++ ys) :: [Int]+tail (tail zs ++ zs) :: [Int]+tail (tail [] ++ xs) :: [Int]+tail (tail [] ++ ys) :: [Int]+tail (tail [] ++ zs) :: [Int]+x:tail (tail xs) :: [Int]+x:tail (tail ys) :: [Int]+x:tail (tail zs) :: [Int]+y:tail (tail xs) :: [Int]+y:tail (tail ys) :: [Int]+y:tail (tail zs) :: [Int]+z:tail (tail xs) :: [Int]+z:tail (tail ys) :: [Int]+z:tail (tail zs) :: [Int]+x:tail (tail []) :: [Int]+y:tail (tail []) :: [Int]+z:tail (tail []) :: [Int]+x:x:xs :: [Int]+x:x:ys :: [Int]+x:x:zs :: [Int]+x:y:xs :: [Int]+x:y:ys :: [Int]+x:y:zs :: [Int]+x:z:xs :: [Int]+x:z:ys :: [Int]+x:z:zs :: [Int]+y:x:xs :: [Int]+y:x:ys :: [Int]+y:x:zs :: [Int]+y:y:xs :: [Int]+y:y:ys :: [Int]+y:y:zs :: [Int]+y:z:xs :: [Int]+y:z:ys :: [Int]+y:z:zs :: [Int]+z:x:xs :: [Int]+z:x:ys :: [Int]+z:x:zs :: [Int]+z:y:xs :: [Int]+z:y:ys :: [Int]+z:y:zs :: [Int]+z:z:xs :: [Int]+z:z:ys :: [Int]+z:z:zs :: [Int]+[x,x] :: [Int]+[x,y] :: [Int]+[x,z] :: [Int]+[y,x] :: [Int]+[y,y] :: [Int]+[y,z] :: [Int]+[z,x] :: [Int]+[z,y] :: [Int]+[z,z] :: [Int]+x:(xs ++ xs) :: [Int]+x:(xs ++ ys) :: [Int]+x:(xs ++ zs) :: [Int]+x:(ys ++ xs) :: [Int]+x:(ys ++ ys) :: [Int]+x:(ys ++ zs) :: [Int]+x:(zs ++ xs) :: [Int]+x:(zs ++ ys) :: [Int]+x:(zs ++ zs) :: [Int]+y:(xs ++ xs) :: [Int]+y:(xs ++ ys) :: [Int]+y:(xs ++ zs) :: [Int]+y:(ys ++ xs) :: [Int]+y:(ys ++ ys) :: [Int]+y:(ys ++ zs) :: [Int]+y:(zs ++ xs) :: [Int]+y:(zs ++ ys) :: [Int]+y:(zs ++ zs) :: [Int]+z:(xs ++ xs) :: [Int]+z:(xs ++ ys) :: [Int]+z:(xs ++ zs) :: [Int]+z:(ys ++ xs) :: [Int]+z:(ys ++ ys) :: [Int]+z:(ys ++ zs) :: [Int]+z:(zs ++ xs) :: [Int]+z:(zs ++ ys) :: [Int]+z:(zs ++ zs) :: [Int]+xs ++ tail (tail xs) :: [Int]+xs ++ tail (tail ys) :: [Int]+xs ++ tail (tail zs) :: [Int]+ys ++ tail (tail xs) :: [Int]+ys ++ tail (tail ys) :: [Int]+ys ++ tail (tail zs) :: [Int]+zs ++ tail (tail xs) :: [Int]+zs ++ tail (tail ys) :: [Int]+zs ++ tail (tail zs) :: [Int]+xs ++ tail (tail []) :: [Int]+ys ++ tail (tail []) :: [Int]+zs ++ tail (tail []) :: [Int]+xs ++ (x:xs) :: [Int]+xs ++ (y:xs) :: [Int]+xs ++ (z:xs) :: [Int]+xs ++ (x:ys) :: [Int]+xs ++ (y:ys) :: [Int]+xs ++ (z:ys) :: [Int]+xs ++ (x:zs) :: [Int]+xs ++ (y:zs) :: [Int]+xs ++ (z:zs) :: [Int]+ys ++ (x:xs) :: [Int]+ys ++ (y:xs) :: [Int]+ys ++ (z:xs) :: [Int]+ys ++ (x:ys) :: [Int]+ys ++ (y:ys) :: [Int]+ys ++ (z:ys) :: [Int]+ys ++ (x:zs) :: [Int]+ys ++ (y:zs) :: [Int]+ys ++ (z:zs) :: [Int]+zs ++ (x:xs) :: [Int]+zs ++ (y:xs) :: [Int]+zs ++ (z:xs) :: [Int]+zs ++ (x:ys) :: [Int]+zs ++ (y:ys) :: [Int]+zs ++ (z:ys) :: [Int]+zs ++ (x:zs) :: [Int]+zs ++ (y:zs) :: [Int]+zs ++ (z:zs) :: [Int]+xs ++ [x] :: [Int]+xs ++ [y] :: [Int]+xs ++ [z] :: [Int]+ys ++ [x] :: [Int]+ys ++ [y] :: [Int]+ys ++ [z] :: [Int]+zs ++ [x] :: [Int]+zs ++ [y] :: [Int]+zs ++ [z] :: [Int]+xs ++ (xs ++ xs) :: [Int]+xs ++ (xs ++ ys) :: [Int]+xs ++ (xs ++ zs) :: [Int]+xs ++ (ys ++ xs) :: [Int]+xs ++ (ys ++ ys) :: [Int]+xs ++ (ys ++ zs) :: [Int]+xs ++ (zs ++ xs) :: [Int]+xs ++ (zs ++ ys) :: [Int]+xs ++ (zs ++ zs) :: [Int]+ys ++ (xs ++ xs) :: [Int]+ys ++ (xs ++ ys) :: [Int]+ys ++ (xs ++ zs) :: [Int]+ys ++ (ys ++ xs) :: [Int]+ys ++ (ys ++ ys) :: [Int]+ys ++ (ys ++ zs) :: [Int]+ys ++ (zs ++ xs) :: [Int]+ys ++ (zs ++ ys) :: [Int]+ys ++ (zs ++ zs) :: [Int]+zs ++ (xs ++ xs) :: [Int]+zs ++ (xs ++ ys) :: [Int]+zs ++ (xs ++ zs) :: [Int]+zs ++ (ys ++ xs) :: [Int]+zs ++ (ys ++ ys) :: [Int]+zs ++ (ys ++ zs) :: [Int]+zs ++ (zs ++ xs) :: [Int]+zs ++ (zs ++ ys) :: [Int]+zs ++ (zs ++ zs) :: [Int]+head xs:tail xs :: [Int]+head xs:tail ys :: [Int]+head xs:tail zs :: [Int]+head ys:tail xs :: [Int]+head ys:tail ys :: [Int]+head ys:tail zs :: [Int]+head zs:tail xs :: [Int]+head zs:tail ys :: [Int]+head zs:tail zs :: [Int]+head xs:tail [] :: [Int]+head ys:tail [] :: [Int]+head zs:tail [] :: [Int]+head []:tail xs :: [Int]+head []:tail ys :: [Int]+head []:tail zs :: [Int]+head []:tail [] :: [Int]+tail xs ++ tail xs :: [Int]+tail xs ++ tail ys :: [Int]+tail xs ++ tail zs :: [Int]+tail ys ++ tail xs :: [Int]+tail ys ++ tail ys :: [Int]+tail ys ++ tail zs :: [Int]+tail zs ++ tail xs :: [Int]+tail zs ++ tail ys :: [Int]+tail zs ++ tail zs :: [Int]+tail xs ++ tail [] :: [Int]+tail ys ++ tail [] :: [Int]+tail zs ++ tail [] :: [Int]+tail [] ++ tail xs :: [Int]+tail [] ++ tail ys :: [Int]+tail [] ++ tail zs :: [Int]+tail [] ++ tail [] :: [Int]+head (tail xs):xs :: [Int]+head (tail xs):ys :: [Int]+head (tail xs):zs :: [Int]+head (tail ys):xs :: [Int]+head (tail ys):ys :: [Int]+head (tail ys):zs :: [Int]+head (tail zs):xs :: [Int]+head (tail zs):ys :: [Int]+head (tail zs):zs :: [Int]+[head (tail xs)] :: [Int]+[head (tail ys)] :: [Int]+[head (tail zs)] :: [Int]+head (tail []):xs :: [Int]+head (tail []):ys :: [Int]+head (tail []):zs :: [Int]+[head (tail [])] :: [Int]+tail (tail xs) ++ xs :: [Int]+tail (tail xs) ++ ys :: [Int]+tail (tail xs) ++ zs :: [Int]+tail (tail ys) ++ xs :: [Int]+tail (tail ys) ++ ys :: [Int]+tail (tail ys) ++ zs :: [Int]+tail (tail zs) ++ xs :: [Int]+tail (tail zs) ++ ys :: [Int]+tail (tail zs) ++ zs :: [Int]+tail (tail []) ++ xs :: [Int]+tail (tail []) ++ ys :: [Int]+tail (tail []) ++ zs :: [Int]++Number of Eq schema classes: 90+Number of Eq 1-var classes: 68+Number of Eq 2-var classes: 191+Number of Eq 3-var classes: 406
+ test/model/list-s4.out view
@@ -0,0 +1,26 @@+max expr size  =    4+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+head :: [Int] -> Int+tail :: [Int] -> [Int]++head (x:xs) == x+   xs ++ [] == xs+   [] ++ xs == xs+tail (x:xs) == xs++ [] <= xs+ xs <= x:xs+ xs <= xs ++ ys+ xs <= ys ++ xs+ xs <= tail (xs ++ xs)+[x] <= x:xs+
+ test/model/list.out view
@@ -0,0 +1,37 @@+max expr size  =    5+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+[] :: [Int]+(:) :: Int -> [Int] -> [Int]+(++) :: [Int] -> [Int] -> [Int]+head :: [Int] -> Int+tail :: [Int] -> [Int]++     head (x:xs) == x+        xs ++ [] == xs+        [] ++ xs == xs+     tail (x:xs) == xs+(xs ++ ys) ++ zs == xs ++ (ys ++ zs)+    (x:xs) ++ ys == x:(xs ++ ys)++       [] <= xs+       xs <= x:xs+       xs <= xs ++ ys+       xs <= ys ++ xs+       xs <= tail (xs ++ xs)+      [x] <= x:xs+       xs <= head xs:tail xs+     x:xs <= x:y:xs+ xs ++ ys <= xs ++ (ys ++ zs)+ xs ++ ys <= xs ++ (zs ++ ys)+     x:xs <= x:(xs ++ ys)+     x:xs <= x:(ys ++ xs)+ xs ++ ys <= xs ++ (x:ys)+    [x,y] <= x:y:xs+xs ++ [x] <= xs ++ (x:ys)+
+ test/model/minus-c-s4.out view
@@ -0,0 +1,232 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+negate :: Int -> Int+(-) :: Int -> Int -> Int++_ :: Int+0 :: Int+1 :: Int+negate _ :: Int+negate 1 :: Int+_ + _ :: Int+_ + 1 :: Int+1 + 1 :: Int+_ - _ :: Int+_ - 1 :: Int+1 - _ :: Int+negate (_ + _) :: Int+negate (_ + 1) :: Int+negate (1 + 1) :: Int+_ + (_ + _) :: Int+_ + (_ + 1) :: Int+_ + (1 + 1) :: Int+_ + (_ - _) :: Int+_ + (_ - 1) :: Int+_ + (1 - _) :: Int+1 + (1 + 1) :: Int+1 + (1 - _) :: Int+_ - (_ + _) :: Int+_ - (_ + 1) :: Int+_ - (1 + 1) :: Int+1 - (_ + _) :: Int++x :: Int+0 :: Int+1 :: Int+negate x :: Int+negate 1 :: Int+x + x :: Int+x + 1 :: Int+1 + 1 :: Int+x - 1 :: Int+1 - x :: Int+negate (x + x) :: Int+negate (x + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + 1) :: Int+x + (1 + 1) :: Int+x + (x - 1) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+x - (1 + 1) :: Int+1 - (x + x) :: Int++x :: Int+y :: Int+0 :: Int+1 :: Int+negate x :: Int+negate y :: Int+negate 1 :: Int+x + x :: Int+x + y :: Int+y + y :: Int+x + 1 :: Int+y + 1 :: Int+1 + 1 :: Int+x - y :: Int+y - x :: Int+x - 1 :: Int+y - 1 :: Int+1 - x :: Int+1 - y :: Int+negate (x + x) :: Int+negate (x + y) :: Int+negate (y + y) :: Int+negate (x + 1) :: Int+negate (y + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (y + y) :: Int+y + (y + y) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+y + (y + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+x + (x - y) :: Int+y + (y - x) :: Int+x + (x - 1) :: Int+x + (y - 1) :: Int+y + (y - 1) :: Int+x + (1 - y) :: Int+y + (1 - x) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+1 + (1 - y) :: Int+x - (y + y) :: Int+y - (x + x) :: Int+x - (y + 1) :: Int+y - (x + 1) :: Int+x - (1 + 1) :: Int+y - (1 + 1) :: Int+1 - (x + x) :: Int+1 - (x + y) :: Int+1 - (y + y) :: Int++x :: Int+y :: Int+z :: Int+0 :: Int+1 :: Int+negate x :: Int+negate y :: Int+negate z :: Int+negate 1 :: Int+x + x :: Int+x + y :: Int+x + z :: Int+y + y :: Int+y + z :: Int+z + z :: Int+x + 1 :: Int+y + 1 :: Int+z + 1 :: Int+1 + 1 :: Int+x - y :: Int+x - z :: Int+y - x :: Int+y - z :: Int+z - x :: Int+z - y :: Int+x - 1 :: Int+y - 1 :: Int+z - 1 :: Int+1 - x :: Int+1 - y :: Int+1 - z :: Int+negate (x + x) :: Int+negate (x + y) :: Int+negate (x + z) :: Int+negate (y + y) :: Int+negate (y + z) :: Int+negate (z + z) :: Int+negate (x + 1) :: Int+negate (y + 1) :: Int+negate (z + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (x + z) :: Int+x + (y + y) :: Int+x + (y + z) :: Int+x + (z + z) :: Int+y + (y + y) :: Int+y + (y + z) :: Int+y + (z + z) :: Int+z + (z + z) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+x + (z + 1) :: Int+y + (y + 1) :: Int+y + (z + 1) :: Int+z + (z + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+z + (1 + 1) :: Int+x + (x - y) :: Int+x + (x - z) :: Int+x + (y - z) :: Int+x + (z - y) :: Int+y + (y - x) :: Int+y + (y - z) :: Int+y + (z - x) :: Int+z + (z - x) :: Int+z + (z - y) :: Int+x + (x - 1) :: Int+x + (y - 1) :: Int+x + (z - 1) :: Int+y + (y - 1) :: Int+y + (z - 1) :: Int+z + (z - 1) :: Int+x + (1 - y) :: Int+x + (1 - z) :: Int+y + (1 - x) :: Int+y + (1 - z) :: Int+z + (1 - x) :: Int+z + (1 - y) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+1 + (1 - y) :: Int+1 + (1 - z) :: Int+x - (y + y) :: Int+x - (y + z) :: Int+x - (z + z) :: Int+y - (x + x) :: Int+y - (x + z) :: Int+y - (z + z) :: Int+z - (x + x) :: Int+z - (x + y) :: Int+z - (y + y) :: Int+x - (y + 1) :: Int+x - (z + 1) :: Int+y - (x + 1) :: Int+y - (z + 1) :: Int+z - (x + 1) :: Int+z - (y + 1) :: Int+x - (1 + 1) :: Int+y - (1 + 1) :: Int+z - (1 + 1) :: Int+1 - (x + x) :: Int+1 - (x + y) :: Int+1 - (x + z) :: Int+1 - (y + y) :: Int+1 - (y + z) :: Int+1 - (z + z) :: Int++Number of Eq schema classes: 26+Number of Eq 1-var classes: 21+Number of Eq 2-var classes: 53+Number of Eq 3-var classes: 109
+ test/model/minus-c.out view
@@ -0,0 +1,232 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+negate :: Int -> Int+(-) :: Int -> Int -> Int++_ :: Int+0 :: Int+1 :: Int+negate _ :: Int+negate 1 :: Int+_ + _ :: Int+_ + 1 :: Int+1 + 1 :: Int+_ - _ :: Int+_ - 1 :: Int+1 - _ :: Int+negate (_ + _) :: Int+negate (_ + 1) :: Int+negate (1 + 1) :: Int+_ + (_ + _) :: Int+_ + (_ + 1) :: Int+_ + (1 + 1) :: Int+_ + (_ - _) :: Int+_ + (_ - 1) :: Int+_ + (1 - _) :: Int+1 + (1 + 1) :: Int+1 + (1 - _) :: Int+_ - (_ + _) :: Int+_ - (_ + 1) :: Int+_ - (1 + 1) :: Int+1 - (_ + _) :: Int++x :: Int+0 :: Int+1 :: Int+negate x :: Int+negate 1 :: Int+x + x :: Int+x + 1 :: Int+1 + 1 :: Int+x - 1 :: Int+1 - x :: Int+negate (x + x) :: Int+negate (x + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + 1) :: Int+x + (1 + 1) :: Int+x + (x - 1) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+x - (1 + 1) :: Int+1 - (x + x) :: Int++x :: Int+y :: Int+0 :: Int+1 :: Int+negate x :: Int+negate y :: Int+negate 1 :: Int+x + x :: Int+x + y :: Int+y + y :: Int+x + 1 :: Int+y + 1 :: Int+1 + 1 :: Int+x - y :: Int+y - x :: Int+x - 1 :: Int+y - 1 :: Int+1 - x :: Int+1 - y :: Int+negate (x + x) :: Int+negate (x + y) :: Int+negate (y + y) :: Int+negate (x + 1) :: Int+negate (y + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (y + y) :: Int+y + (y + y) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+y + (y + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+x + (x - y) :: Int+y + (y - x) :: Int+x + (x - 1) :: Int+x + (y - 1) :: Int+y + (y - 1) :: Int+x + (1 - y) :: Int+y + (1 - x) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+1 + (1 - y) :: Int+x - (y + y) :: Int+y - (x + x) :: Int+x - (y + 1) :: Int+y - (x + 1) :: Int+x - (1 + 1) :: Int+y - (1 + 1) :: Int+1 - (x + x) :: Int+1 - (x + y) :: Int+1 - (y + y) :: Int++x :: Int+y :: Int+z :: Int+0 :: Int+1 :: Int+negate x :: Int+negate y :: Int+negate z :: Int+negate 1 :: Int+x + x :: Int+x + y :: Int+x + z :: Int+y + y :: Int+y + z :: Int+z + z :: Int+x + 1 :: Int+y + 1 :: Int+z + 1 :: Int+1 + 1 :: Int+x - y :: Int+x - z :: Int+y - x :: Int+y - z :: Int+z - x :: Int+z - y :: Int+x - 1 :: Int+y - 1 :: Int+z - 1 :: Int+1 - x :: Int+1 - y :: Int+1 - z :: Int+negate (x + x) :: Int+negate (x + y) :: Int+negate (x + z) :: Int+negate (y + y) :: Int+negate (y + z) :: Int+negate (z + z) :: Int+negate (x + 1) :: Int+negate (y + 1) :: Int+negate (z + 1) :: Int+negate (1 + 1) :: Int+x + (x + x) :: Int+x + (x + y) :: Int+x + (x + z) :: Int+x + (y + y) :: Int+x + (y + z) :: Int+x + (z + z) :: Int+y + (y + y) :: Int+y + (y + z) :: Int+y + (z + z) :: Int+z + (z + z) :: Int+x + (x + 1) :: Int+x + (y + 1) :: Int+x + (z + 1) :: Int+y + (y + 1) :: Int+y + (z + 1) :: Int+z + (z + 1) :: Int+x + (1 + 1) :: Int+y + (1 + 1) :: Int+z + (1 + 1) :: Int+x + (x - y) :: Int+x + (x - z) :: Int+x + (y - z) :: Int+x + (z - y) :: Int+y + (y - x) :: Int+y + (y - z) :: Int+y + (z - x) :: Int+z + (z - x) :: Int+z + (z - y) :: Int+x + (x - 1) :: Int+x + (y - 1) :: Int+x + (z - 1) :: Int+y + (y - 1) :: Int+y + (z - 1) :: Int+z + (z - 1) :: Int+x + (1 - y) :: Int+x + (1 - z) :: Int+y + (1 - x) :: Int+y + (1 - z) :: Int+z + (1 - x) :: Int+z + (1 - y) :: Int+1 + (1 + 1) :: Int+1 + (1 - x) :: Int+1 + (1 - y) :: Int+1 + (1 - z) :: Int+x - (y + y) :: Int+x - (y + z) :: Int+x - (z + z) :: Int+y - (x + x) :: Int+y - (x + z) :: Int+y - (z + z) :: Int+z - (x + x) :: Int+z - (x + y) :: Int+z - (y + y) :: Int+x - (y + 1) :: Int+x - (z + 1) :: Int+y - (x + 1) :: Int+y - (z + 1) :: Int+z - (x + 1) :: Int+z - (y + 1) :: Int+x - (1 + 1) :: Int+y - (1 + 1) :: Int+z - (1 + 1) :: Int+1 - (x + x) :: Int+1 - (x + y) :: Int+1 - (x + z) :: Int+1 - (y + y) :: Int+1 - (y + z) :: Int+1 - (z + z) :: Int++Number of Eq schema classes: 26+Number of Eq 1-var classes: 21+Number of Eq 2-var classes: 53+Number of Eq 3-var classes: 109
+ test/model/minus-s4.out view
@@ -0,0 +1,25 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+negate :: Int -> Int+(-) :: Int -> Int -> Int++             id x == x+negate (negate x) == x+            x + 0 == x+     x + negate x == 0+            x + y == y + x+            x - y == x + negate y++    x <= x + 1+x - 1 <= x+
+ test/model/minus.out view
@@ -0,0 +1,27 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+0 :: Int+1 :: Int+id :: Int -> Int+(+) :: Int -> Int -> Int+negate :: Int -> Int+(-) :: Int -> Int -> Int++             id x == x+negate (negate x) == x+            x + 0 == x+     x + negate x == 0+            x + y == y + x+            x - y == x + negate y+   negate (x + y) == negate x + negate y+      (x + y) + z == x + (y + z)++    x <= x + 1+x - 1 <= x+
+ test/model/monad-s4.out view
@@ -0,0 +1,21 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+_ :: Int -> [Int]+return :: Int -> [Int]+(>>=) :: [Int] -> (Int -> [Int]) -> [Int]+(>=>) :: (Int -> [Int]) -> (Int -> [Int]) -> Int -> [Int]++(xs >>= return) == xs+            f x == (return x >>= f)+    (f x >>= g) == (f >=> g) x+ (f >=> return) == f+ (return >=> f) == f++
+ test/model/monad.out view
@@ -0,0 +1,23 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Int+_ :: [Int]+_ :: Int -> [Int]+return :: Int -> [Int]+(>>=) :: [Int] -> (Int -> [Int]) -> [Int]+(>=>) :: (Int -> [Int]) -> (Int -> [Int]) -> Int -> [Int]++   (xs >>= return) == xs+               f x == (return x >>= f)+       (f x >>= g) == (f >=> g) x+((xs >>= f) >>= g) == (xs >>= (f >=> g))+    (f >=> return) == f+    (return >=> f) == f+ ((f >=> g) >=> h) == (f >=> (g >=> h))++
+ test/model/nord-s4.out view
@@ -0,0 +1,15 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: EqButNotOrd+C0 :: EqButNotOrd+id :: EqButNotOrd -> EqButNotOrd++Warning: no Ord instance for EqButNotOrd, inequations of this type will not be considered+++
+ test/model/nord.out view
@@ -0,0 +1,15 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: EqButNotOrd+C0 :: EqButNotOrd+id :: EqButNotOrd -> EqButNotOrd++Warning: no Ord instance for EqButNotOrd, inequations of this type will not be considered+++
+ test/model/oddeven-s4.out view
@@ -0,0 +1,44 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+0 :: Int+1 :: Int+2 :: Int+False :: Bool+True :: Bool+odd :: Int -> Bool+even :: Int -> Bool+mod :: Int -> Int -> Int+(==) :: Int -> Int -> Bool+(==) :: Bool -> Bool -> Bool++         (x == x) == True+         (p == p) == True+      (p == True) == p+         (x == y) == (y == x)+  odd (x `mod` 2) == odd x+ even (x `mod` 2) == even x+ (False == odd x) == even x+(False == even x) == odd x+        x `mod` 1 == 0++        p ==> True+    False ==> p+   x == 0 ==> even x+   x == 1 ==> odd x+   x == 2 ==> even x+x `mod` 2 <=  2+        0 <=  x `mod` 2+x `mod` 2 <=  1++ odd x ==> x `mod` x == 0+ odd x ==> 0 `mod` x == 0+ odd x ==> x `mod` 2 == 1+even x ==> x `mod` 2 == 0+
+ test/model/oddeven.out view
@@ -0,0 +1,52 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+0 :: Int+1 :: Int+2 :: Int+False :: Bool+True :: Bool+odd :: Int -> Bool+even :: Int -> Bool+mod :: Int -> Int -> Int+(==) :: Int -> Int -> Bool+(==) :: Bool -> Bool -> Bool++           (x == x) == True+           (p == p) == True+        (p == True) == p+           (x == y) == (y == x)+    odd (x `mod` 2) == odd x+   even (x `mod` 2) == even x+   (False == odd x) == even x+  (False == even x) == odd x+  (odd x == even x) == False+   (2 == x `mod` 2) == False+   (0 == x `mod` 2) == even x+   (1 == x `mod` 2) == odd x+  (even x == odd y) == (odd x == even y)+ (even x == even y) == (odd x == odd y)+          x `mod` 1 == 0+(x `mod` 2) `mod` 2 == x `mod` 2++        p ==> True+    False ==> p+   x == 0 ==> even x+   x == 1 ==> odd x+   x == 2 ==> even x+x `mod` 2 <=  2+        0 <=  x `mod` 2+x `mod` 2 <=  1++ odd x ==>           x `mod` x == 0+ odd x ==>           0 `mod` x == 0+ odd x ==>           x `mod` 2 == 1+even x ==>           x `mod` 2 == 0+ odd y ==> (x `mod` y) `mod` y == x `mod` y+
+ test/model/plus-abs-s4.out view
@@ -0,0 +1,40 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+(+) :: Int -> Int -> Int+id :: Int -> Int+abs :: Int -> Int+0 :: Int+1 :: Int+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool++(x <= abs x) == True+ (abs x < x) == False+(0 <= abs x) == True+ (abs x < 0) == False+(abs x <= x) == (0 <= x)+ (x < abs x) == (x < 0)+(x == abs x) == (0 <= x)+    (x == 0) == (abs x <= 0)+        id x == x+       x + 0 == x+ abs (abs x) == abs x+       x + y == y + x++x <= abs x+0 <= abs x+x <= x + 1++x <= 0 ==> x + abs x == 0+
+ test/model/plus-abs.out view
@@ -0,0 +1,68 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+(+) :: Int -> Int -> Int+id :: Int -> Int+abs :: Int -> Int+0 :: Int+1 :: Int+(<=) :: Int -> Int -> Bool+(<) :: Int -> Int -> Bool+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool++       (x <= abs x) == True+       (0 <= abs x) == True+       (1 == x + x) == False+       (abs x <= x) == (0 <= x)+       (x == abs x) == (0 <= x)+           (x == 0) == (abs x <= 0)+           (0 <= x) == (y <= x + y)+       (x + y <= x) == (y <= 0)+            (x < y) == (x + 1 <= y)+       (0 <= x + x) == (0 <= x)+       (1 <= x + x) == (1 <= x)+       (x + x <= 0) == (x <= 0)+       (x + x <= 1) == (x <= 0)+       (x == x + y) == (abs y <= 0)+(False == (x <= y)) == (y + 1 <= x)+               id x == x+              x + 0 == x+        abs (abs x) == abs x+              x + y == y + x+        abs (x + x) == abs x + abs x+    abs (x + abs x) == x + abs x+    abs (1 + abs x) == 1 + abs x+        (x + y) + z == x + (y + z)++     x <= y ==> x <= abs y+ abs x <= y ==> x <= y+  abs x < y ==> x < y+     x <= 0 ==> x <= abs y+ abs x <= y ==> 0 <= y+  abs x < y ==> 1 <= y+     x == 1 ==> 1 == abs x+      x < 0 ==> 1 <= abs x+          x <=  abs x+          0 <=  abs x+          x <=  x + 1+          x <=  x + abs y+          x <=  abs (x + x)+          x <=  1 + abs x+          0 <=  x + abs x+      x + y <=  x + abs y+abs (x + 1) <=  1 + abs x++    x <= 0 ==>       x + abs x == 0+abs x <= y ==>     abs (x + y) == x + y+abs y <= x ==>     abs (x + y) == x + y+    y <= x ==> abs (x + abs y) == x + abs y+
+ test/model/pretty-compact-s4.out view
@@ -0,0 +1,32 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  360+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Char  (holes: Char)+_ :: Int  (holes: Int)+_ :: ODoc Any  (holes: ODoc Any)+_ :: [Char]  (holes: [Char])+text :: [Char] -> ODoc Any+char :: Char -> ODoc Any+flush :: ODoc Any -> ODoc Any+hang :: Int -> ODoc Any -> ODoc Any -> ODoc Any+(<>) :: ODoc Any -> ODoc Any -> ODoc Any+(<+>) :: ODoc Any -> ODoc Any -> ODoc Any+($$) :: ODoc Any -> ODoc Any -> ODoc Any+(</>) :: ODoc Any -> ODoc Any -> ODoc Any+(<//>) :: ODoc Any -> ODoc Any -> ODoc Any+(<$$>) :: ODoc Any -> ODoc Any -> ODoc Any++        d1 $$ d2 == flush d1 <> d2+      d1 <$$> d2 == flush d1 <> d2+ flush d1 </> d2 == flush (flush d1) <> d2+flush d1 <//> d2 == flush (flush d1) <> d2++      d1 <= flush d1+      d1 <= d1 $$ d2+      d1 <= d1 </> d2+      d1 <= d1 <//> d2+flush d1 <= d1 $$ d2+
+ test/model/pretty-compact.out view
@@ -0,0 +1,32 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  360+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Char  (holes: Char)+_ :: Int  (holes: Int)+_ :: ODoc Any  (holes: ODoc Any)+_ :: [Char]  (holes: [Char])+text :: [Char] -> ODoc Any+char :: Char -> ODoc Any+flush :: ODoc Any -> ODoc Any+hang :: Int -> ODoc Any -> ODoc Any -> ODoc Any+(<>) :: ODoc Any -> ODoc Any -> ODoc Any+(<+>) :: ODoc Any -> ODoc Any -> ODoc Any+($$) :: ODoc Any -> ODoc Any -> ODoc Any+(</>) :: ODoc Any -> ODoc Any -> ODoc Any+(<//>) :: ODoc Any -> ODoc Any -> ODoc Any+(<$$>) :: ODoc Any -> ODoc Any -> ODoc Any++        d1 $$ d2 == flush d1 <> d2+      d1 <$$> d2 == flush d1 <> d2+ flush d1 </> d2 == flush (flush d1) <> d2+flush d1 <//> d2 == flush (flush d1) <> d2++      d1 <= flush d1+      d1 <= d1 $$ d2+      d1 <= d1 </> d2+      d1 <= d1 <//> d2+flush d1 <= d1 $$ d2+
+ test/model/pretty-s4.out view
@@ -0,0 +1,21 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Char+_ :: Doc+_ :: Int+_ :: [Char]+($$) :: Doc -> Doc -> Doc+(<>) :: Doc -> Doc -> Doc+nest :: Int -> Doc -> Doc+(++) :: [Char] -> [Char] -> [Char]+length :: [Char] -> Int+++d1 <= d1 $$ d2+d1 <= d1 <> d2+
+ test/model/pretty.out view
@@ -0,0 +1,34 @@+max expr size  =    7+  |- on ineqs  =    6+  |- on conds  =    6+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Char+_ :: Doc+_ :: Int+_ :: [Char]+($$) :: Doc -> Doc -> Doc+(<>) :: Doc -> Doc -> Doc+nest :: Int -> Doc -> Doc+(++) :: [Char] -> [Char] -> [Char]+length :: [Char] -> Int++            d1 <> nest x d2 == d1 <> d2+           (d1 $$ d2) $$ d3 == d1 $$ (d2 $$ d3)+           (d1 <> d2) <> d3 == d1 <> (d2 <> d3)+         nest x (nest y d1) == nest y (nest x d1)+           (d1 $$ d2) <> d3 == d1 $$ (d2 <> d3)+          nest x (d1 <> d2) == nest x d1 <> d2+    d1 <> (nest x d2 <> d3) == d1 <> (d2 <> d3)+          nest x (d1 $$ d2) == nest x d1 $$ nest x d2+nest (length (cs ++ ds)) d1 == nest (length cs) (nest (length ds) d1)++      d1 <= d1 $$ d2+      d1 <= d1 <> d2+d1 $$ d2 <= d1 $$ (d2 $$ d3)+d1 <> d2 <= d1 <> (d2 <> d3)+d1 $$ d2 <= d1 $$ (d2 <> d3)+d1 <> d2 <= d1 <> (d2 $$ d3)+
+ test/model/ratio-s4.out view
@@ -0,0 +1,59 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Integer+_ :: Ratio Integer+id :: Ratio Integer -> Ratio Integer+abs :: Ratio Integer -> Ratio Integer+negate :: Ratio Integer -> Ratio Integer+(+) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(*) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(/) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(%) :: Integer -> Integer -> Ratio Integer+recip :: Ratio Integer -> Ratio Integer+numerator :: Ratio Integer -> Integer+denominator :: Ratio Integer -> Integer+0 % 1 :: Ratio Integer+1 % 1 :: Ratio Integer+0 :: Integer+1 :: Integer++    denominator (abs q) == denominator q+ denominator (negate q) == denominator q+      numerator (x % 1) == x+    denominator (x % 1) == 1+denominator (q + 1 % 1) == denominator q+                   id q == q+      negate (negate q) == q+              q + 0 % 1 == q+            q * (1 % 1) == q+            q / (1 % 1) == q+            q * (0 % 1) == 0 % 1+            abs (abs q) == abs q+         abs (negate q) == abs q+           q + negate q == 0 % 1+      0 % denominator q == 0 % 1+                  q + r == r + q+                  q * r == r * q+     q / negate (1 % 1) == negate q+            abs (q * q) == q * q+           q * negate r == negate (q * r)++                   0 <= denominator q+                   1 <= denominator q+                   0 <= numerator (abs q)+         numerator q <= numerator (abs q)+numerator (negate q) <= numerator (abs q)+                   q <= abs q+               0 % 1 <= abs q+                   q <= q + 1 % 1+               0 % 1 <= q * q+            negate q <= abs q+      negate (abs q) <= q+      negate (abs q) <= 0 % 1+      negate (abs q) <= negate q+
+ test/model/ratio.out view
@@ -0,0 +1,114 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Integer+_ :: Ratio Integer+id :: Ratio Integer -> Ratio Integer+abs :: Ratio Integer -> Ratio Integer+negate :: Ratio Integer -> Ratio Integer+(+) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(*) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(/) :: Ratio Integer -> Ratio Integer -> Ratio Integer+(%) :: Integer -> Integer -> Ratio Integer+recip :: Ratio Integer -> Ratio Integer+numerator :: Ratio Integer -> Integer+denominator :: Ratio Integer -> Integer+0 % 1 :: Ratio Integer+1 % 1 :: Ratio Integer+0 :: Integer+1 :: Integer++            denominator (abs q) == denominator q+         denominator (negate q) == denominator q+              numerator (x % 1) == x+            denominator (x % 1) == 1+        denominator (q + 1 % 1) == denominator q+  numerator (1 % denominator q) == 1+denominator (1 % denominator q) == denominator q+        denominator (q * abs r) == denominator (q * r)+                           id q == q+              negate (negate q) == q+                      q + 0 % 1 == q+                    q * (1 % 1) == q+                    q / (1 % 1) == q+                    q * (0 % 1) == 0 % 1+                    abs (abs q) == abs q+                 abs (negate q) == abs q+                   q + negate q == 0 % 1+              0 % denominator q == 0 % 1+                          q + r == r + q+                          q * r == r * q+    numerator q % denominator q == q+             q / negate (1 % 1) == negate q+  denominator q % denominator q == 1 % 1+                    abs (q * q) == q * q+                   q * negate r == negate (q * r)+                abs (q * abs r) == abs (q * r)+                   negate q + r == negate (q + negate r)+                  abs q * abs r == abs (q * r)+                abs (q + abs q) == q + abs q+                  abs q + abs q == abs (q + q)+            abs (1 % 1 + abs q) == 1 % 1 + abs q+        abs (1 % denominator q) == 1 % denominator q+        abs (denominator q % 1) == denominator q % 1+      recip (1 % denominator q) == denominator q % 1+      recip (denominator q % 1) == 1 % denominator q+ x % numerator (negate (1 % 1)) == negate (x % 1)+                    (q + r) + s == q + (r + s)+                    (q * r) * s == q * (r * s)+                    (q + q) * r == q * (r + r)+                q * (r + 1 % 1) == q + q * r+          numerator (abs q) % 1 == abs (numerator q % 1)+       numerator (negate q) % 1 == negate (numerator q % 1)++                         0 <= denominator q+                         1 <= denominator q+                         0 <= numerator (abs q)+               numerator q <= numerator (abs q)+                         0 <= numerator (q * q)+numerator (negate (abs q)) <= 0+               numerator q <= numerator (q * q)+             denominator q <= denominator (q * q)+       denominator (q + q) <= denominator q+               numerator q <= numerator (q + 1 % 1)+      numerator (negate q) <= numerator (abs q)+numerator (negate (abs q)) <= numerator q+         numerator (abs q) <= numerator (q * q)+numerator (negate (abs q)) <= numerator (negate q)+                         q <= abs q+                     0 % 1 <= abs q+                         q <= q + 1 % 1+                     0 % 1 <= q * q+                  negate q <= abs q+            negate (abs q) <= q+            negate (abs q) <= 0 % 1+                         q <= q + abs r+                         q <= abs (q + q)+            negate (abs q) <= negate q+                         q <= 1 % 1 + abs q+                     0 % 1 <= q + abs q+            negate (q * q) <= 0 % 1+        q + negate (1 % 1) <= q+                     0 % 1 <= 1 % denominator q+                     0 % 1 <= denominator q % 1+                     1 % 1 <= denominator q % 1+         1 % denominator q <= 1 % 1+                     abs q <= abs (q + q)+        negate (q + 1 % 1) <= negate q+                     q + r <= q + abs r+                 q * abs q <= q * q+        negate (q + 1 % 1) <= q * q+            negate (q * q) <= q + 1 % 1+        q + negate (1 % 1) <= q * q+                 q * abs r <= abs (q * r)+              q + negate r <= q + abs r+         x % denominator q <= abs (x % 1)+                 q + abs q <= abs (q + q)+            negate (q * q) <= q * abs q+            negate (q * q) <= 1 % 1 + negate q+           abs (q + 1 % 1) <= 1 % 1 + abs q+
+ test/model/regexes-s4.out view
@@ -0,0 +1,46 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =   30+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Symbol+_ :: RE Symbol+Empty :: RE Symbol+None :: RE Symbol+Star :: RE Symbol -> RE Symbol+(:+) :: RE Symbol -> RE Symbol -> RE Symbol+(:.) :: RE Symbol -> RE Symbol -> RE Symbol+(<=) :: RE Symbol -> RE Symbol -> Bool+(==) :: RE Symbol -> RE Symbol -> Bool+False :: Bool+True :: Bool++     (r <= Empty) == True+      (None <= r) == True+    (r <= Star s) == True+ (Star r <= None) == False+     (r == Empty) == (Empty <= r)+      (r == None) == (r <= None)+    (r == Star s) == (Star s <= r)+           r :+ r == r+        r :+ None == r+       r :. Empty == r+        r :. None == None+    Star (Star r) == Star r+           r :+ s == s :+ r+           r :. s == s :. r+      r :+ Star r == Star r+Star (r :+ Empty) == Star r+  Empty :+ Star r == Star r++ r <= None ==> r <= s+      None <=  r+         r <=  Star r+     Empty <=  Star r+         r <=  r :+ s+    r :. r <=  Star r+r :+ Empty <=  Star r+    r :. s <=  r :+ s+
+ test/model/regexes.out view
@@ -0,0 +1,46 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =   30+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Symbol+_ :: RE Symbol+Empty :: RE Symbol+None :: RE Symbol+Star :: RE Symbol -> RE Symbol+(:+) :: RE Symbol -> RE Symbol -> RE Symbol+(:.) :: RE Symbol -> RE Symbol -> RE Symbol+(<=) :: RE Symbol -> RE Symbol -> Bool+(==) :: RE Symbol -> RE Symbol -> Bool+False :: Bool+True :: Bool++     (r <= Empty) == True+      (None <= r) == True+    (r <= Star s) == True+ (Star r <= None) == False+     (r == Empty) == (Empty <= r)+      (r == None) == (r <= None)+    (r == Star s) == (Star s <= r)+           r :+ r == r+        r :+ None == r+       r :. Empty == r+        r :. None == None+    Star (Star r) == Star r+           r :+ s == s :+ r+           r :. s == s :. r+      r :+ Star r == Star r+Star (r :+ Empty) == Star r+  Empty :+ Star r == Star r++ r <= None ==> r <= s+      None <=  r+         r <=  Star r+     Empty <=  Star r+         r <=  r :+ s+    r :. r <=  Star r+r :+ Empty <=  Star r+    r :. s <=  r :+ s+
+ test/model/sets-s4.out view
@@ -0,0 +1,50 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: Set Int+emptyS :: Set Int+singleS :: Int -> Set Int+insertS :: Int -> Set Int -> Set Int+deleteS :: Int -> Set Int -> Set Int+sizeS :: Set Int -> Int+(<~) :: Int -> Set Int -> Bool+(\/) :: Set Int -> Set Int -> Set Int+(/\) :: Set Int -> Set Int -> Set Int+False :: Bool+True :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool+(==) :: Set Int -> Set Int -> Bool++          x <~ emptyS == False+       x <~ singleS x == True+(emptyS == singleS x) == False+             (x == y) == x <~ singleS y+       x <~ singleS y == y <~ singleS x+    sizeS (singleS x) == sizeS (singleS y)+               s \/ s == s+               s /\ s == s+          s \/ emptyS == s+     deleteS x emptyS == emptyS+          s /\ emptyS == emptyS+     insertS x emptyS == singleS x+deleteS x (singleS x) == emptyS+               s \/ t == t \/ s+               s /\ t == t /\ s+insertS x (singleS x) == singleS x+       s \/ singleS x == insertS x s+insertS x (singleS y) == insertS y (singleS x)++          sizeS emptyS <= sizeS s+                emptyS <= s+singleS (sizeS emptyS) <= singleS (sizeS s)++x <~ s ==>    insertS x s == s+x <~ s ==> s /\ singleS x == singleS x+
+ test/model/sets.out view
@@ -0,0 +1,81 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: Set Int+emptyS :: Set Int+singleS :: Int -> Set Int+insertS :: Int -> Set Int -> Set Int+deleteS :: Int -> Set Int -> Set Int+sizeS :: Set Int -> Int+(<~) :: Int -> Set Int -> Bool+(\/) :: Set Int -> Set Int -> Set Int+(/\) :: Set Int -> Set Int -> Set Int+False :: Bool+True :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: Int -> Int -> Bool+(==) :: Set Int -> Set Int -> Bool++                  x <~ emptyS == False+               x <~ singleS x == True+        (emptyS == singleS x) == False+             x <~ insertS x s == True+             x <~ deleteS x s == False+      (emptyS == insertS x s) == False+                     (x == y) == x <~ singleS y+           (s == insertS x s) == x <~ s+               x <~ singleS y == y <~ singleS x+     (singleS x == singleS y) == x <~ singleS y+                (s /\ t == s) == (t == s \/ t)+           (s == deleteS x s) == (False == x <~ s)+            sizeS (singleS x) == sizeS (singleS y)+sizeS (deleteS x (singleS y)) == sizeS (deleteS y (singleS x))+                       s \/ s == s+                       s /\ s == s+                  s \/ emptyS == s+             deleteS x emptyS == emptyS+                  s /\ emptyS == emptyS+             insertS x emptyS == singleS x+        deleteS x (singleS x) == emptyS+                       s \/ t == t \/ s+                       s /\ t == t /\ s+             s \/ deleteS x s == s+                s \/ (s /\ t) == s+             s /\ insertS x s == s+                s /\ (s \/ t) == s+        insertS x (singleS x) == singleS x+               s \/ singleS x == insertS x s+      insertS x (insertS x s) == insertS x s+      deleteS x (deleteS x s) == deleteS x s+      insertS x (deleteS x s) == insertS x s+      deleteS x (insertS x s) == deleteS x s+        insertS x (singleS y) == insertS y (singleS x)+      insertS x (insertS y s) == insertS y (insertS x s)+      deleteS x (deleteS y s) == deleteS y (deleteS x s)+                (s \/ t) \/ u == s \/ (t \/ u)+                (s /\ t) /\ u == s /\ (t /\ u)+             s \/ insertS x t == insertS x (s \/ t)+             s /\ deleteS x t == deleteS x (s /\ t)++          s == singleS x ==> x <~ s+            sizeS emptyS <=  sizeS s+                 sizeS s <=  sizeS (insertS x s)+                 sizeS s <=  sizeS (s \/ t)+     sizeS (deleteS x s) <=  sizeS s+          sizeS (s /\ t) <=  sizeS s+       sizeS (singleS x) <=  sizeS (insertS y s)+     sizeS (deleteS x s) <=  sizeS (t \/ s)+                  emptyS <=  s+   deleteS x (singleS y) <=  singleS y+          s /\ singleS x <=  singleS x+  singleS (sizeS emptyS) <=  singleS (sizeS s)+insertS (sizeS emptyS) s <=  singleS (sizeS s)+insertS (sizeS emptyS) s <=  singleS (sizeS (singleS x))++
+ test/model/speculate-reason-s4.out view
@@ -0,0 +1,28 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   = 6000+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Equation+_ :: Expr+_ :: Thyght+_ :: [Expr]+okThy :: Thyght -> Bool+insert :: Expr -> Thyght -> Thyght+complete :: Thyght -> Thyght+normalize :: Thyght -> Expr -> Expr+equivalent :: Thyght -> Expr -> Expr -> Bool+append :: Thyght -> [Expr] -> Thyght+emptyThy :: Thyght+True :: Bool+False :: Bool+Equation :: Expr -> Expr -> Equation++              okThy t == True+     equivalent t e e == True+     equivalent t e f == equivalent t f e+ normalize emptyThy e == e+complete (complete t) == complete t+
+ test/model/speculate-reason.out view
@@ -0,0 +1,28 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   = 6000+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Equation+_ :: Expr+_ :: Thyght+_ :: [Expr]+okThy :: Thyght -> Bool+insert :: Expr -> Thyght -> Thyght+complete :: Thyght -> Thyght+normalize :: Thyght -> Expr -> Expr+equivalent :: Thyght -> Expr -> Expr -> Bool+append :: Thyght -> [Expr] -> Thyght+emptyThy :: Thyght+True :: Bool+False :: Bool+Equation :: Expr -> Expr -> Equation++              okThy t == True+     equivalent t e e == True+     equivalent t e f == equivalent t f e+ normalize emptyThy e == e+complete (complete t) == complete t+
+ test/model/string-s4.out view
@@ -0,0 +1,48 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Char+_ :: [Char]+_ :: [[Char]]+"" :: [Char]+" " :: [Char]+"\n" :: [Char]+lines :: [Char] -> [[Char]]+words :: [Char] -> [[Char]]+unlines :: [[Char]] -> [Char]+unwords :: [[Char]] -> [Char]+(++) :: [Char] -> [Char] -> [Char]++                     cs ++ "" == cs+                     "" ++ cs == cs+unlines (lines (unlines css)) == unlines css+   lines (unlines (lines cs)) == lines cs+   words (unlines (words cs)) == words cs+   lines (unlines (words cs)) == words cs+   words (unlines (lines cs)) == words cs+          words (unwords css) == words (unlines css)+            words (cs ++ " ") == words cs+           words (cs ++ "\n") == words cs+            words (" " ++ cs) == words cs+           words ("\n" ++ cs) == words cs++                 "" <= cs+                 cs <= cs ++ ds+                 cs <= unlines (lines cs)+               "\n" <= cs ++ "\n"+               "\n" <= cs ++ " "+         "\n" ++ cs <= " "+ unwords (lines cs) <= cs ++ ds+         "\n" ++ cs <= ds ++ " "+ unlines (lines cs) <= cs ++ cs+         "\n" ++ cs <= cs ++ "\n"+         cs ++ "\n" <= cs ++ " "+ unlines (lines cs) <= cs ++ " "+ unlines (lines cs) <= cs ++ "\n"+           lines "" <= css+lines (unlines css) <= css+
+ test/model/string.out view
@@ -0,0 +1,74 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Char+_ :: [Char]+_ :: [[Char]]+"" :: [Char]+" " :: [Char]+"\n" :: [Char]+lines :: [Char] -> [[Char]]+words :: [Char] -> [[Char]]+unlines :: [[Char]] -> [Char]+unwords :: [[Char]] -> [Char]+(++) :: [Char] -> [Char] -> [Char]++                            cs ++ "" == cs+                            "" ++ cs == cs+       unlines (lines (unlines css)) == unlines css+unwords (lines (unwords (lines cs))) == unwords (lines cs)+unwords (lines (unwords (words cs))) == unwords (words cs)+        unlines (lines (cs ++ "\n")) == cs ++ "\n"+                    (cs ++ ds) ++ es == cs ++ (ds ++ es)+            cs ++ unlines (lines cs) == unlines (lines (cs ++ cs))+           cs ++ unlines (lines " ") == unlines (lines (cs ++ " "))+           " " ++ unwords (lines cs) == unwords (lines (" " ++ cs))+          "\n" ++ unlines (lines cs) == unlines (lines ("\n" ++ cs))+           unlines (lines " ") ++ cs == " " ++ ("\n" ++ cs)+          lines (unlines (lines cs)) == lines cs+          words (unlines (words cs)) == words cs+          lines (unlines (words cs)) == words cs+          words (unlines (lines cs)) == words cs+                 words (unwords css) == words (unlines css)+                   words (cs ++ " ") == words cs+                  words (cs ++ "\n") == words cs+                   words (" " ++ cs) == words cs+                  words ("\n" ++ cs) == words cs+           words (cs ++ unwords css) == words (cs ++ unlines css)++                           "" <= cs+                           cs <= cs ++ ds+                           cs <= unlines (lines cs)+                         "\n" <= cs ++ "\n"+                         "\n" <= cs ++ " "+                   "\n" ++ cs <= " "+           unwords (lines cs) <= cs ++ ds+                   "\n" ++ cs <= ds ++ " "+           unlines (lines cs) <= cs ++ cs+unwords (lines (unwords css)) <= unwords css+                   "\n" ++ cs <= cs ++ "\n"+                  unwords css <= unwords (lines (unlines css))+                   cs ++ "\n" <= cs ++ " "+                  unlines css <= unwords css ++ " "+                  unlines css <= unwords css ++ "\n"+           unlines (lines cs) <= cs ++ " "+           unlines (lines cs) <= cs ++ "\n"+unwords (lines (unlines css)) <= unwords css ++ cs+           unlines css ++ " " <= unwords css ++ " "+                     lines "" <= css+          lines (unlines css) <= css+                     lines cs <= lines (cs ++ ds)+                     words cs <= words (cs ++ ds)+                     words cs <= lines (unwords (words cs))+                   lines "\n" <= lines (cs ++ "\n")+                   lines "\n" <= lines (cs ++ " ")+           lines ("\n" ++ cs) <= lines " "+   lines (unwords (lines cs)) <= lines (cs ++ ds)+           lines ("\n" ++ cs) <= lines (ds ++ " ")+           lines ("\n" ++ cs) <= lines (cs ++ "\n")+           lines (cs ++ "\n") <= lines (cs ++ " ")+
+ test/model/tauts-s4.out view
@@ -0,0 +1,33 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   = 4000+min  #-tests   =  200  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Name+_ :: Prop+False :: Bool+True :: Bool+(==) :: Prop -> Prop -> Bool+eval :: Prop -> Prop+varOf :: Prop -> Name+subst :: Name -> Bool -> Prop -> Prop+taut :: Prop -> Bool+(==) :: Bool -> Bool -> Bool+(==) :: Name -> Name -> Bool++     (p == p) == True+     (p == p) == True+  (p == True) == p+     (n == n) == True+taut (eval p) == taut p+     (p == q) == (q == p)+eval (eval p) == eval p++    p ==> True+False ==> p++p ==> subst n True q == subst n p q+
+ test/model/tauts.out view
@@ -0,0 +1,37 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   = 4000+min  #-tests   =  200  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: Bool+_ :: Name+_ :: Prop+False :: Bool+True :: Bool+(==) :: Prop -> Prop -> Bool+eval :: Prop -> Prop+varOf :: Prop -> Name+subst :: Name -> Bool -> Prop -> Prop+taut :: Prop -> Bool+(==) :: Bool -> Bool -> Bool+(==) :: Name -> Name -> Bool++     (p == p) == True+     (p == p) == True+  (p == True) == p+     (n == n) == True+taut (eval p) == taut p+     (p == q) == (q == p)+eval (eval p) == eval p++              p ==> True+          False ==> p+    p == eval q ==> p == eval p+    subst n p q <=  q+    subst n p q <=  subst n True q+subst n False p <=  subst n q p++taut q ==> subst n (taut q) p == subst n True p+
+ test/model/tuples-s4.out view
@@ -0,0 +1,36 @@+max expr size  =    4+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: ()+_ :: Int+_ :: (Int,Int)+_ :: (Int,Int,Int)+() :: ()+id :: () -> ()+id :: Int -> Int+id :: (Int,Int) -> (Int,Int)+id :: (Int,Int,Int) -> (Int,Int,Int)+(,) :: Int -> Int -> (Int,Int)+(,,) :: Int -> Int -> Int -> (Int,Int,Int)+fst :: (Int,Int) -> Int+snd :: (Int,Int) -> Int+swap :: (Int,Int) -> (Int,Int)+right :: (Int,Int,Int) -> (Int,Int,Int)+left :: (Int,Int,Int) -> (Int,Int,Int)++                     id x == x+                fst (x,y) == x+                snd (x,y) == y+            fst (swap xy) == snd xy+            snd (swap xy) == fst xy+                    id xy == xy+           swap (swap xy) == xy+               swap (x,y) == (y,x)+                   id xyz == xyz+right (right (right xyz)) == xyz+                 left xyz == right (right xyz)++
+ test/model/tuples.out view
@@ -0,0 +1,35 @@+max expr size  =    5+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: ()+_ :: Int+_ :: (Int,Int)+_ :: (Int,Int,Int)+() :: ()+id :: () -> ()+id :: Int -> Int+id :: (Int,Int) -> (Int,Int)+id :: (Int,Int,Int) -> (Int,Int,Int)+(,) :: Int -> Int -> (Int,Int)+(,,) :: Int -> Int -> Int -> (Int,Int,Int)+fst :: (Int,Int) -> Int+snd :: (Int,Int) -> Int+swap :: (Int,Int) -> (Int,Int)+right :: (Int,Int,Int) -> (Int,Int,Int)+left :: (Int,Int,Int) -> (Int,Int,Int)++                     id x == x+                fst (x,y) == x+                snd (x,y) == y+                    id xy == xy+          (fst xy,snd xy) == xy+                  swap xy == (snd xy,fst xy)+                   id xyz == xyz+right (right (right xyz)) == xyz+                 left xyz == right (right xyz)+            right (x,y,z) == (z,x,y)++
+ test/model/unit-s4.out view
@@ -0,0 +1,13 @@+max expr size  =    4+  |- on ineqs  =    3+  |- on conds  =    3+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: ()+() :: ()+id :: () -> ()+++
+ test/model/unit.out view
@@ -0,0 +1,13 @@+max expr size  =    5+  |- on ineqs  =    4+  |- on conds  =    4+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    2  (for inequational and conditional laws)++_ :: ()+() :: ()+id :: () -> ()+++
+ test/model/zip-s4.out view
@@ -0,0 +1,25 @@+max expr size  =    4+  |- on ineqs  =    5+  |- on conds  =    5+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+_ :: [(Int,Int)]+_ :: (Int,Int)+(++) :: [Int] -> [Int] -> [Int]+(==) :: Int -> Int -> Bool+length :: [Int] -> Int+zip :: [Int] -> [Int] -> [(Int,Int)]+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: [Int] -> [Int] -> Bool+(==) :: [(Int,Int)] -> [(Int,Int)] -> Bool+(==) :: (Int,Int) -> (Int,Int) -> Bool+++
+ test/model/zip.out view
@@ -0,0 +1,27 @@+max expr size  =    5+max  #-tests   =  500+min  #-tests   =   25  (to consider p ==> q true)+max  #-vars    =    3  (for inequational and conditional laws)++_ :: Bool+_ :: Int+_ :: [Int]+_ :: [(Int,Int)]+_ :: (Int,Int)+(++) :: [Int] -> [Int] -> [Int]+(==) :: Int -> Int -> Bool+length :: [Int] -> Int+zip :: [Int] -> [Int] -> [(Int,Int)]+True :: Bool+False :: Bool+(==) :: Bool -> Bool -> Bool+(==) :: [Int] -> [Int] -> Bool+(==) :: [(Int,Int)] -> [(Int,Int)] -> Bool+(==) :: (Int,Int) -> (Int,Int) -> Bool++zip xs (xs ++ ys) == zip xs xs+zip (xs ++ ys) xs == zip xs xs++length xs == length ys ==> zip xs (ys ++ zs) == zip xs ys+length xs == length ys ==> zip (xs ++ zs) ys == zip xs ys+
+ test/order.hs view
@@ -0,0 +1,141 @@+{-# Language DeriveDataTypeable, StandaloneDeriving #-} -- Travis+import Test+import Test.Speculate.Utils+import qualified Test.LeanCheck.Utils as LC (comparison)++import Test.Speculate.Expr+import Test.Speculate.Reason (emptyThy)+import Test.Speculate.Reason.Order++import Data.Monoid ((<>))++-- for Travis:+deriving instance Typeable Thyght+deriving instance Typeable Equation++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True -- see test-expr.hs for general Expr orders++  , holds n $ compare ==== (compareComplexity <> lexicompare)+  , holds n $ LC.comparison lexicompare+  , holds n $ LC.comparison compareComplexity++  , holds n $ \(IntToIntE e1) (IntToIntE e2) (IntE e3) -> let cmp = lexicompare in+                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)+  , holds n $ \(IntToIntE e1) (IntToIntE e2) (IntE e3) -> let cmp = lexicompareBy (flip compare) in+                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)+  , holds n $ \(BoolToBoolE e1) (BoolToBoolE e2) (BoolE e3) -> let cmp = lexicompare in+                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)+  , holds n $ \(BoolToBoolE e1) (BoolToBoolE e2) (BoolE e3) -> let cmp = lexicompareBy (flip compare) in+                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)++  -- some tests of order+  , value "xx" xx < zero+  , value "xxeqxx" (Equation xx xx) < value "xx" xx+  , value "xx" xx < value "emptyThyght" (Thyght emptyThy)++  , holds n $ simplificationOrder (|>|)+  , fails n $ simplificationOrder ( >|) -- TODO: make this pass (holds)+  , fails n $ closedUnderSub ( >|) -- reason for the above, I believe this is an actual bug in >|+-- > > checkFor 5040 $ closedUnderSub ( >|)+-- > *** Failed! Falsifiable (after 3707 tests):+-- > (id _ :: Int) (id 0 :: Int) (0 :: Int)+-- > > closedUnderSub (>|) (id' xx) (id' zero) zero+-- > False+--+-- The above bug did exist before the introduction of Express and probably+-- since the creation of (>|).++-- TODO: fix the following two tests+-- > > checkFor 10080 $ simplificationOrder (dwoBy (<))+-- > *** Failed! Falsifiable (after 6901 tests):+-- > (f _ :: Int) (id _ :: Int) (_ :: Int)+-- > > checkFor 10080 $ simplificationOrder (|> )+-- > *** Failed! Falsifiable (after 6901 tests):+-- > (f _ :: Int) (id _ :: Int) (_ :: Int)++  -- TODO: fix the following two tests with 10000 tests:+  , holds 5040 $ simplificationOrder (|> )+  , holds 5040 $ simplificationOrder (dwoBy (<))+  , fails 10080 $ compatible (|>)+-- TODO: fix the following two tests+-- > > checkFor 10080 $ compatible    (|>)+-- > *** Failed! Falsifiable (after 6901 tests):+-- > (f _ :: Int) (id _ :: Int) (_ :: Int)+-- Like the one above+-- Compatibility fails whenever there are function variables.+++  , fails n $ \e1 e2 -> (e1 |>| e2) == (e1 |>  e2)+  , fails n $ \e1 e2 -> (e1 |>| e2) == (e1  >| e2)+  , fails n $ \e1 e2 -> (e1 |>  e2) == (e1  >| e2)++  , not $ zero |> xx+  , not $ xx |> zero+  , negate' xx |> zero+  , negate' xx -+- xx |> zero+  , zero > xx+  , negateE > zero++  , weight xx                            == 1+  , weight zero                          == 1+  , weight (xx -+- zero)                 == 2+  , weight (one -+- yy)                  == 2+  , weight (xx -*- (yy -+- zz))          == 3+  , weight ((xx -*- yy) -+- (xx -*- zz)) == 4+  , holds n $ \e1 e2 -> weight (e1 -+- e2)  == weight e1 + weight e2+  , holds n $ \e     -> weight (e -+- zero) == 1 + weight e+  , holds n $ \e     -> weight (abs' e)     == 1 + weight e+  , holds n $ \e     -> weightExcept absE (abs' e)    <= weight e+  , holds n $ \e     -> weightExcept absE (negate' e) <= weight e + 1+  , holds n $ \e     -> weightExcept absE (abs' e)    == weightExcept absE e+  , holds n $ \e     -> weightExcept absE (negate' e) == weightExcept absE e + 1++  -- lexicompare is compatible (almost as if by coincidence)+  , fails n $ simplificationOrder lgt+  , holds n $ compatible          lgt+  , fails n $ closedUnderSub      lgt+  , fails n $ subtermProperty     lgt++  -- compare has the subtermProperty (Expr)+  , fails n $ simplificationOrder cgt+  , fails n $ compatible          cgt+  , fails n $ closedUnderSub      cgt+  , holds n $ subtermProperty     cgt+  ]+  where+  e1 `lgt` e2 = e1 `lexicompare` e2 == GT+  e1 `cgt` e2 = e1 `compare` e2 == GT++simplificationOrder :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool+simplificationOrder (>) = \e1 e2 e3 -> reductionOrder  (>) e1 e2 e3+                                    && subtermProperty (>) e1++subtermProperty :: (Expr -> Expr -> Bool) -> Expr -> Bool+subtermProperty (>) = \e -> all (e >)+                          . filter (\e' -> e' /= e && typ e' == typ e)+                          $ subexprs e -- isn't this subexprsV? I don't think so++reductionOrder :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool+reductionOrder (>) = \e1 e2 e3 -> strictPartialOrder (>) e1 e2 e3+                               && compatible         (>) e1 e2 e3+                               && closedUnderSub     (>) e1 e2 e3++compatible :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool+compatible (>) = \e e1 e2 -> e1 > e2 && typ e1 == typ e2+                         ==> and [ (e //- [(v,e1)]) > (e //- [(v,e2)])+                                 | v <- vars e+                                 , typ v == typ e1+                                 , typ v == typ e2 ]++-- The formal definition contains multiple assignments,+-- here, just a single variable is assigned.+closedUnderSub :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool+closedUnderSub (>) = \e1 e2 e -> e1 > e2+                             ==> and [ (e1 //- [(v,e)]) > (e2 //- [(v,e)])+                                     | v <- vars e1 `nubMerge` vars e2+                                     , typ v == typ e ]
+ test/reason.hs view
@@ -0,0 +1,258 @@+{-# LANGUAGE CPP #-}+-- Test library+import Test+import Test.Speculate.Utils++-- Functions under test+import Test.Speculate.Expr+import Test.Speculate.Reason+import Test.Speculate.Reason.Order+import Data.Tuple (swap)+import Data.Function (on)+import Data.List (permutations)++theorize' :: [(Expr,Expr)] -> Thy+theorize' eqs = finalize $ foldl (flip insert) emptyThy {closureLimit = 3, keepE = keepMaxOf eqs} eqs++theorize'' :: [(Expr,Expr)] -> Thy+theorize'' eqs = finalize $ foldr insert emptyThy {closureLimit = 3, keepE = keepMaxOf eqs} eqs++main :: IO ()+main = do+  n <- getMaxTestsFromArgs 10000++  reportTests (tests n)++  putStrLn "\nlength (rules $ theorize eqs)"+  reportCountsBy (\(SameTypedPairsE eqs) -> show . length . rules $ theorize eqs)+                 (take n list)++  putStrLn "length (equations $ theorize eqs)"+  reportCountsBy (\(SameTypedPairsE eqs) -> show . length . equations $ theorize eqs)+                 (take n list)++  putStrLn "\\e1 e2 e3 -> e1 > e2 && typ e1 == typ e2,  length (vars e3)"+  reportCountsBy (\(e1,e2,e3) -> if e1 > e2 && typ e1 == typ e2+                                   then "OK, length " ++ show (length $ vars e3)+                                   else "Not OK")+                 (take n list)++  putStrLn "\\e e1 e2 -> length $ reductions 1 e (e1,e2)"+  reportCountsBy (\(e,e1,e2) -> if e1 > e2 && typ e1 == typ e2+                                  then "OK, length " ++ show (length $ reductions1 e (e1,e2))+                                  else "Not OK")+                 (take n list)++(~~) :: Expr -> Expr -> (Expr,Expr)+(~~) = (,)+infix 4 ~~++mkThy :: [(Expr,Expr)] -> [(Expr,Expr)] -> Thy+mkThy rs eqs = emptyThy+             { rules     = rs+             , equations = eqs }++tests :: Int -> [Bool]+tests n =+  [ True++  -- Listable Thy sound and complete:+  , holds n $ okThy+  , all (`elem` take n list) (take (n`div`10) listThyInefficient)++  , holds n $ \(SameTypedPairsE eqs) -> theorize eqs == theorize (map swap eqs)+  , holds n $ \(SameTypedPairsE eqs) -> theorize eqs == theorize (reverse eqs)++-- TODO: make the following two pass+-- > > let eqs = [(xx, id' xx), (zero, id' xx)]+-- > > theorize' eqs == theorize eqs+-- > False+-- > > theorize' eqs+-- > Thy { rules = [ id x == x+-- >               ]+-- >     , equations = [ 0 == x+-- >                   ]+-- >     , canReduceTo = (|>)+-- >     , closureLimit = 3+-- >     , keepE = keepUpToLength 3+-- >     }+-- > > theorize eqs+-- > Thy { rules = [ id x == x+-- >               , id x == 0+-- >               ]+-- >     , equations = [ 0 == x+-- >                   ]+-- >     , canReduceTo = (|>)+-- >     , closureLimit = 3+-- >     , keepE = keepUpToLength 3+-- >     }+--+-- This issue did exist before the introduction of Express,+-- it just wasn't found because Expr enumeration wasn't that good.+--, holds n $ \(SameTypedPairsE eqs) -> theorize'  eqs == theorize eqs+--, holds n $ \(SameTypedPairsE eqs) -> theorize'' eqs == theorize eqs++  , holds n $ okThy . deduce+  , holds n $ idempotent deduce+  , holds n $ \thy -> ((>=) `on` length . equations) (deduce thy) thy+  , holds n $ \thy -> ((==) `on` rules)              (deduce thy) thy++  , holds n $ okThy . simplify+  , holds n $ idempotent simplify+  , holds n $ \thy -> ((<=) `on` length . equations) (simplify thy) thy+  , holds n $ \thy -> ((==) `on` rules)              (simplify thy) thy++  , holds n $ okThy . delete+  , holds n $ idempotent delete+  , holds n $ \thy -> ((<=) `on` length . equations) (delete thy) thy+  , holds n $ \thy -> ((==) `on` rules)              (delete thy) thy++  , holds n $ okThy . orient+  , holds n $ idempotent orient+  , holds n $ \thy -> ((<=) `on` length . equations) (orient thy) thy+  , holds n $ \thy -> ((>=) `on` length . rules)     (orient thy) thy+  , holds n $ \thy -> length (equations thy)      - length (equations $ orient thy)+                   >= length (rules $ orient thy) - length (rules thy)++  , holds n $ okThy . compose+  , holds n $ idempotent compose+  , holds n $ \thy -> ((<=) `on` length . rules)     (compose thy) thy+  , holds n $ \thy -> ((==) `on` equations)          (compose thy) thy++  , holds n $ okThy . collapse+  , holds n $ idempotent collapse+  , holds n $ \thy -> ((<=) `on` length . rules)     (collapse thy) thy+  , holds n $ \thy -> ((>=) `on` length . equations) (collapse thy) thy++  , holds n $ okThy . complete . unThyght++  , holds n $ \(Thyght thy') (SameTypedPairsE eqs) ->+                let thy = complete thy'+                in  foldr insert thy eqs == complete (append thy eqs)++  -- TODO: make the following pass with n `div` 10+  -- Inference order should not matter:+  , holds 100+  $ \(Thyght thy) -> all (\steps -> iterateUntil (==) (chain steps) thy == complete thy)+                   $ permutations [collapse, compose, orient, delete . simplify, deduce]+  -- I now think the above property is not true in all cases, investigate.++  -- NOTE: the following does not hold in general, only for most of the cases+  , holds 4000+  $ \(Thyght thy') (SameTypeE e1 e2) -> closureLimit thy' > 0 ==>+       let thy = insert (e1,e2)+               $ thy' { keepE = keepUpToLength (max (size e1) (size e2)) }+       in  equivalent thy e1 e2++  , holds n $ idempotent finalize++  , criticalPairs emptyThy { rules = [ ((xx -+- yy) -+- zz,xx -+- (yy -+- zz))+                                     , (negate' xx -+- xx, zero) ] }+      == [ (negate' xx -+- (xx -+- yy),zero -+- yy)+         , ((xx -+- (yy -+- zz)) -+- xx', (xx -+- yy) -+- (zz -+- xx')) ]++  , criticalPairs emptyThy { rules = [ (negate' (negate' xx), id' xx) ] }+      == [ (negate' (id' xx), id' (negate' xx)) ]++  , criticalPairs emptyThy { canReduceTo = dwoBy (\e1 e2 -> e1 `lexicompare` e2 == GT)+                           , rules = [ (foo (goo (foo xx)), xx)+                                     , (foo (goo xx), goo (foo xx)) ] }+      == (let sortuple (x,y) | x < y     = (y,x)+                             | otherwise = (x,y)+          in nubSort . map sortuple+           $ [ (goo xx,                   foo (goo (goo (foo xx))))+             , (goo (foo xx),             foo (goo xx))+             , (goo (foo (foo xx)),       xx)+             , (goo (foo (foo (goo xx))), goo xx) ])++  , criticalPairs emptyThy { rules = [ (foo (goo (foo xx)), xx)+                                     , (foo (goo xx), goo (foo xx)) ] }+      == [ (goo (foo xx),             foo (goo xx))+         , (goo (foo (foo xx)),       xx)+         , (foo (goo (goo (foo xx))), goo xx)+         , (goo (foo (foo (goo xx))), goo xx) ]++  , theorize [ (xx -*- yy) -*- (yy -*- zz)  ~~  yy ]+    |==|+    [ (xx -*- yy) -*- (yy -*- zz)  ~~  yy+    , xx -*- ((xx -*- yy) -*- zz)  ~~  xx -*- yy+    , (xx -*- (yy -*- zz)) -*- zz  ~~  yy -*- zz+    ] `mkThy` []++  , theorize [ xx -*- (yy -+- zz)  ~~  (xx -*- yy) -+- (xx -*- zz)+             , (xx -+- yy) -*- zz  ~~  (xx -*- zz) -+- (yy -*- zz) ]+    |==|+    [ (xx -*- yy) -+- (xx -*- zz)  ~~  xx -*- (yy -+- zz)+    , (xx -*- yy) -+- (zz -*- yy)  ~~  (xx -+- zz) -*- yy+    ] `mkThy` [ (xx -+- xx) -*- yy  ~~  xx -*- (yy -+- yy) ]++  , theorizeBy (|>|) [ xx -+- zero      ~~  xx+                     , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]+    |==|+    [ xx -+- zero  ~~  xx+    ] `mkThy` [ xx -+- succ' yy  ~~  succ' (xx -+- yy) ]++  , theorizeBy (kboBy weight (<))+    [ xx -+- zero      ~~  xx+    , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]+    |==|+    [                 xx -+- zero  ~~  xx+    , succ' (xx -+- yy)            ~~  xx -+- succ' yy+    , xx -+-         succ' zero    ~~         succ' xx+    , xx -+- (succ' (succ' zero))  ~~  succ' (succ' xx)+    ] `mkThy` []++  , theorizeBy (|>) [ xx -+- zero      ~~  xx+                    , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]+    |==|+    [ xx -+- zero      ~~  xx+    , xx -+- succ' yy  ~~  succ' (xx -+- yy)+    ] `mkThy` []++  -- TODO: fix order under GHC <= 7.8+#if __GLASGOW_HASKELL >= 800+  , theorizeBy (dwoBy $ \e1 e2 -> if typ e1 == typ e2+                                      then e1 > e2+                                      else typ e1 < typ e2)+    [ ( xx -+- zero, xx )+    , ( xx -+- succ' yy, succ' (xx -+- yy) ) ]+    |==|+    [ ( xx -+- zero, xx )+    , ( succ' (xx -+- yy), xx -+- (succ' yy) )+    ] `mkThy` [ xx -+- (succ' zero)  ~~  succ' xx]+#endif++  , theorizeBy (|>) [ ( zero -+- xx, xx )+                    , ( negate' xx -+- xx, zero )+                    , ( (xx -+- yy) -+- zz, xx -+- (yy -+- zz) ) ]+    |==| [ ( zero -+- xx                , xx )+         , ( negate' xx -+- xx          , zero )+         , ( (xx -+- yy) -+- zz         , xx -+- (yy -+- zz) )+         , ( negate' xx -+- (xx -+- yy) , yy )+         , ( xx -+- zero                , xx )+         , ( xx -+- (negate' xx -+- yy) , yy )+         , ( negate' (negate' xx)         , xx )+         , ( negate' zero                 , zero )+         , ( xx -+- negate' xx            , zero )+         ] `mkThy` []++  , theorizeBy (kboBy (weightExcept negateE) (gtExcept (>) negateE))+      [ ( zero -+- xx, xx )+      , ( negate' xx -+- xx, zero )+      , ( (xx -+- yy) -+- zz, xx -+- (yy -+- zz) ) ]+    |==| [ ( zero -+- xx                , xx )+         , ( negate' xx -+- xx          , zero )+         , ( (xx -+- yy) -+- zz         , xx -+- (yy -+- zz) )+         , ( negate' xx -+- (xx -+- yy) , yy )+         , ( negate' zero -+- xx        , xx )+         , ( xx -+- zero                , xx )+         , ( xx -+- (negate' xx -+- yy) , yy )+         , ( negate' (negate' xx)         , xx )+         , ( xx -+- negate' xx            , zero )+         ] `mkThy` [( negate' zero, zero )]++  -- TODO: restore tests losts after removing test-kbc+  ]++succ' :: Expr -> Expr+succ'  =  (value "succ" ((1+) :: Int -> Int) :$)
+ test/sdist view
@@ -0,0 +1,33 @@+#!/bin/bash+#+# test-sdist: tests the package generated by "cabal sdist".+#+# Copyright (c) 2015-2018 Rudy Matela.+# Distributed under the 3-Clause BSD licence.+export LC_ALL=C  # consistent sort+pkgver=` cat *.cabal | grep "^version:" | sed -e "s/version: *//"`+pkgname=`cat *.cabal | grep "^name:"    | sed -e "s/name: *//"`+pkg=$pkgname-$pkgver+set -x+cabal sdist &&+cd dist &&+tar -tf $pkg.tar.gz | sort --ignore-case          > ls-cabal-i  &&+tar -tf $pkg.tar.gz | sort --ignore-case --unique > ls-cabal-iu &&+diff -rud ls-cabal-i ls-cabal-iu &&+rm -f ls-cabal ls-cabal-ignore-case &&+if [ -d ../.git ]+then+	# on git repo, test if files are the same+	git -C .. ls-files                                      | sort > ls-git   &&+	tar -tf $pkg.tar.gz | grep -v "/$" | sed -e "s,$pkg/,," | sort > ls-cabal &&+	diff -rud ls-git ls-cabal &&+	rm -f ls-git ls-cabal+else+	# outside of git repo, test build+	rm -rf $pkg/ &&+	tar -xzf $pkg.tar.gz &&+	cd $pkg/ &&+	cabal configure --enable-tests --enable-benchmarks &&+	cabal build &&+	cabal test+fi
+ test/stats.hs view
@@ -0,0 +1,41 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.Reason+import Test.Speculate.Utils++main :: IO ()+main = do+  n <- getMaxTestsFromArgs 10000++  putStrLn "typ (e :: Expr)"+  reportCountsBy typ            (take n list :: [Expr])++  putStrLn "size (e :: Expr)"+  reportCountsBy sizeInterval (take n list :: [Expr])++  putStrLn "typ (e1 :: Expr) == typ (e2 :: Expr)"+  reportCountsBy equalTypes (take n list)++  putStrLn "typ (e1 :: Expr) == typ (e2 :: Expr)"+  reportCountsBy equalTypes . map unSameTypeE . take n $ list++  putStrLn "okThy thy"+  reportCountsBy (show . okThy) (take n list)++  putStrLn "length (equations thy)"+  reportCountsBy (show . length . equations) (take n list)++  putStrLn "length (rules thy)"+  reportCountsBy (show . length . rules) (take n list)++  putStrLn "length (equations thy + rules thy)"+  reportCountsBy (show . length . (\thy -> rules thy ++ equations thy)) (take n list)++sizeInterval :: Expr -> (Int,Int)+sizeInterval e = (l, l+2) where l = (size e `div` 3) * 3++equalTypes :: (Expr,Expr) -> String+equalTypes (e1,e2) | typ e1 == typ e2 = show (typ e1)+                   | otherwise        = "invalid"
+ test/update-diff view
@@ -0,0 +1,74 @@+#!/bin/bash+top=`dirname $0`/..+eg=$top/eg+model=$top/test/model++case "$1" in+	-*) sz="$1"+	    shift+		;;+esac++diff-() {+	$1 $sz | diff -rud $model/$2$sz.out - || exit 1+}++update-diff-() {+	$1 $sz > $model/$2$sz.out+}++tym() {+	/usr/bin/time -f%e "$@"+}++spc() {+	/usr/bin/time -f%M "$@"+}++mean() {+	sum="`echo -n $* | sed -e "s/ / + /g"`"+	mean="`echo "scale = 3; ($sum) / $#" | bc`"+	printf "%3.3f\n" $mean+}+export -f mean++div1024() {+	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"+}+export -f div1024++benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++memory-benchmark-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	printf "%-18s  " "$2$sz"+	for run in {1..3}+	do+		spc $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean    "$@"' mean |+	       xargs bash -c 'div1024 "$@"' div1024+}++benchmark-cmp-() {+	[ -x $1 ] || { echo "$0: not found $1"; return 1; }+	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '+	echo -n ' '+	for run in {1..1}+	do+		tym $1 $sz 2>&1 >/dev/null+	done | xargs bash -c 'mean "$@"' mean+}++find $* | sed -e "s/^bench/     /;s/^eg/  /" |+sort -b | sed -e "s/^     /bench/;s/^  /eg/" |+while read e+do+	`basename $0`- $top/$e `basename $e`+done
+ test/utils.hs view
@@ -0,0 +1,108 @@+-- Test library+import Test++-- Functions under test+import Test.Speculate.Utils++-- Helper functions+import Data.List+import Data.Function++import Test.LeanCheck.Utils (comparison)++main :: IO ()+main = mainTest tests 10000++tests :: Int -> [Bool]+tests n =+  [ True+  +  , holds 100 $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys+                      ==> strictlyOrdered (nubMerge xs (ys::[Int]))+  , and [ nubMerge xs xs == xs | n <- [0..10], let xs = [0..n] :: [Int] ]++  , collectOn snd [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2),(2,2)],[(2,3),(3,3)]]+  , collectOn fst [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2)],[(2,2),(2,3)],[(3,3)]]+  , collectOn (uncurry (+)) [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2)],[(2,2)],[(2,3)],[(3,3)]]+  , collectBy (compare `on` snd) [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2),(2,2)],[(2,3),(3,3)]]++  , holds n $ \x           -> medianate (,) [x::Int]           == [(x,x)]+  , holds n $ \x y         -> medianate (,) [x::Int,y]         == [(x,y)]+  , holds n $ \x y z       -> medianate (,) [x::Int,y,z]       == [(x,z),(y,y)]+  , holds n $ \x y z w     -> medianate (,) [x::Int,y,z,w]     == [(x,w),(y,z)]+  , holds n $ \x y z w v   -> medianate (,) [x::Int,y,z,w,v]   == [(x,v),(y,w),(z,z)]+  , holds n $ \x y z w v u -> medianate (,) [x::Int,y,z,w,v,u] == [(x,u),(y,v),(z,w)]++  , all (\f -> discardOthers f [] == ([]::[Int])) [(<=),(>=),(<),(>),(==),(/=),\x y -> True]+  , holds n $ \x -> all (\f -> discardOthers f [x] == [x::Int])+                        [(<=),(>=),(<),(>),(==),(/=),\x y -> True]+  , holds n $ \xs -> not (null xs) ==> discardOthers (<=) xs == [maximum xs::Int]+  , holds n $ \xs -> not (null xs) ==> discardOthers (>=) xs == [minimum xs::Int]+  , holds n $ \xs -> not (null xs) ==>+      discardOthers (<) xs == replicate (count (maximum xs) xs) (maximum xs::Int)+  , holds n $ \xs -> not (null xs) ==>+      discardOthers (>) xs == replicate (count (minimum xs) xs) (minimum xs::Int)++  , table "l  l  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]+                    , ["0",    "1",        "2"]+                    , ["123",  "456\n789", "3"] ] ==+      "asdf  qwer  zxvc\n\+      \            zxvc\n\+      \0     1     2\n\+      \123   456   3\n\+      \      789\n"++  , table "r  l  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]+                    , ["0",    "1",        "2"]+                    , ["123",  "456\n789", "3"] ] ==+      "asdf  qwer  zxvc\n\+      \            zxvc\n\+      \   0  1     2\n\+      \ 123  456   3\n\+      \      789\n"++  , table "r  r  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]+                    , ["0",    "1",        "2"]+                    , ["123",  "456\n789", "3"] ] ==+      "asdf  qwer  zxvc\n\+      \            zxvc\n\+      \   0     1  2\n\+      \ 123   456  3\n\+      \       789\n"++  , splitAtCommas "1,2,3" == ["1","2","3"]+  , splitAtCommas "123,456,789," == ["123","456","789"]+  , splitAtCommas "123 456,789"  == ["123","456","789"] -- weird behaviour, but fine for speculate++  , compareIndex [3,2,1::Int] 3 1 == LT+  , compareIndex [3,2,1::Int] 1 3 == GT+  , compareIndex [3,2,1::Int] 4 1 == GT+  , compareIndex [3,2,1::Int] 1 0 == LT+  , holds n $ \xs -> comparison (compareIndex (xs::[Int]))++  , partitionByMarkers '#' '*' "" == ("","")+  , partitionByMarkers '#' '*' "abc*def" == ("abc","def")+  , partitionByMarkers '#' '*'  "abcdef" == ("abcdef","")+  , partitionByMarkers '#' '*' "#abcdef" == ("abcdef","")+  , partitionByMarkers '#' '*' "abc#def" == ("abcdef","")+  , partitionByMarkers '#' '*' "*ab#cd" == ("cd","ab")+  , partitionByMarkers '#' '*' "abc#def*ghi*jkl#mno*pqr#stu" == ("abcdefmnostu","ghijklpqr")+  , partitionByMarkers '#' '*' "#foreground*background#foreground" == ("foregroundforeground","background")++  , holds n $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys+                    ==> strictlyOrdered (xs +++ ys :: [Int])+  , holds n $ \xs ys -> xs +++ ys == ys +++ (xs :: [Int])+  , holds n $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys+                    ==> xs +++ ys == nubSort (xs ++ ys :: [Int])++  , holds n $ nubSort === nub . sort -:> [int]++  , halve []             == ([],[]::[Int])+  , halve [1::Int]       == ([],[1])+  , halve [1,2::Int]     == ([1],[2])+  , halve [1,2,3::Int]   == ([1],[2,3])+  , halve [1,2,3,4::Int] == ([1,2],[3,4])++  , holds n $ \n xss -> 0 <  n && n <  length xss ==> xss ! n == (xss !! n :: [Int])+  , holds n $ \n xss -> 0 >= n && n >= length xss ==> xss ! n == ([] :: [Int])+  ]
− tests/Test.hs
@@ -1,237 +0,0 @@--- | This module defines utilities to test 'Speculate' itself.------ It should never be exported in a cabal package, and should not be included--- in Haddock documentation.  Hence the weird name, simply "Test".------ This module exports a Listable Expr instance, that does not, by any means,--- list all possible expressions.  But instead, list expressions based on the--- names exported by this module.-module Test-  (-  -- * Module exports-    module Test.LeanCheck-  , module Test.LeanCheck.Utils-  , module Test.Speculate-  , module Data.Express.Fixtures-  , module Test.ListableExpr--  -- * Test reporting-  , reportTests-  , getMaxTestsFromArgs-  , mainTest-  , printLines--  -- * Test types-  , listThyInefficient--  , Thyght (..)-  , Equation (..)--  -- * Test fixtures-  , foo, goo--  -- * Enumerate expressions-  , expressionsT-  )-where--import Test.LeanCheck-import Test.LeanCheck.Utils hiding (comparison)--import Data.Express.Fixtures--import System.Environment (getArgs)-import System.Exit (exitFailure)-import Data.List (elemIndices)--import Test.Speculate hiding (getArgs)-import Test.Speculate.Reason-import Test.Speculate.Reason.Order--import Data.List (sort)--import Test.Speculate.Utils--import Test.ListableExpr----- test reporting ----reportTests :: [Bool] -> IO ()-reportTests tests  =  case elemIndices False tests of-  [] -> putStrLn "+++ Tests passed!"-  is -> putStrLn ("*** Failed tests:" ++ show is) >> exitFailure--getMaxTestsFromArgs :: Int -> IO Int-getMaxTestsFromArgs n = do-  as <- getArgs-  return $ case as of-             (s:_) -> read s-             _     -> n--mainTest :: (Int -> [Bool]) -> Int -> IO ()-mainTest tests n' = do-  n <- getMaxTestsFromArgs n'-  reportTests (tests n)--printLines :: Show a => [a] -> IO ()-printLines = putStrLn . unlines . map show----- test fixtures ----foo :: Expr -> Expr-foo = (value "f" (undefined :: Int -> Int) :$)--goo :: Expr -> Expr-goo = (value "g" (undefined :: Int -> Int) :$)----- test types ----data Rule = Rule Expr Expr deriving (Show, Eq, Ord)-data Equation = Equation Expr Expr deriving (Show, Eq, Ord)-newtype RuleSet = RuleSet [(Expr,Expr)] deriving Show-newtype EquationSet = EquationSet [(Expr,Expr)] deriving Show-newtype Thyght = Thyght { unThyght :: Thy } deriving Show----- Listable instances ------ beware: enumerating beyond 600 values will  make this very slow as it is--- very hard to satisfy canonicalEqn and ->-.  In practice, this should not be a--- problem as we enumerate far less than that when enerating 'Thy's.-instance Listable Rule where-  tiers = (`ofWeight` 0)-        . filterT (\(Rule e1 e2) -> canonicalRule (e1,e2) && e1 ->- e2)-        . mapT (uncurry Rule . orientRule)-        . filterT (uncurry (<))-        . mapT unSameTypeE-        $ tiers-    where-    (->-) = canReduceTo emptyThy-    orientRule (e1,e2) | e1 ->- e2 = (e1,e2)-                       | otherwise = (e2,e1)--instance Listable Equation where-  tiers = (`ofWeight` 0)-        . mapT (uncurry Equation)-        . filterT (canonicalEqn emptyThy)-        . mapT orientEqn-        . filterT (uncurry (<=))-        . mapT unSameTypeE-        $ tiers-    where-    orientEqn (e1,e2) | e1 `compare` e2 == LT = (e2,e1)-                      | otherwise             = (e1,e2)--instance Listable RuleSet where-  tiers = setCons (RuleSet . map unRule) `ofWeight` 0-    where-    unRule (Rule e1 e2) = (e1,e2)--instance Listable EquationSet where-  tiers = setCons (EquationSet . map unEquation) `ofWeight` 0-    where-    unEquation (Equation e1 e2) = (e1,e2)--instance Listable Thy where-  tiers = concatMapT expandCanReduceTo-        $ concatMapT expandClosureLimit-        $ concatMapT expandKeepE-        $ cons2 (\(RuleSet rs) (EquationSet eqs)-                   -> emptyThy { rules     = sort rs-                               , equations = sort eqs })--instance Listable Thyght where-  tiers = mapT Thyght-        $ concatMapT expandCanReduceTo-        $ concatMapT expandClosureLimit-        $ mapT defaultKeep-        $ cons2 (\(RuleSet rs) (EquationSet eqs)-                   -> emptyThy { rules     = sort rs-                               , equations = sort eqs })--expandKeepE :: Thy -> [[Thy]]-expandKeepE thy = cons0 thy-               \/ cons0 thy {keepE = keepUpToLength (maxLen + 0)} `ofWeight` 1-               \/ cons0 thy {keepE = keepUpToLength (maxLen + 1)} `ofWeight` 2-               \/ cons0 thy {keepE = keepUpToLength (maxLen + 2)} `ofWeight` 4-               \/ cons0 thy {keepE = keepUpToLength (maxLen + 3)} `ofWeight` 6-               \/ cons0 thy {keepE = keepUpToLength (maxLen + 4)} `ofWeight` 8-  where-  maxLen = maximum . (0:) . map size . catPairs $ equations thy ++ rules thy--expandClosureLimit :: Thy -> [[Thy]]-expandClosureLimit thy = cons0 thy {closureLimit = 3}-                      \/ cons0 thy {closureLimit = 0} `ofWeight` 1-                      \/ cons0 thy {closureLimit = 2} `ofWeight` 2-                      \/ cons0 thy {closureLimit = 1} `ofWeight` 3---- TODO: make Listable Thy enumeration complete w.r.t: canReduceTo--- for a complete version, Listable Rule will have to be transformed on a--- higher order function that take canReduceTo.  (harder to maintain)-expandCanReduceTo :: Thy -> [[Thy]]-expandCanReduceTo thy = cons0 thy-                     \/ if all (uncurry (|>|)) (rules thy)-                          then cons0 thy {canReduceTo = (|>|)} `ofWeight` 1-                          else []--- FIXME: KBO is broken ATM:---                   \/ if all (uncurry ( >|)) (rules thy)---                        then cons0 thy {canReduceTo = ( >|)} `ofWeight` 2---                        else []--listThyInefficient :: [Thy]-listThyInefficient = concat-                   . concatMapT expandCanReduceTo-                   . concatMapT expandClosureLimit-                   . concatMapT expandKeepE-                   $ cons2 (\(SameTypedPairsE rs) (SameTypedPairsE eqs)-                              -> emptyThy { rules     = sort rs-                                          , equations = sort eqs-                                          }) `suchThat` okThy---- Quick and Dirty!-instance Show Thy where-  show Thy { rules = rs-           , equations = eqs-           , canReduceTo = (->-)-           , closureLimit = cl-           , keepE = keep-           }-    = "Thy { rules = "-   ++ drop 14 (indent 14 . listLines $ map showEquation rs)-   ++ "    , equations = "-   ++ drop 18 (indent 18 . listLines $ map showEquation eqs)-   ++ "    , canReduceTo = " ++ showCanReduceTo (->-) ++ "\n"-   ++ "    , closureLimit = " ++ show cl ++ "\n"-   ++ "    , keepE = " ++ showKeepE keep ++ "\n"-   ++ "    }"-    where-    showEquation (e1,e2) = showExpr e1 ++ " == " ++ showExpr e2-    listLines [] = "[]"-    listLines ss = '[':(tail . unlines $ map (", " ++) ss) ++ "]"-    showCanReduceTo (->-) | holds 1000 $ (->-) ==== (|>|) = "(|>|)"-                          | holds 1000 $ (->-) ==== ( >|) =  "(>|)"-                          | holds 1000 $ (->-) ==== (|> ) = "(|>)"-                          | otherwise = "(??)"-    showKeepE keep | holds 1000 $ keep === const True = "const True"-                   | holds 1000 $ keep === keepUpToLength 0 = "keepUpToLength 0"-                   | holds 1000 $ keep === keepUpToLength 1 = "keepUpToLength 1"-                   | holds 1000 $ keep === keepUpToLength 2 = "keepUpToLength 2"-                   | holds 1000 $ keep === keepUpToLength 3 = "keepUpToLength 3"-                   | holds 1000 $ keep === keepUpToLength 4 = "keepUpToLength 4"-                   | holds 1000 $ keep === keepUpToLength 5 = "keepUpToLength 5"-                   | holds 1000 $ keep === keepUpToLength 6 = "keepUpToLength 6"-                   | holds 1000 $ keep === keepUpToLength 7 = "keepUpToLength 7"-                   | holds 1000 $ keep === keepUpToLength 8 = "keepUpToLength 8"-                   | holds 1000 $ keep === keepUpToLength 9 = "keepUpToLength 9"-                   | otherwise = "\\e -> ??"--expressionsT :: [Expr] -> [[Expr]]-expressionsT ds = [ds] \/ productMaybeWith ($$) es es `addWeight` 1-  where-  es = expressionsT ds--- TODO: maybe use expressionsT as the main function to generate Exprs.--- By using it, I speculate a 20% increase in runtime.  But the code will--- certainly be smaller and easier to maintain.
− tests/Test/ListableExpr.hs
@@ -1,272 +0,0 @@-module Test.ListableExpr-  (-  -- * The Expr type-    Expr--  -- * Expressions of a type-  , IntE (..)-  , BoolE (..)-  , IntsE (..)-  , CharE (..)--  , IntE0 (..)-  , IntEV (..)-  , BoolE0 (..)-  , BoolEV (..)-  , IntsE0 (..)-  , IntsEV (..)-  , CharE0 (..)-  , CharEV (..)--  -- ** Functional values-  , IntToIntE (..)-  , IntToIntToIntE (..)-  , BoolToBoolE (..)-  , BoolToBoolToBoolE (..)--  , SameTypeE (..)-  , unSameTypeE-  , SameTypedPairsE (..)--  -- * Terminal expressions-  , E0 (..)-  , EV (..)--  -- * Ill typed expressions-  , Ill (..)-  )-where---- TODO: StringE--import Test.LeanCheck-import Test.LeanCheck.Function.ShowFunction-import Data.Express.Fixtures-import Data.Function (on)---- | Terminal constants.-newtype E0  =  E0 { unE0 :: Expr }---- | Variables.-newtype EV  =  EV { unEV :: Expr }---- | Expression of 'Int' type.-newtype IntE  =  IntE { unIntE :: Expr }---- | Constant terminal value of 'Int' type.-newtype IntE0  =  IntE0 { unIntE0 :: Expr }---- | Varialbe of 'Int' type.-newtype IntEV  =  IntEV { unIntEV :: Expr }---- | Functions from Int to Int-newtype IntToIntE  =  IntToIntE { unIntToIntE :: Expr }-newtype IntToIntToIntE  =  IntToIntToIntE { unIntToIntToIntE :: Expr }---- | Expression of 'Bool' type.-newtype BoolE  =  BoolE { unBoolE :: Expr }---- | Constant terminal value of 'Bool' type.-newtype BoolE0  =  BoolE0 { unBoolE0 :: Expr }---- | Varialbe of 'Bool' type.-newtype BoolEV  =  BoolEV { unBoolEV :: Expr }---- | Functions from Bool to Bool-newtype BoolToBoolE  =  BoolToBoolE { unBoolToBoolE :: Expr }-newtype BoolToBoolToBoolE  =  BoolToBoolToBoolE { unBoolToBoolToBoolE :: Expr }--newtype CharE  =  CharE { unCharE :: Expr }--newtype CharE0  =  CharE0 { unCharE0 :: Expr }--newtype CharEV  =  CharEV { unCharEV :: Expr }--data SameTypeE  =  SameTypeE Expr Expr--unSameTypeE :: SameTypeE -> (Expr,Expr)-unSameTypeE (SameTypeE e1 e2)  =  (e1,e2)--data SameTypedPairsE  =  SameTypedPairsE { unSameTypedPairsE :: [(Expr,Expr)] }---- | Ill typed expressions.-newtype Ill  =  Ill { unIll :: Expr }---instance Show E0  where  show (E0 e) = show e-instance Show EV  where  show (EV e) = show e--instance Show IntE  where  show (IntE e) = show e--instance Show IntE0  where  show (IntE0 e) = show e-instance Show IntEV  where  show (IntEV e) = show e--instance Show IntToIntE  where  show (IntToIntE e) = show e-instance Show IntToIntToIntE  where  show (IntToIntToIntE e) = show e--instance Show BoolE  where  show (BoolE e) = show e--instance Show BoolE0  where  show (BoolE0 e) = show e-instance Show BoolEV  where  show (BoolEV e) = show e--instance Show BoolToBoolE  where  show (BoolToBoolE e) = show e-instance Show BoolToBoolToBoolE  where  show (BoolToBoolToBoolE e) = show e--instance Show IntsE  where  show (IntsE e) = show e--instance Show IntsE0  where  show (IntsE0 e) = show e-instance Show IntsEV  where  show (IntsEV e) = show e--instance Show CharE  where  show (CharE e) = show e--instance Show CharE0  where  show (CharE0 e) = show e-instance Show CharEV  where  show (CharEV e) = show e--instance Show SameTypeE  where  show (SameTypeE e1 e2) = show (e1,e2)--instance Show SameTypedPairsE  where  show (SameTypedPairsE ees)  =  show ees---- | Expression of 'Ints' type.-newtype IntsE  =  IntsE { unIntsE :: Expr }---- | Constant terminal value of 'Ints' type.-newtype IntsE0  =  IntsE0 { unIntsE0 :: Expr }---- | Varialbe of 'Ints' type.-newtype IntsEV  =  IntsEV { unIntsEV :: Expr }--instance Show Ill where  show (Ill e) = show e--instance Listable IntE  where-  tiers  =  mapT IntE-         $  cons0 i_-         \/ cons1 unIntEV-         \/ cons1 unIntE0-         \/ cons2 (\(IntToIntE f) (IntE xx) -> f :$ xx)-         \/ cons1 (head' . unIntsE) `ofWeight` 2-         \/ cons1 (ord' . unCharE) `ofWeight` 2--instance Listable IntE0 where-  tiers  =  (IntE0 . val) `mapT` (tiers :: [[Int]])--instance Listable IntEV where-  list  =  map IntEV $ listVars "x" (undefined :: Int)--instance Listable IntToIntE where-  tiers  =  mapT IntToIntE-         $  cons0 idE-         \/ cons0 negateE `addWeight` 1-         \/ cons0 absE    `addWeight` 1-         \/ cons2 (\(IntToIntToIntE ef) (IntE ex) -> ef :$ ex)-         \/ toTiers (listVars "f" (undefined :: Int -> Int)) `addWeight` 2--instance Listable IntToIntToIntE where-  list  =  map IntToIntToIntE [plus, times]--instance Listable IntsE  where-  tiers  =  mapT IntsE-         $  cons0 is_-         \/ cons1 unIntsEV-         \/ cons1 unIntsE0-         \/ cons2 (\(IntE ex) (IntsE exs) -> ex -:- exs)-         \/ cons1 (tail' . unIntsE) `ofWeight` 2-         \/ cons2 (\(IntsE exs) (IntsE eys) -> exs -++- eys) `ofWeight` 2-         \/ cons1 (\(IntsE exs) -> sort' exs) `ofWeight` 3-         \/ cons2 (\(IntE ex) (IntsE exs) -> insert' ex exs) `ofWeight` 3--instance Listable IntsE0 where-  tiers  =  (IntsE0 . val) `mapT` (tiers :: [[ [Int] ]])--instance Listable IntsEV where-  list  =  map IntsEV $ listVars "xs" (undefined :: [Int])--instance Listable BoolE  where-  tiers  =  mapT BoolE-         $  cons0 b_-         \/ cons1 unBoolEV-         \/ cons1 unBoolE0-         \/ cons2 (\(BoolToBoolE ef) (BoolE ep) -> ef :$ ep)-         \/ cons2 ((-==-) `on` unIntE)  `addWeight` 2-         \/ cons2 ((-==-) `on` unBoolE) `addWeight` 2-         \/ cons2 ((-<=-) `on` unIntE)  `addWeight` 3-         \/ cons2 ((-<=-) `on` unBoolE) `addWeight` 3-         \/ cons2 ((-<-)  `on` unIntE)  `addWeight` 4-         \/ cons2 ((-<-)  `on` unBoolE) `addWeight` 4-         \/ cons2 ((-/=-) `on` unIntE)  `addWeight` 5-         \/ cons2 ((-/=-) `on` unBoolE) `addWeight` 5-         \/ cons1 (odd'  . unIntE) `addWeight` 2-         \/ cons1 (even' . unIntE) `addWeight` 2-         \/ cons2 (\(IntE ex) (IntsE exs) -> elem' ex exs) `addWeight` 2--instance Listable BoolE0 where-  tiers  =  (BoolE0 . val) `mapT` (tiers :: [[Bool]])--instance Listable BoolEV where-  list  =  map BoolEV $ listVars "p" (undefined :: Bool)--instance Listable BoolToBoolE where-  tiers  =  mapT BoolToBoolE-         $  cons0 notE-         \/ cons2 (\(BoolToBoolToBoolE ef) (BoolE ex) -> ef :$ ex)--instance Listable BoolToBoolToBoolE where-  list  =  map BoolToBoolToBoolE [orE, andE, implies]--instance Listable CharE where-  tiers  =  mapT CharE $ cons0 c_-                      \/ cons1 unCharEV-                      \/ cons1 unCharE0--instance Listable CharEV where-  list  =  map CharEV $ listVars "c" (undefined :: Char)--instance Listable CharE0 where-  tiers  =  (CharE0 . val) `mapT` (tiers :: [[Char]])--instance Listable SameTypeE where-  tiers = cons1 (\(IntE  e1, IntE  e2) -> SameTypeE e1 e2) `ofWeight` 0-       \/ cons1 (\(BoolE e1, BoolE e2) -> SameTypeE e1 e2) `ofWeight` 1-       \/ cons1 (\(IntsE e1, IntsE e2) -> SameTypeE e1 e2) `ofWeight` 1-       \/ cons1 (\(CharE e1, CharE e2) -> SameTypeE e1 e2) `ofWeight` 2-       \/ cons1 (\(IntToIntE e1, IntToIntE e2)     -> SameTypeE e1 e2) `ofWeight` 2-       \/ cons1 (\(BoolToBoolE e1, BoolToBoolE e2) -> SameTypeE e1 e2) `ofWeight` 2-       \/ cons1 (\(BoolToBoolToBoolE e1, BoolToBoolToBoolE e2) -> SameTypeE e1 e2) `ofWeight` 2-       \/ cons1 (\(IntToIntToIntE e1, IntToIntToIntE e2)       -> SameTypeE e1 e2) `ofWeight` 2--instance Listable SameTypedPairsE where-  tiers = cons1 (SameTypedPairsE . map unSameTypeE) `ofWeight` 0--instance Listable E0 where-  tiers  =  mapT E0-         $  cons1 unIntE0  `ofWeight` 0-         \/ cons1 unBoolE0 `ofWeight` 1-         \/ cons1 unIntsE0 `ofWeight` 1--instance Listable EV where-  tiers  =  mapT EV-         $  cons1 unIntEV  `ofWeight` 0-         \/ cons1 unBoolEV `ofWeight` 1-         \/ cons1 unIntsEV `ofWeight` 1---instance Listable Expr where-  tiers  =  reset (cons1 unIntE)-         \/ cons1 unBoolE-         \/ cons1 unCharE-         \/ cons1 unIntsE-         \/ cons1 unIntToIntE         `addWeight` 1-         \/ cons1 unIntToIntToIntE    `addWeight` 1-         \/ cons1 unBoolToBoolE       `addWeight` 2-         \/ cons1 unBoolToBoolToBoolE `addWeight` 2----- | This listable instance only produces Ill typed expressions-instance Listable Ill where-  tiers  =  mapT Ill-         $  cons2 (\(IntE ef) (IntE ex) -> ef :$ ex) `ofWeight` 0-         \/ cons2 (\(IntToIntE ef) (IntToIntE ex) -> ef :$ ex)-         \/ cons2 (\(Ill ef) ex -> ef :$ ex)-         \/ cons2 (\ef (Ill ex)-> ef :$ ex)---instance ShowFunction Expr where bindtiers  =  bindtiersShow
− tests/benchmark
@@ -1,74 +0,0 @@-#!/bin/bash-top=`dirname $0`/..-eg=$top/eg-model=$top/tests/model--case "$1" in-	-*) sz="$1"-	    shift-		;;-esac--test-model() {-	$1 $sz | diff -rud $model/$2$sz.out - || exit 1-}--update-test-model() {-	$1 $sz > $model/$2$sz.out-}--tym() {-	/usr/bin/time -f%e "$@"-}--spc() {-	/usr/bin/time -f%M "$@"-}--mean() {-	sum="`echo -n $* | sed -e "s/ / + /g"`"-	mean="`echo "scale = 3; ($sum) / $#" | bc`"-	printf "%3.3f\n" $mean-}-export -f mean--div1024() {-	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"-}-export -f div1024--benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--memory-benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		spc $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean    "$@"' mean |-	       xargs bash -c 'div1024 "$@"' div1024-}--benchmark-cmp() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '-	echo -n ' '-	for run in {1..1}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--find $* | sed -e "s/^bench/     /;s/^eg/  /" |-sort -b | sed -e "s/^     /bench/;s/^  /eg/" |-while read e-do-	`basename $0` $top/$e `basename $e`-done
− tests/benchmark-cmp
@@ -1,74 +0,0 @@-#!/bin/bash-top=`dirname $0`/..-eg=$top/eg-model=$top/tests/model--case "$1" in-	-*) sz="$1"-	    shift-		;;-esac--test-model() {-	$1 $sz | diff -rud $model/$2$sz.out - || exit 1-}--update-test-model() {-	$1 $sz > $model/$2$sz.out-}--tym() {-	/usr/bin/time -f%e "$@"-}--spc() {-	/usr/bin/time -f%M "$@"-}--mean() {-	sum="`echo -n $* | sed -e "s/ / + /g"`"-	mean="`echo "scale = 3; ($sum) / $#" | bc`"-	printf "%3.3f\n" $mean-}-export -f mean--div1024() {-	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"-}-export -f div1024--benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--memory-benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		spc $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean    "$@"' mean |-	       xargs bash -c 'div1024 "$@"' div1024-}--benchmark-cmp() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '-	echo -n ' '-	for run in {1..1}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--find $* | sed -e "s/^bench/     /;s/^eg/  /" |-sort -b | sed -e "s/^     /bench/;s/^  /eg/" |-while read e-do-	`basename $0` $top/$e `basename $e`-done
− tests/benchmark-save
@@ -1,23 +0,0 @@-#!/bin/bash-top=`dirname $0`-get-ghc-v() {-	ghc --version | sed -e "s/.* version/GHC/"-}-get-express-v() {-	ghc-pkg list express 2>/dev/null |-	grep " express-" |-	sed -e "s/^ *//" |-	tail -1-}-get-leancheck-v() {-	ghc-pkg list leancheck 2>/dev/null |-	grep " leancheck-" |-	sed -e "s/^ *//" |-	tail -1-}-(-	get-ghc-v-	get-express-v-	get-leancheck-v-	$top/benchmark "$@"-) | tee bench/runtime-$HOSTNAME
− tests/memory-benchmark
@@ -1,74 +0,0 @@-#!/bin/bash-top=`dirname $0`/..-eg=$top/eg-model=$top/tests/model--case "$1" in-	-*) sz="$1"-	    shift-		;;-esac--test-model() {-	$1 $sz | diff -rud $model/$2$sz.out - || exit 1-}--update-test-model() {-	$1 $sz > $model/$2$sz.out-}--tym() {-	/usr/bin/time -f%e "$@"-}--spc() {-	/usr/bin/time -f%M "$@"-}--mean() {-	sum="`echo -n $* | sed -e "s/ / + /g"`"-	mean="`echo "scale = 3; ($sum) / $#" | bc`"-	printf "%3.3f\n" $mean-}-export -f mean--div1024() {-	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"-}-export -f div1024--benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--memory-benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		spc $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean    "$@"' mean |-	       xargs bash -c 'div1024 "$@"' div1024-}--benchmark-cmp() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '-	echo -n ' '-	for run in {1..1}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--find $* | sed -e "s/^bench/     /;s/^eg/  /" |-sort -b | sed -e "s/^     /bench/;s/^  /eg/" |-while read e-do-	`basename $0` $top/$e `basename $e`-done
− tests/model/algebraic-graphs-s4.out
@@ -1,51 +0,0 @@-max expr size  =    4-max  #-tests   = 1080-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool  (holes: Bool)-_ :: Int  (holes: Int)-_ :: Nat3  (holes: Nat3)-_ :: Graph Nat3  (holes: Graph Nat3)-0 :: Nat3-0 :: Int-True :: Bool-empty :: Graph Nat3-vertex :: Nat3 -> Graph Nat3-(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-edge :: Nat3 -> Nat3 -> Graph Nat3-length :: Graph Nat3 -> Int-size :: Graph Nat3 -> Int--length (vertex i) == length (vertex j)-  size (vertex i) == length (vertex 0)-length (edge i j) == length (edge k i')-length (edge i j) == size (edge k i')-   length (x * y) == length (x + y)-     size (x * y) == size (x + y)-            x + x == x-        x + empty == x-        x * empty == x-        empty * x == x-            x + y == y + x-      overlay x y == x + y-      connect x y == x * y--                0 <= length x-                0 <= size x-         length x <= size x-       size empty <= size x-         length x <= length (x + y)-           size x <= size (x + y)-         length x <= size (y + x)-length (edge i i) <= size x-            empty <= x-                x <= x + y-                x <= x * y-                x <= y * x-         vertex i <= edge i j-         vertex i <= edge j i-            x + y <= x * y-
− tests/model/algebraic-graphs-s7.out
@@ -1,64 +0,0 @@-max expr size  =    7-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   = 1080-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool  (holes: Bool)-_ :: Int  (holes: Int)-_ :: Nat3  (holes: Nat3)-_ :: Graph Nat3  (holes: Graph Nat3)-0 :: Nat3-0 :: Int-True :: Bool-empty :: Graph Nat3-vertex :: Nat3 -> Graph Nat3-(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-edge :: Nat3 -> Nat3 -> Graph Nat3-length :: Graph Nat3 -> Int-size :: Graph Nat3 -> Int--    length (vertex i) == length (vertex j)-      size (vertex i) == length (vertex 0)-       length (x * y) == length (x + y)-         size (x * y) == size (x + y)-length (x + vertex i) == length (x + vertex j)-  size (x + vertex i) == size (x + vertex j)-   length (x * y + z) == length (x + (y + z))-     size (x * y + z) == size (x + (y + z))-                x + x == x-            x + empty == x-            x * empty == x-            empty * x == x-                x + y == y + x-          overlay x y == x + y-          connect x y == x * y-            x + x * y == x * y-            x + y * x == y * x-             edge i j == vertex i * vertex j-          (x + y) + z == x + (y + z)-          (x * y) * z == x * (y * z)-      x + y * (x * z) == y * (x * z)-      x + y * (z * x) == y * (z * x)-          x * (y + z) == x * y + x * z-          (x + y) * z == x * z + y * z-          x * (x * y) == x * x + x * y-          x * (y * y) == x * y + y * y-    x * (y * (x * z)) == x * (y * x) + x * (y * z)--         0 <= length x-         0 <= size x-  length x <= size x-size empty <= size x-         x <= size (y + z)-  length x <= length (edge i i)-  length x <= length (x + y)-     empty <= x-         x <= x + y-         x <= x * y-         x <= y * x-     x + y <= x * y-
− tests/model/algebraic-graphs.out
@@ -1,58 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   = 1080-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool  (holes: Bool)-_ :: Int  (holes: Int)-_ :: Nat3  (holes: Nat3)-_ :: Graph Nat3  (holes: Graph Nat3)-0 :: Nat3-0 :: Int-True :: Bool-empty :: Graph Nat3-vertex :: Nat3 -> Graph Nat3-(+) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-(*) :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-overlay :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-connect :: Graph Nat3 -> Graph Nat3 -> Graph Nat3-edge :: Nat3 -> Nat3 -> Graph Nat3-length :: Graph Nat3 -> Int-size :: Graph Nat3 -> Int--    length (vertex i) == length (vertex j)-      size (vertex i) == length (vertex 0)-       length (x * y) == length (x + y)-         size (x * y) == size (x + y)-length (x + vertex i) == length (x + vertex j)-  size (x + vertex i) == size (x + vertex j)-                x + x == x-            x + empty == x-            x * empty == x-            empty * x == x-                x + y == y + x-          overlay x y == x + y-          connect x y == x * y-            x + x * y == x * y-            x + y * x == y * x-             edge i j == vertex i * vertex j-          (x + y) + z == x + (y + z)-          (x * y) * z == x * (y * z)-          x * (x * y) == x * (x + y)-          (x + y) * x == y * (x * x)--         0 <= length x-         0 <= size x-  length x <= size x-size empty <= size x-  length x <= length (x + y)-    size x <= size (x + y)-  length x <= size (y + x)-size empty <= length (edge i i)-     empty <= x-         x <= x + y-         x <= x * y-         x <= y * x-     x + y <= x * y-
− tests/model/arith-c-s4.out
@@ -1,183 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--_ :: Int-0 :: Int-1 :: Int-_ + _ :: Int-_ + 1 :: Int-1 + 1 :: Int-_ * _ :: Int-_ + (_ + _) :: Int-_ + (_ + 1) :: Int-_ + (1 + 1) :: Int-_ + _ * _ :: Int-1 + (1 + 1) :: Int-1 + _ * _ :: Int-_ * (_ + _) :: Int-_ * (_ + 1) :: Int-_ * (_ * _) :: Int--x :: Int-0 :: Int-1 :: Int-x + x :: Int-x + 1 :: Int-1 + 1 :: Int-x * x :: Int-x + (x + x) :: Int-x + (x + 1) :: Int-x + (1 + 1) :: Int-x + x * x :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-x * (x + x) :: Int-x * (x * x) :: Int--x :: Int-y :: Int-0 :: Int-1 :: Int-x + x :: Int-x + y :: Int-y + y :: Int-x + 1 :: Int-y + 1 :: Int-1 + 1 :: Int-x * x :: Int-x * y :: Int-y * y :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (y + y) :: Int-y + (y + y) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-y + (y + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-x + x * x :: Int-x + x * y :: Int-x + y * y :: Int-y + x * x :: Int-y + x * y :: Int-y + y * y :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-1 + x * y :: Int-1 + y * y :: Int-x * (x + x) :: Int-x * (x + y) :: Int-x * (y + y) :: Int-y * (x + y) :: Int-y * (y + y) :: Int-x * (x * x) :: Int-x * (x * y) :: Int-x * (y * y) :: Int-y * (y * y) :: Int--x :: Int-y :: Int-z :: Int-0 :: Int-1 :: Int-x + x :: Int-x + y :: Int-x + z :: Int-y + y :: Int-y + z :: Int-z + z :: Int-x + 1 :: Int-y + 1 :: Int-z + 1 :: Int-1 + 1 :: Int-x * x :: Int-x * y :: Int-x * z :: Int-y * y :: Int-y * z :: Int-z * z :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (x + z) :: Int-x + (y + y) :: Int-x + (y + z) :: Int-x + (z + z) :: Int-y + (y + y) :: Int-y + (y + z) :: Int-y + (z + z) :: Int-z + (z + z) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-x + (z + 1) :: Int-y + (y + 1) :: Int-y + (z + 1) :: Int-z + (z + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-z + (1 + 1) :: Int-x + x * x :: Int-x + x * y :: Int-x + x * z :: Int-x + y * y :: Int-x + y * z :: Int-x + z * z :: Int-y + x * x :: Int-y + x * y :: Int-y + x * z :: Int-y + y * y :: Int-y + y * z :: Int-y + z * z :: Int-z + x * x :: Int-z + x * y :: Int-z + x * z :: Int-z + y * y :: Int-z + y * z :: Int-z + z * z :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-1 + x * y :: Int-1 + x * z :: Int-1 + y * y :: Int-1 + y * z :: Int-1 + z * z :: Int-x * (x + x) :: Int-x * (x + y) :: Int-x * (x + z) :: Int-x * (y + y) :: Int-x * (y + z) :: Int-x * (z + z) :: Int-y * (x + y) :: Int-y * (x + z) :: Int-y * (y + y) :: Int-y * (y + z) :: Int-y * (z + z) :: Int-z * (x + y) :: Int-z * (x + z) :: Int-z * (y + z) :: Int-z * (z + z) :: Int-x * (x * x) :: Int-x * (x * y) :: Int-x * (x * z) :: Int-x * (y * y) :: Int-x * (y * z) :: Int-x * (z * z) :: Int-y * (y * y) :: Int-y * (y * z) :: Int-y * (z * z) :: Int-z * (z * z) :: Int--Number of Eq schema classes: 16-Number of Eq 1-var classes: 15-Number of Eq 2-var classes: 41-Number of Eq 3-var classes: 90
− tests/model/arith-c.out
@@ -1,183 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--_ :: Int-0 :: Int-1 :: Int-_ + _ :: Int-_ + 1 :: Int-1 + 1 :: Int-_ * _ :: Int-_ + (_ + _) :: Int-_ + (_ + 1) :: Int-_ + (1 + 1) :: Int-_ + _ * _ :: Int-1 + (1 + 1) :: Int-1 + _ * _ :: Int-_ * (_ + _) :: Int-_ * (_ + 1) :: Int-_ * (_ * _) :: Int--x :: Int-0 :: Int-1 :: Int-x + x :: Int-x + 1 :: Int-1 + 1 :: Int-x * x :: Int-x + (x + x) :: Int-x + (x + 1) :: Int-x + (1 + 1) :: Int-x + x * x :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-x * (x + x) :: Int-x * (x * x) :: Int--x :: Int-y :: Int-0 :: Int-1 :: Int-x + x :: Int-x + y :: Int-y + y :: Int-x + 1 :: Int-y + 1 :: Int-1 + 1 :: Int-x * x :: Int-x * y :: Int-y * y :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (y + y) :: Int-y + (y + y) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-y + (y + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-x + x * x :: Int-x + x * y :: Int-x + y * y :: Int-y + x * x :: Int-y + x * y :: Int-y + y * y :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-1 + x * y :: Int-1 + y * y :: Int-x * (x + x) :: Int-x * (x + y) :: Int-x * (y + y) :: Int-y * (x + y) :: Int-y * (y + y) :: Int-x * (x * x) :: Int-x * (x * y) :: Int-x * (y * y) :: Int-y * (y * y) :: Int--x :: Int-y :: Int-z :: Int-0 :: Int-1 :: Int-x + x :: Int-x + y :: Int-x + z :: Int-y + y :: Int-y + z :: Int-z + z :: Int-x + 1 :: Int-y + 1 :: Int-z + 1 :: Int-1 + 1 :: Int-x * x :: Int-x * y :: Int-x * z :: Int-y * y :: Int-y * z :: Int-z * z :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (x + z) :: Int-x + (y + y) :: Int-x + (y + z) :: Int-x + (z + z) :: Int-y + (y + y) :: Int-y + (y + z) :: Int-y + (z + z) :: Int-z + (z + z) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-x + (z + 1) :: Int-y + (y + 1) :: Int-y + (z + 1) :: Int-z + (z + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-z + (1 + 1) :: Int-x + x * x :: Int-x + x * y :: Int-x + x * z :: Int-x + y * y :: Int-x + y * z :: Int-x + z * z :: Int-y + x * x :: Int-y + x * y :: Int-y + x * z :: Int-y + y * y :: Int-y + y * z :: Int-y + z * z :: Int-z + x * x :: Int-z + x * y :: Int-z + x * z :: Int-z + y * y :: Int-z + y * z :: Int-z + z * z :: Int-1 + (1 + 1) :: Int-1 + x * x :: Int-1 + x * y :: Int-1 + x * z :: Int-1 + y * y :: Int-1 + y * z :: Int-1 + z * z :: Int-x * (x + x) :: Int-x * (x + y) :: Int-x * (x + z) :: Int-x * (y + y) :: Int-x * (y + z) :: Int-x * (z + z) :: Int-y * (x + y) :: Int-y * (x + z) :: Int-y * (y + y) :: Int-y * (y + z) :: Int-y * (z + z) :: Int-z * (x + y) :: Int-z * (x + z) :: Int-z * (y + z) :: Int-z * (z + z) :: Int-x * (x * x) :: Int-x * (x * y) :: Int-x * (x * z) :: Int-x * (y * y) :: Int-x * (y * z) :: Int-x * (z * z) :: Int-y * (y * y) :: Int-y * (y * z) :: Int-y * (z * z) :: Int-z * (z * z) :: Int--Number of Eq schema classes: 16-Number of Eq 1-var classes: 15-Number of Eq 2-var classes: 41-Number of Eq 3-var classes: 90
− tests/model/arith-negate-abs-s4.out
@@ -1,40 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-abs :: Int -> Int-negate :: Int -> Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--             id x == x-negate (negate x) == x-            x + 0 == x-            x * 1 == x-            x * 0 == 0-      abs (abs x) == abs x-   abs (negate x) == abs x-     x + negate x == 0-            x + y == y + x-            x * y == y * x-      abs (x * x) == x * x-     x * negate y == negate (x * y)--             x <= abs x-             0 <= abs x-             x <= x * x-             x <= x + 1-             0 <= x * x-      negate x <= abs x-negate (abs x) <= x-negate (abs x) <= 0-         abs x <= x * x-negate (abs x) <= negate x-
− tests/model/arith-negate-abs.out
@@ -1,68 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-abs :: Int -> Int-negate :: Int -> Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--             id x == x-negate (negate x) == x-            x + 0 == x-            x * 1 == x-            x * 0 == 0-      abs (abs x) == abs x-   abs (negate x) == abs x-     x + negate x == 0-            x + y == y + x-            x * y == y * x-      abs (x * x) == x * x-     x * negate y == negate (x * y)-  abs (x * abs y) == abs (x * y)-     negate x + y == negate (x + negate y)-    abs x * abs y == abs (x * y)-  abs (x + abs x) == x + abs x-    abs x + abs x == abs (x + x)-  abs (1 + abs x) == 1 + abs x-      (x + y) + z == x + (y + z)-      (x * y) * z == x * (y * z)-      (x + x) * y == x * (y + y)-      x * (y + 1) == x + x * y--             x <= abs x-             0 <= abs x-             x <= x * x-             x <= x + 1-             0 <= x * x-      negate x <= abs x-negate (abs x) <= x-negate (abs x) <= 0-             x <= x + abs y-             x <= abs (x + x)-         abs x <= x * x-negate (x * x) <= x-negate (abs x) <= negate x-             x <= 1 + abs x-             0 <= x + abs x-negate (x * x) <= 0-  x + negate 1 <= x-         abs x <= abs (x + x)-negate (x * x) <= negate x-negate (x + 1) <= negate x-         x + y <= x + abs y-     x * abs x <= x * x-negate (x * x) <= negate (abs x)-     x * abs y <= abs (x * y)-  x + negate y <= x + abs y-     x + abs x <= abs (x + x)-negate (x * x) <= x * abs x-   abs (x + 1) <= 1 + abs x-
− tests/model/arith-s4.out
@@ -1,23 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--x + 0 == x-x * 1 == x-x * 0 == 0-x + y == y + x-x * y == y * x--x <= x * x-x <= x + 1-0 <= x * x-
− tests/model/arith.out
@@ -1,27 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-(+) :: Int -> Int -> Int-(*) :: Int -> Int -> Int--      x + 0 == x-      x * 1 == x-      x * 0 == 0-      x + y == y + x-      x * y == y * x-(x + y) + z == x + (y + z)-(x * y) * z == x * (y * z)-(x + x) * y == x * (y + y)-x * (y + 1) == x + x * y--x <= x * x-x <= x + 1-0 <= x * x-
− tests/model/arithficial-s4.out
@@ -1,26 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-f :: Int -> Int -> Int-g :: Int -> Int -> Int-h :: Int -> Int -> Int-- id x == x-x + 0 == x-g x y == g z x'-f x y == f x z-h x y == h z y-x + y == y + x--x <= g y y-x <= f 0 y-x <= h y 0-
− tests/model/arithficial.out
@@ -1,27 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-f :: Int -> Int -> Int-g :: Int -> Int -> Int-h :: Int -> Int -> Int--       id x == x-      x + 0 == x-      g x y == g z x'-      f x y == f x z-      h x y == h z y-      x + y == y + x-(x + y) + z == x + (y + z)--x <= g y y-x <= f 0 y-x <= h y 0-
− tests/model/binarytree-s4.out
@@ -1,41 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Word2-_ :: BT Word2-_ :: [Word2]-Null :: BT Word2-insert :: Word2 -> BT Word2 -> BT Word2-delete :: Word2 -> BT Word2 -> BT Word2-isIn :: Word2 -> BT Word2 -> Bool-(<=) :: Word2 -> Word2 -> Bool-(/=) :: Word2 -> Word2 -> Bool-ordered :: [Word2] -> Bool-strictlyOrdered :: [Word2] -> Bool-toList :: BT Word2 -> [Word2]-fromList :: [Word2] -> BT Word2-isSearch :: BT Word2 -> Bool-[] :: [Word2]-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Word2 -> Word2 -> Bool-(==) :: BT Word2 -> BT Word2 -> Bool-(==) :: [Word2] -> [Word2] -> Bool--  isIn x Null == False-   (xs == []) == (Null == fromList xs)-delete x Null == Null--         Null <= t-            t <= insert x t-   delete x t <= t-insert x Null <= insert x t--isIn x t ==> insert x t == t-
− tests/model/binarytree.out
@@ -1,55 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Word2-_ :: BT Word2-_ :: [Word2]-Null :: BT Word2-insert :: Word2 -> BT Word2 -> BT Word2-delete :: Word2 -> BT Word2 -> BT Word2-isIn :: Word2 -> BT Word2 -> Bool-(<=) :: Word2 -> Word2 -> Bool-(/=) :: Word2 -> Word2 -> Bool-ordered :: [Word2] -> Bool-strictlyOrdered :: [Word2] -> Bool-toList :: BT Word2 -> [Word2]-fromList :: [Word2] -> BT Word2-isSearch :: BT Word2 -> Bool-[] :: [Word2]-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Word2 -> Word2 -> Bool-(==) :: BT Word2 -> BT Word2 -> Bool-(==) :: [Word2] -> [Word2] -> Bool--           isIn x Null == False-   isIn x (insert x t) == True-   isIn x (delete x t) == False-  (Null == insert x t) == False-            (xs == []) == (Null == fromList xs)-     (t == insert x t) == isIn x t-              (x == y) == isIn x (insert y Null)-     (t == delete x t) == (False == isIn x t)-isIn x (insert y Null) == isIn y (insert x Null)-   (False == (x /= y)) == isIn x (insert y Null)-         delete x Null == Null- insert x (insert x t) == insert x t- delete x (delete x t) == delete x t- insert x (delete x t) == insert x t- delete x (insert x t) == delete x t- insert x (insert y t) == insert y (insert x t)- delete x (delete y t) == delete y (delete x t)--         Null <= t-            t <= insert x t-   delete x t <= t-insert x Null <= insert x t--x /= y ==> delete y (insert x t) == insert x (delete y t)-
− tests/model/binarytree0-s4.out
@@ -1,31 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Word2-_ :: BT Word2-Null :: BT Word2-insert :: Word2 -> BT Word2 -> BT Word2-delete :: Word2 -> BT Word2 -> BT Word2-isIn :: Word2 -> BT Word2 -> Bool-(/=) :: Word2 -> Word2 -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Word2 -> Word2 -> Bool-(==) :: BT Word2 -> BT Word2 -> Bool--  isIn x Null == False-delete x Null == Null--         Null <= t-            t <= insert x t-   delete x t <= t-insert x Null <= insert x t--isIn x t ==> insert x t == t-
− tests/model/binarytree0.out
@@ -1,45 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Word2-_ :: BT Word2-Null :: BT Word2-insert :: Word2 -> BT Word2 -> BT Word2-delete :: Word2 -> BT Word2 -> BT Word2-isIn :: Word2 -> BT Word2 -> Bool-(/=) :: Word2 -> Word2 -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Word2 -> Word2 -> Bool-(==) :: BT Word2 -> BT Word2 -> Bool--           isIn x Null == False-   isIn x (insert x t) == True-   isIn x (delete x t) == False-  (Null == insert x t) == False-     (t == insert x t) == isIn x t-              (x == y) == isIn x (insert y Null)-     (t == delete x t) == (False == isIn x t)-isIn x (insert y Null) == isIn y (insert x Null)-   (False == (x /= y)) == isIn x (insert y Null)-         delete x Null == Null- insert x (insert x t) == insert x t- delete x (delete x t) == delete x t- insert x (delete x t) == insert x t- delete x (insert x t) == delete x t- insert x (insert y t) == insert y (insert x t)- delete x (delete y t) == delete y (delete x t)--         Null <= t-            t <= insert x t-   delete x t <= t-insert x Null <= insert x t--x /= y ==> delete y (insert x t) == insert x (delete y t)-
− tests/model/bool-c-s4.out
@@ -1,124 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-False :: Bool-True :: Bool-not :: Bool -> Bool-(&&) :: Bool -> Bool -> Bool-(||) :: Bool -> Bool -> Bool-(==) :: Bool -> Bool -> Bool---_ :: Bool-False :: Bool-True :: Bool-not _ :: Bool-_ && _ :: Bool-_ || _ :: Bool-_ == _ :: Bool-not (_ && _) :: Bool-not (_ || _) :: Bool-not (_ == _) :: Bool-_ && not _ :: Bool-_ || not _ :: Bool-_ && (_ && _) :: Bool-_ && (_ || _) :: Bool-_ && _ == _ :: Bool-_ || _ && _ :: Bool-_ || (_ || _) :: Bool-_ || _ == _ :: Bool-_ == (_ && _) :: Bool-_ == (_ || _) :: Bool-_ == (_ == _) :: Bool--p :: Bool-False :: Bool-True :: Bool-not p :: Bool--p :: Bool-q :: Bool-False :: Bool-True :: Bool-not p :: Bool-not q :: Bool-p && q :: Bool-p || q :: Bool-p == q :: Bool-not (p && q) :: Bool-not (p || q) :: Bool-not (p == q) :: Bool-p && not q :: Bool-q && not p :: Bool-p || not q :: Bool-q || not p :: Bool--p :: Bool-q :: Bool-r :: Bool-False :: Bool-True :: Bool-not p :: Bool-not q :: Bool-not r :: Bool-p && q :: Bool-p && r :: Bool-q && r :: Bool-p || q :: Bool-p || r :: Bool-q || r :: Bool-p == q :: Bool-p == r :: Bool-q == r :: Bool-not (p && q) :: Bool-not (p && r) :: Bool-not (q && r) :: Bool-not (p || q) :: Bool-not (p || r) :: Bool-not (q || r) :: Bool-not (p == q) :: Bool-not (p == r) :: Bool-not (q == r) :: Bool-p && not q :: Bool-p && not r :: Bool-q && not p :: Bool-q && not r :: Bool-r && not p :: Bool-r && not q :: Bool-p || not q :: Bool-p || not r :: Bool-q || not p :: Bool-q || not r :: Bool-r || not p :: Bool-r || not q :: Bool-p && (q && r) :: Bool-p && (q || r) :: Bool-q && (p || r) :: Bool-r && (p || q) :: Bool-p && q == r :: Bool-q && p == r :: Bool-r && p == q :: Bool-p || q && r :: Bool-q || p && r :: Bool-r || p && q :: Bool-p || (q || r) :: Bool-p || q == r :: Bool-q || p == r :: Bool-r || p == q :: Bool-p == (q && r) :: Bool-q == (p && r) :: Bool-r == (p && q) :: Bool-p == (q || r) :: Bool-q == (p || r) :: Bool-r == (p || q) :: Bool-p == (q == r) :: Bool--Number of Eq schema classes: 21-Number of Eq 1-var classes: 4-Number of Eq 2-var classes: 16-Number of Eq 3-var classes: 59
− tests/model/bool-c.out
@@ -1,124 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-False :: Bool-True :: Bool-not :: Bool -> Bool-(&&) :: Bool -> Bool -> Bool-(||) :: Bool -> Bool -> Bool-(==) :: Bool -> Bool -> Bool---_ :: Bool-False :: Bool-True :: Bool-not _ :: Bool-_ && _ :: Bool-_ || _ :: Bool-_ == _ :: Bool-not (_ && _) :: Bool-not (_ || _) :: Bool-not (_ == _) :: Bool-_ && not _ :: Bool-_ || not _ :: Bool-_ && (_ && _) :: Bool-_ && (_ || _) :: Bool-_ && _ == _ :: Bool-_ || _ && _ :: Bool-_ || (_ || _) :: Bool-_ || _ == _ :: Bool-_ == (_ && _) :: Bool-_ == (_ || _) :: Bool-_ == (_ == _) :: Bool--p :: Bool-False :: Bool-True :: Bool-not p :: Bool--p :: Bool-q :: Bool-False :: Bool-True :: Bool-not p :: Bool-not q :: Bool-p && q :: Bool-p || q :: Bool-p == q :: Bool-not (p && q) :: Bool-not (p || q) :: Bool-not (p == q) :: Bool-p && not q :: Bool-q && not p :: Bool-p || not q :: Bool-q || not p :: Bool--p :: Bool-q :: Bool-r :: Bool-False :: Bool-True :: Bool-not p :: Bool-not q :: Bool-not r :: Bool-p && q :: Bool-p && r :: Bool-q && r :: Bool-p || q :: Bool-p || r :: Bool-q || r :: Bool-p == q :: Bool-p == r :: Bool-q == r :: Bool-not (p && q) :: Bool-not (p && r) :: Bool-not (q && r) :: Bool-not (p || q) :: Bool-not (p || r) :: Bool-not (q || r) :: Bool-not (p == q) :: Bool-not (p == r) :: Bool-not (q == r) :: Bool-p && not q :: Bool-p && not r :: Bool-q && not p :: Bool-q && not r :: Bool-r && not p :: Bool-r && not q :: Bool-p || not q :: Bool-p || not r :: Bool-q || not p :: Bool-q || not r :: Bool-r || not p :: Bool-r || not q :: Bool-p && (q && r) :: Bool-p && (q || r) :: Bool-q && (p || r) :: Bool-r && (p || q) :: Bool-p && q == r :: Bool-q && p == r :: Bool-r && p == q :: Bool-p || q && r :: Bool-q || p && r :: Bool-r || p && q :: Bool-p || (q || r) :: Bool-p || q == r :: Bool-q || p == r :: Bool-r || p == q :: Bool-p == (q && r) :: Bool-q == (p && r) :: Bool-r == (p && q) :: Bool-p == (q || r) :: Bool-q == (p || r) :: Bool-r == (p || q) :: Bool-p == (q == r) :: Bool--Number of Eq schema classes: 21-Number of Eq 1-var classes: 4-Number of Eq 2-var classes: 16-Number of Eq 3-var classes: 59
− tests/model/bool-s4.out
@@ -1,38 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-False :: Bool-True :: Bool-not :: Bool -> Bool-(&&) :: Bool -> Bool -> Bool-(||) :: Bool -> Bool -> Bool-(==) :: Bool -> Bool -> Bool--    (p && p) == p-    (p || p) == p- not (not p) == p- (p && True) == p-(p || False) == p-    (p == p) == True- (p == True) == p-(p && False) == False- (p || True) == True-(p && not p) == False-(p || not p) == True-(p == False) == not p-    (p && q) == (q && p)-    (p || q) == (q || p)-(p == not q) == not (p == q)--     p ==> True- False ==> p-     p ==> p || q-p && q ==> p-p && q ==> p == q--
− tests/model/bool.out
@@ -1,55 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-False :: Bool-True :: Bool-not :: Bool -> Bool-(&&) :: Bool -> Bool -> Bool-(||) :: Bool -> Bool -> Bool-(==) :: Bool -> Bool -> Bool--       (p && p) == p-       (p || p) == p-    not (not p) == p-    (p && True) == p-   (p || False) == p-       (p == p) == True-    (p == True) == p-   (p && False) == False-    (p || True) == True-   (p && not p) == False-   (p == False) == not p-       (p && q) == (q && p)-       (p || q) == (q || p)-(p && (p || q)) == p-  (p || p && q) == p-  (p && p == q) == (p && q)-   (p == not q) == not (p == q)-   not (p || q) == (not p && not q)-   (p || not q) == not (q && not p)-((p && q) && r) == (p && (q && r))-((p || q) || r) == (p || (q || r))-(p == (p && q)) == not (p && not q)-  (p || p == q) == not (q && not p)-(p == (p || q)) == not (q && not p)--           p ==> True-       False ==> p-           p ==> p || q-      p && q ==> p-      p && q ==> p == q-       not p ==> not (p && q)-not (p || q) ==> p == q-not (p == q) ==> p || q-  p && not q ==> q || p-      p == q ==> p || not q-  p && not q ==> not (q && p)-not (p == q) ==> not (p && q)-  p && not q ==> not (p == q)--
− tests/model/colour-s4.out
@@ -1,88 +0,0 @@-max expr size  =    4-  |- on ineqs  =    2-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Colour-_ :: Maybe (Ratio Integer)-_ :: Ratio Integer-(+) :: Colour -> Colour -> Colour-(-) :: Colour -> Colour -> Colour-chroma :: Colour -> Ratio Integer-hue :: Colour -> Maybe (Ratio Integer)-saturation :: Colour -> Ratio Integer-value :: Colour -> Ratio Integer-lightness :: Colour -> Ratio Integer-fromHSV :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour-fromHSL :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour-mix :: Colour -> Colour -> Colour-black :: Colour-white :: Colour-red :: Colour-grey :: Colour-green :: Colour-blue :: Colour-Just :: Ratio Integer -> Maybe (Ratio Integer)-Nothing :: Maybe (Ratio Integer)-0 % 1 :: Ratio Integer-1 % 1 :: Ratio Integer-1 % 2 :: Ratio Integer--Warning: (<=) :: Colour -> Colour -> Bool  is not an ordering (not antisymmetric)-Warning: (==) and (<=) :: Colour -> Colour -> Bool are inconsistent: (x == y) /= (x <= y && y <= x)--                  mix c c == c-                c + black == c-                    c - c == black-                c - black == c-                c + white == white-                black - c == black-                c - white == black-      fromHSV q r (0 % 1) == black-      fromHSL q r (0 % 1) == black-      fromHSL q r (1 % 1) == white-fromHSL q (0 % 1) (1 % 2) == grey-                    c + d == d + c-                  mix c d == mix d c-      fromHSL q (0 % 1) r == fromHSL s (0 % 1) r-      fromHSV q (0 % 1) r == fromHSL s (0 % 1) r-      fromHSV (1 % 1) q r == fromHSV (0 % 1) q r-      fromHSL (1 % 1) q r == fromHSL (0 % 1) q r-fromHSL q (1 % 1) (1 % 2) == fromHSV q (1 % 1) (1 % 1)-        hue (mix c black) == hue c-        hue (mix c white) == hue c-         hue (mix c grey) == hue c-              hue (c + c) == hue (c + grey)-          value (c + red) == 1 % 1-        value (c + green) == 1 % 1-         value (c + blue) == 1 % 1-       chroma (white - c) == chroma c- saturation (mix c black) == saturation c-        chroma (grey - c) == chroma (c + grey)-     chroma (mix c white) == chroma (mix c black)-      chroma (mix c grey) == chroma (mix c black)-     saturation (c + red) == chroma (c + red)-   saturation (c + green) == chroma (c + green)-    saturation (c + blue) == chroma (c + blue)-          value (c - red) == chroma (c - red)-        value (c - green) == chroma (c - green)-         value (c - blue) == chroma (c - blue)-          value (red - c) == chroma (red - c)-        value (green - c) == chroma (green - c)-         value (blue - c) == chroma (blue - c)--       hue c <= Just (1 % 1)-       0 % 1 <= chroma c-       0 % 1 <= saturation c-       0 % 1 <= value c-       0 % 1 <= lightness c-    chroma c <= 1 % 1-saturation c <= 1 % 1-     value c <= 1 % 1- lightness c <= 1 % 1-    chroma c <= saturation c-    chroma c <= value c- lightness c <= value c-
− tests/model/colour.out
@@ -1,88 +0,0 @@-max expr size  =    4-  |- on ineqs  =    2-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Colour-_ :: Maybe (Ratio Integer)-_ :: Ratio Integer-(+) :: Colour -> Colour -> Colour-(-) :: Colour -> Colour -> Colour-chroma :: Colour -> Ratio Integer-hue :: Colour -> Maybe (Ratio Integer)-saturation :: Colour -> Ratio Integer-value :: Colour -> Ratio Integer-lightness :: Colour -> Ratio Integer-fromHSV :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour-fromHSL :: Ratio Integer -> Ratio Integer -> Ratio Integer -> Colour-mix :: Colour -> Colour -> Colour-black :: Colour-white :: Colour-red :: Colour-grey :: Colour-green :: Colour-blue :: Colour-Just :: Ratio Integer -> Maybe (Ratio Integer)-Nothing :: Maybe (Ratio Integer)-0 % 1 :: Ratio Integer-1 % 1 :: Ratio Integer-1 % 2 :: Ratio Integer--Warning: (<=) :: Colour -> Colour -> Bool  is not an ordering (not antisymmetric)-Warning: (==) and (<=) :: Colour -> Colour -> Bool are inconsistent: (x == y) /= (x <= y && y <= x)--                  mix c c == c-                c + black == c-                    c - c == black-                c - black == c-                c + white == white-                black - c == black-                c - white == black-      fromHSV q r (0 % 1) == black-      fromHSL q r (0 % 1) == black-      fromHSL q r (1 % 1) == white-fromHSL q (0 % 1) (1 % 2) == grey-                    c + d == d + c-                  mix c d == mix d c-      fromHSL q (0 % 1) r == fromHSL s (0 % 1) r-      fromHSV q (0 % 1) r == fromHSL s (0 % 1) r-      fromHSV (1 % 1) q r == fromHSV (0 % 1) q r-      fromHSL (1 % 1) q r == fromHSL (0 % 1) q r-fromHSL q (1 % 1) (1 % 2) == fromHSV q (1 % 1) (1 % 1)-        hue (mix c black) == hue c-        hue (mix c white) == hue c-         hue (mix c grey) == hue c-              hue (c + c) == hue (c + grey)-          value (c + red) == 1 % 1-        value (c + green) == 1 % 1-         value (c + blue) == 1 % 1-       chroma (white - c) == chroma c- saturation (mix c black) == saturation c-        chroma (grey - c) == chroma (c + grey)-     chroma (mix c white) == chroma (mix c black)-      chroma (mix c grey) == chroma (mix c black)-     saturation (c + red) == chroma (c + red)-   saturation (c + green) == chroma (c + green)-    saturation (c + blue) == chroma (c + blue)-          value (c - red) == chroma (c - red)-        value (c - green) == chroma (c - green)-         value (c - blue) == chroma (c - blue)-          value (red - c) == chroma (red - c)-        value (green - c) == chroma (green - c)-         value (blue - c) == chroma (blue - c)--       hue c <= Just (1 % 1)-       0 % 1 <= chroma c-       0 % 1 <= saturation c-       0 % 1 <= value c-       0 % 1 <= lightness c-    chroma c <= 1 % 1-saturation c <= 1 % 1-     value c <= 1 % 1- lightness c <= 1 % 1-    chroma c <= saturation c-    chroma c <= value c- lightness c <= value c-
− tests/model/digraphs-s4.out
@@ -1,41 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Nat-_ :: Digraph Nat-_ :: [Nat]-[] :: [Nat]-elem :: Nat -> [Nat] -> Bool-empty :: Digraph Nat-addNode :: Nat -> Digraph Nat -> Digraph Nat-addEdge :: Nat -> Nat -> Digraph Nat -> Digraph Nat-isNode :: Nat -> Digraph Nat -> Bool-isEdge :: Nat -> Nat -> Digraph Nat -> Bool-isPath :: Nat -> Nat -> Digraph Nat -> Bool-subgraph :: [Nat] -> Digraph Nat -> Digraph Nat-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Nat -> Nat -> Bool-(==) :: Digraph Nat -> Digraph Nat -> Bool-(==) :: [Nat] -> [Nat] -> Bool--   isNode x empty == False- isEdge x y empty == False- isPath x y empty == False-     isPath x x a == isNode x a-subgraph xs empty == empty-    subgraph [] a == empty--          empty <= a-              a <= addNode x a-  subgraph xs a <= a-addNode x empty <= addNode x a--isNode x a ==> addNode x a == a-
− tests/model/digraphs.out
@@ -1,59 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Nat-_ :: Digraph Nat-_ :: [Nat]-[] :: [Nat]-elem :: Nat -> [Nat] -> Bool-empty :: Digraph Nat-addNode :: Nat -> Digraph Nat -> Digraph Nat-addEdge :: Nat -> Nat -> Digraph Nat -> Digraph Nat-isNode :: Nat -> Digraph Nat -> Bool-isEdge :: Nat -> Nat -> Digraph Nat -> Bool-isPath :: Nat -> Nat -> Digraph Nat -> Bool-subgraph :: [Nat] -> Digraph Nat -> Digraph Nat-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Nat -> Nat -> Bool-(==) :: Digraph Nat -> Digraph Nat -> Bool-(==) :: [Nat] -> [Nat] -> Bool--             isNode x empty == False-           isEdge x y empty == False-           isPath x y empty == False-     isNode x (addNode x a) == True-     (empty == addNode x a) == False-               isPath x x a == isNode x a-         (a == addNode x a) == isNode x a-                   (x == y) == isNode x (addNode y empty)- isNode x (addNode y empty) == isNode y (addNode x empty)-          subgraph xs empty == empty-              subgraph [] a == empty-    addNode x (addNode x a) == addNode x a-subgraph xs (subgraph xs a) == subgraph xs a-    addNode x (addNode y a) == addNode y (addNode x a)-subgraph xs (subgraph ys a) == subgraph ys (subgraph xs a)--     isEdge x y a ==> isNode x a-     isEdge x y a ==> isNode y a-     isPath x y a ==> isNode x a-     isPath x y a ==> isNode y a-     isEdge x y a ==> isPath x y a-            empty <=  a-                a <=  addNode x a-    subgraph xs a <=  a-                a <=  addEdge x y a-  addNode x empty <=  addNode x a-      addNode x a <=  addEdge x y a-addEdge x y empty <=  addEdge x y a--isEdge x y a ==>             addEdge x y a == a-   elem x xs ==> subgraph xs (addNode x a) == addNode x (subgraph xs a)-
− tests/model/fun-s4.out
@@ -1,21 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   = 1000-min  #-tests   =   50  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-_ :: Int -> Int-map :: (Int -> Int) -> [Int] -> [Int]-id :: Int -> Int-(.) :: (Int -> Int) -> (Int -> Int) -> Int -> Int--     id x == x-  f (g x) == (f . g) x-map id xs == xs-   f . id == f-   id . f == f--
− tests/model/fun.out
@@ -1,23 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   = 1000-min  #-tests   =   50  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-_ :: Int -> Int-map :: (Int -> Int) -> [Int] -> [Int]-id :: Int -> Int-(.) :: (Int -> Int) -> (Int -> Int) -> Int -> Int--          id x == x-       f (g x) == (f . g) x-     map id xs == xs-map (f . g) xs == map f (map g xs)-        f . id == f-        id . f == f-   (f . g) . h == f . (g . h)--
− tests/model/insertsort-s4.out
@@ -1,41 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-False :: Bool-True :: Bool-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-elem :: Int -> [Int] -> Bool-ordered :: [Int] -> Bool-all :: (Int -> Bool) -> [Int] -> Bool-insert :: Int -> [Int] -> [Int]-sort :: [Int] -> [Int]-(==) :: Int -> Int -> Bool-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-(==) :: Bool -> Bool -> Bool-(==) :: [Int] -> [Int] -> Bool--    ordered (sort xs) == True-ordered (insert x xs) == ordered xs-      (xs == sort xs) == ordered xs-     elem x (sort xs) == elem x xs-      (sort xs == []) == (xs == [])-       sort (sort xs) == sort xs-          insert x [] == [x]-      sort (xs ++ ys) == sort (ys ++ xs)-   sort (insert x xs) == insert x (sort xs)-          sort (x:xs) == insert x (sort xs)--    sort xs <= xs-insert x xs <= x:xs--
− tests/model/insertsort.out
@@ -1,71 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-False :: Bool-True :: Bool-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-elem :: Int -> [Int] -> Bool-ordered :: [Int] -> Bool-all :: (Int -> Bool) -> [Int] -> Bool-insert :: Int -> [Int] -> [Int]-sort :: [Int] -> [Int]-(==) :: Int -> Int -> Bool-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-(==) :: Bool -> Bool -> Bool-(==) :: [Int] -> [Int] -> Bool--      ordered (sort xs) == True-  ordered (insert x xs) == ordered xs-    (xs == insert x xs) == False-    ([] == insert x xs) == False-        (xs == sort xs) == ordered xs-       elem x (sort xs) == elem x xs-        (sort xs == []) == (xs == [])-   all (x ==) (sort xs) == all (x ==) xs-    all (x <) (sort xs) == all (x <) xs-          all (x <=) xs == ordered (x:sort xs)-ordered (xs ++ sort xs) == ordered (xs ++ xs)-ordered (sort xs ++ xs) == ordered (xs ++ xs)-   elem x (insert y xs) == elem x (y:xs)-         sort (sort xs) == sort xs-            insert x [] == [x]-        sort (xs ++ ys) == sort (ys ++ xs)-     sort (insert x xs) == insert x (sort xs)-            sort (x:xs) == insert x (sort xs)-   sort (xs ++ sort ys) == sort (xs ++ ys)- insert x (insert y xs) == insert y (insert x xs)-        insert x (x:xs) == x:x:xs-           insert x [y] == insert y [x]--  xs == sort ys ==> ordered xs-        sort xs <=  xs-    insert x xs <=  x:xs-      x:sort xs <=  x:xs-  xs ++ sort ys <=  xs ++ ys-  sort xs ++ ys <=  xs ++ ys-    sort (x:xs) <=  insert x xs-sort (xs ++ ys) <=  xs ++ sort ys-sort (xs ++ ys) <=  sort xs ++ ys-  sort xs ++ xs <=  xs ++ sort xs--     all (x <=) xs ==>         insert x xs == x:xs-ordered (ys ++ xs) ==>       ys ++ sort xs == sort (xs ++ ys)-ordered (ys ++ xs) ==>       sort ys ++ xs == sort (xs ++ ys)-     all (x <=) xs ==>           x:sort xs == sort (x:xs)-         elem x xs ==> insert x (xs ++ ys) == insert x xs ++ ys-            x <= y ==>     insert x (y:xs) == x:y:xs-             x < y ==>     insert y (x:xs) == x:insert y xs-ordered (ys ++ xs) ==>  sort ys ++ sort xs == sort (xs ++ ys)-     all (x <=) xs ==>     insert y (x:xs) == insert x (insert y xs)-     all (x <=) ys ==> insert x (xs ++ ys) == insert x xs ++ ys-
− tests/model/insertsort0-s4.out
@@ -1,30 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-insert :: Int -> [Int] -> [Int]-sort :: [Int] -> [Int]-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool-(==) :: [Int] -> [Int] -> Bool--   (sort xs == []) == (xs == [])-           sort [] == []-    sort (sort xs) == sort xs-       insert x [] == [x]-sort (insert x xs) == insert x (sort xs)-       sort (x:xs) == insert x (sort xs)--
− tests/model/insertsort0.out
@@ -1,37 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-insert :: Int -> [Int] -> [Int]-sort :: [Int] -> [Int]-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool-(==) :: [Int] -> [Int] -> Bool--   (xs == insert x xs) == False-   ([] == insert x xs) == False-       (sort xs == []) == (xs == [])-               sort [] == []-        sort (sort xs) == sort xs-           insert x [] == [x]-    sort (insert x xs) == insert x (sort xs)-           sort (x:xs) == insert x (sort xs)-insert x (insert y xs) == insert y (insert x xs)-       insert x (x:xs) == x:x:xs-          insert x [y] == insert y [x]--x <= y ==> insert x (y:xs) == x:y:xs- x < y ==> insert y (x:xs) == x:insert y xs-
− tests/model/length-s4.out
@@ -1,20 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-0 :: Int-length :: [Int] -> Int--    length (x:xs) == length (y:xs)-length (xs ++ ys) == length (ys ++ xs)--0 <= length xs-
− tests/model/length.out
@@ -1,23 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-0 :: Int-length :: [Int] -> Int--    length (x:xs) == length (y:xs)-length (xs ++ ys) == length (ys ++ xs)--         0 <= length xs- length xs <= length (x:xs)- length xs <= length (xs ++ ys)-length [x] <= length (x:xs)-
− tests/model/list-c-s4.out
@@ -1,777 +0,0 @@-max expr size  =    5-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-head :: [Int] -> Int-tail :: [Int] -> [Int]--_ :: Int-_ :: [Int]-[] :: [Int]-head _ :: Int-head [] :: Int-tail _ :: [Int]-tail [] :: [Int]-head (tail _) :: Int-head (tail []) :: Int-tail (tail _) :: [Int]-tail (tail []) :: [Int]-_:_ :: [Int]-[_] :: [Int]-_ ++ _ :: [Int]-head (tail (tail _)) :: Int-head (tail (tail [])) :: Int-head (_ ++ _) :: Int-tail (tail (tail _)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (_ ++ _) :: [Int]-_:tail _ :: [Int]-_:tail [] :: [Int]-_ ++ tail _ :: [Int]-_ ++ tail [] :: [Int]-[] ++ tail _ :: [Int]-[] ++ tail [] :: [Int]-head _:_ :: [Int]-[head _] :: [Int]-head []:_ :: [Int]-[head []] :: [Int]-tail _ ++ _ :: [Int]-tail _ ++ [] :: [Int]-tail [] ++ _ :: [Int]-tail [] ++ [] :: [Int]-head (tail (tail (tail _))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (_ ++ _)) :: Int-head (_ ++ tail _) :: Int-head (_ ++ tail []) :: Int-head ([] ++ tail _) :: Int-head ([] ++ tail []) :: Int-head (head _:_) :: Int-head [head _] :: Int-head (head []:_) :: Int-head [head []] :: Int-head (tail _ ++ _) :: Int-head (tail _ ++ []) :: Int-head (tail [] ++ _) :: Int-head (tail [] ++ []) :: Int-tail (tail (tail (tail _))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (_ ++ _)) :: [Int]-tail (_:tail _) :: [Int]-tail (_:tail []) :: [Int]-tail (_ ++ tail _) :: [Int]-tail (_ ++ tail []) :: [Int]-tail ([] ++ tail _) :: [Int]-tail ([] ++ tail []) :: [Int]-tail (tail _ ++ _) :: [Int]-tail (tail _ ++ []) :: [Int]-tail (tail [] ++ _) :: [Int]-tail (tail [] ++ []) :: [Int]-_:tail (tail _) :: [Int]-_:tail (tail []) :: [Int]-_:_:_ :: [Int]-[_,_] :: [Int]-_:(_ ++ _) :: [Int]-_ ++ tail (tail _) :: [Int]-_ ++ tail (tail []) :: [Int]-_ ++ (_:_) :: [Int]-_ ++ [_] :: [Int]-_ ++ (_ ++ _) :: [Int]-[] ++ tail (tail _) :: [Int]-[] ++ tail (tail []) :: [Int]-head _:tail _ :: [Int]-head _:tail [] :: [Int]-head []:tail _ :: [Int]-head []:tail [] :: [Int]-tail _ ++ tail _ :: [Int]-tail _ ++ tail [] :: [Int]-tail [] ++ tail _ :: [Int]-tail [] ++ tail [] :: [Int]-head (tail _):_ :: [Int]-[head (tail _)] :: [Int]-head (tail []):_ :: [Int]-[head (tail [])] :: [Int]-tail (tail _) ++ _ :: [Int]-tail (tail _) ++ [] :: [Int]-tail (tail []) ++ _ :: [Int]-tail (tail []) ++ [] :: [Int]--x :: Int-xs :: [Int]-[] :: [Int]-head xs :: Int-head [] :: Int-tail xs :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-[x] :: [Int]-xs ++ xs :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-x:tail xs :: [Int]-x:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail [] :: [Int]-head xs:xs :: [Int]-[head xs] :: [Int]-head []:xs :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail [] ++ xs :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail [] ++ xs) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail [] ++ xs) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail []) :: [Int]-x:x:xs :: [Int]-[x,x] :: [Int]-x:(xs ++ xs) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ [x] :: [Int]-xs ++ (xs ++ xs) :: [Int]-head xs:tail xs :: [Int]-head xs:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-[head (tail xs)] :: [Int]-head (tail []):xs :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail []) ++ xs :: [Int]--x :: Int-y :: Int-xs :: [Int]-ys :: [Int]-[] :: [Int]-head xs :: Int-head ys :: Int-head [] :: Int-tail xs :: [Int]-tail ys :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail ys) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail ys) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-x:ys :: [Int]-y:xs :: [Int]-y:ys :: [Int]-[x] :: [Int]-[y] :: [Int]-xs ++ xs :: [Int]-xs ++ ys :: [Int]-ys ++ xs :: [Int]-ys ++ ys :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail ys)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-head (xs ++ ys) :: Int-head (ys ++ xs) :: Int-head (ys ++ ys) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail ys)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-tail (xs ++ ys) :: [Int]-tail (ys ++ xs) :: [Int]-tail (ys ++ ys) :: [Int]-x:tail xs :: [Int]-x:tail ys :: [Int]-y:tail xs :: [Int]-y:tail ys :: [Int]-x:tail [] :: [Int]-y:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail ys :: [Int]-ys ++ tail xs :: [Int]-ys ++ tail ys :: [Int]-xs ++ tail [] :: [Int]-ys ++ tail [] :: [Int]-head xs:xs :: [Int]-head xs:ys :: [Int]-head ys:xs :: [Int]-head ys:ys :: [Int]-[head xs] :: [Int]-[head ys] :: [Int]-head []:xs :: [Int]-head []:ys :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail xs ++ ys :: [Int]-tail ys ++ xs :: [Int]-tail ys ++ ys :: [Int]-tail [] ++ xs :: [Int]-tail [] ++ ys :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail ys))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (tail (xs ++ ys)) :: Int-head (tail (ys ++ xs)) :: Int-head (tail (ys ++ ys)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail ys) :: Int-head (ys ++ tail xs) :: Int-head (ys ++ tail ys) :: Int-head (xs ++ tail []) :: Int-head (ys ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail xs ++ ys) :: Int-head (tail ys ++ xs) :: Int-head (tail ys ++ ys) :: Int-head (tail [] ++ xs) :: Int-head (tail [] ++ ys) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail ys))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (tail (xs ++ ys)) :: [Int]-tail (tail (ys ++ xs)) :: [Int]-tail (tail (ys ++ ys)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail ys) :: [Int]-tail (ys ++ tail xs) :: [Int]-tail (ys ++ tail ys) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (ys ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail xs ++ ys) :: [Int]-tail (tail ys ++ xs) :: [Int]-tail (tail ys ++ ys) :: [Int]-tail (tail [] ++ xs) :: [Int]-tail (tail [] ++ ys) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail ys) :: [Int]-y:tail (tail xs) :: [Int]-y:tail (tail ys) :: [Int]-x:tail (tail []) :: [Int]-y:tail (tail []) :: [Int]-x:x:xs :: [Int]-x:x:ys :: [Int]-x:y:xs :: [Int]-x:y:ys :: [Int]-y:x:xs :: [Int]-y:x:ys :: [Int]-y:y:xs :: [Int]-y:y:ys :: [Int]-[x,x] :: [Int]-[x,y] :: [Int]-[y,x] :: [Int]-[y,y] :: [Int]-x:(xs ++ xs) :: [Int]-x:(xs ++ ys) :: [Int]-x:(ys ++ xs) :: [Int]-x:(ys ++ ys) :: [Int]-y:(xs ++ xs) :: [Int]-y:(xs ++ ys) :: [Int]-y:(ys ++ xs) :: [Int]-y:(ys ++ ys) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail ys) :: [Int]-ys ++ tail (tail xs) :: [Int]-ys ++ tail (tail ys) :: [Int]-xs ++ tail (tail []) :: [Int]-ys ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ (y:xs) :: [Int]-xs ++ (x:ys) :: [Int]-xs ++ (y:ys) :: [Int]-ys ++ (x:xs) :: [Int]-ys ++ (y:xs) :: [Int]-ys ++ (x:ys) :: [Int]-ys ++ (y:ys) :: [Int]-xs ++ [x] :: [Int]-xs ++ [y] :: [Int]-ys ++ [x] :: [Int]-ys ++ [y] :: [Int]-xs ++ (xs ++ xs) :: [Int]-xs ++ (xs ++ ys) :: [Int]-xs ++ (ys ++ xs) :: [Int]-xs ++ (ys ++ ys) :: [Int]-ys ++ (xs ++ xs) :: [Int]-ys ++ (xs ++ ys) :: [Int]-ys ++ (ys ++ xs) :: [Int]-ys ++ (ys ++ ys) :: [Int]-head xs:tail xs :: [Int]-head xs:tail ys :: [Int]-head ys:tail xs :: [Int]-head ys:tail ys :: [Int]-head xs:tail [] :: [Int]-head ys:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail ys :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail ys :: [Int]-tail ys ++ tail xs :: [Int]-tail ys ++ tail ys :: [Int]-tail xs ++ tail [] :: [Int]-tail ys ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail ys :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-head (tail xs):ys :: [Int]-head (tail ys):xs :: [Int]-head (tail ys):ys :: [Int]-[head (tail xs)] :: [Int]-[head (tail ys)] :: [Int]-head (tail []):xs :: [Int]-head (tail []):ys :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail xs) ++ ys :: [Int]-tail (tail ys) ++ xs :: [Int]-tail (tail ys) ++ ys :: [Int]-tail (tail []) ++ xs :: [Int]-tail (tail []) ++ ys :: [Int]--x :: Int-y :: Int-z :: Int-xs :: [Int]-ys :: [Int]-zs :: [Int]-[] :: [Int]-head xs :: Int-head ys :: Int-head zs :: Int-head [] :: Int-tail xs :: [Int]-tail ys :: [Int]-tail zs :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail ys) :: Int-head (tail zs) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail ys) :: [Int]-tail (tail zs) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-x:ys :: [Int]-x:zs :: [Int]-y:xs :: [Int]-y:ys :: [Int]-y:zs :: [Int]-z:xs :: [Int]-z:ys :: [Int]-z:zs :: [Int]-[x] :: [Int]-[y] :: [Int]-[z] :: [Int]-xs ++ xs :: [Int]-xs ++ ys :: [Int]-xs ++ zs :: [Int]-ys ++ xs :: [Int]-ys ++ ys :: [Int]-ys ++ zs :: [Int]-zs ++ xs :: [Int]-zs ++ ys :: [Int]-zs ++ zs :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail ys)) :: Int-head (tail (tail zs)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-head (xs ++ ys) :: Int-head (xs ++ zs) :: Int-head (ys ++ xs) :: Int-head (ys ++ ys) :: Int-head (ys ++ zs) :: Int-head (zs ++ xs) :: Int-head (zs ++ ys) :: Int-head (zs ++ zs) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail ys)) :: [Int]-tail (tail (tail zs)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-tail (xs ++ ys) :: [Int]-tail (xs ++ zs) :: [Int]-tail (ys ++ xs) :: [Int]-tail (ys ++ ys) :: [Int]-tail (ys ++ zs) :: [Int]-tail (zs ++ xs) :: [Int]-tail (zs ++ ys) :: [Int]-tail (zs ++ zs) :: [Int]-x:tail xs :: [Int]-x:tail ys :: [Int]-x:tail zs :: [Int]-y:tail xs :: [Int]-y:tail ys :: [Int]-y:tail zs :: [Int]-z:tail xs :: [Int]-z:tail ys :: [Int]-z:tail zs :: [Int]-x:tail [] :: [Int]-y:tail [] :: [Int]-z:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail ys :: [Int]-xs ++ tail zs :: [Int]-ys ++ tail xs :: [Int]-ys ++ tail ys :: [Int]-ys ++ tail zs :: [Int]-zs ++ tail xs :: [Int]-zs ++ tail ys :: [Int]-zs ++ tail zs :: [Int]-xs ++ tail [] :: [Int]-ys ++ tail [] :: [Int]-zs ++ tail [] :: [Int]-head xs:xs :: [Int]-head xs:ys :: [Int]-head xs:zs :: [Int]-head ys:xs :: [Int]-head ys:ys :: [Int]-head ys:zs :: [Int]-head zs:xs :: [Int]-head zs:ys :: [Int]-head zs:zs :: [Int]-[head xs] :: [Int]-[head ys] :: [Int]-[head zs] :: [Int]-head []:xs :: [Int]-head []:ys :: [Int]-head []:zs :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail xs ++ ys :: [Int]-tail xs ++ zs :: [Int]-tail ys ++ xs :: [Int]-tail ys ++ ys :: [Int]-tail ys ++ zs :: [Int]-tail zs ++ xs :: [Int]-tail zs ++ ys :: [Int]-tail zs ++ zs :: [Int]-tail [] ++ xs :: [Int]-tail [] ++ ys :: [Int]-tail [] ++ zs :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail ys))) :: Int-head (tail (tail (tail zs))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (tail (xs ++ ys)) :: Int-head (tail (xs ++ zs)) :: Int-head (tail (ys ++ xs)) :: Int-head (tail (ys ++ ys)) :: Int-head (tail (ys ++ zs)) :: Int-head (tail (zs ++ xs)) :: Int-head (tail (zs ++ ys)) :: Int-head (tail (zs ++ zs)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail ys) :: Int-head (xs ++ tail zs) :: Int-head (ys ++ tail xs) :: Int-head (ys ++ tail ys) :: Int-head (ys ++ tail zs) :: Int-head (zs ++ tail xs) :: Int-head (zs ++ tail ys) :: Int-head (zs ++ tail zs) :: Int-head (xs ++ tail []) :: Int-head (ys ++ tail []) :: Int-head (zs ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail xs ++ ys) :: Int-head (tail xs ++ zs) :: Int-head (tail ys ++ xs) :: Int-head (tail ys ++ ys) :: Int-head (tail ys ++ zs) :: Int-head (tail zs ++ xs) :: Int-head (tail zs ++ ys) :: Int-head (tail zs ++ zs) :: Int-head (tail [] ++ xs) :: Int-head (tail [] ++ ys) :: Int-head (tail [] ++ zs) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail ys))) :: [Int]-tail (tail (tail (tail zs))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (tail (xs ++ ys)) :: [Int]-tail (tail (xs ++ zs)) :: [Int]-tail (tail (ys ++ xs)) :: [Int]-tail (tail (ys ++ ys)) :: [Int]-tail (tail (ys ++ zs)) :: [Int]-tail (tail (zs ++ xs)) :: [Int]-tail (tail (zs ++ ys)) :: [Int]-tail (tail (zs ++ zs)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail ys) :: [Int]-tail (xs ++ tail zs) :: [Int]-tail (ys ++ tail xs) :: [Int]-tail (ys ++ tail ys) :: [Int]-tail (ys ++ tail zs) :: [Int]-tail (zs ++ tail xs) :: [Int]-tail (zs ++ tail ys) :: [Int]-tail (zs ++ tail zs) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (ys ++ tail []) :: [Int]-tail (zs ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail xs ++ ys) :: [Int]-tail (tail xs ++ zs) :: [Int]-tail (tail ys ++ xs) :: [Int]-tail (tail ys ++ ys) :: [Int]-tail (tail ys ++ zs) :: [Int]-tail (tail zs ++ xs) :: [Int]-tail (tail zs ++ ys) :: [Int]-tail (tail zs ++ zs) :: [Int]-tail (tail [] ++ xs) :: [Int]-tail (tail [] ++ ys) :: [Int]-tail (tail [] ++ zs) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail ys) :: [Int]-x:tail (tail zs) :: [Int]-y:tail (tail xs) :: [Int]-y:tail (tail ys) :: [Int]-y:tail (tail zs) :: [Int]-z:tail (tail xs) :: [Int]-z:tail (tail ys) :: [Int]-z:tail (tail zs) :: [Int]-x:tail (tail []) :: [Int]-y:tail (tail []) :: [Int]-z:tail (tail []) :: [Int]-x:x:xs :: [Int]-x:x:ys :: [Int]-x:x:zs :: [Int]-x:y:xs :: [Int]-x:y:ys :: [Int]-x:y:zs :: [Int]-x:z:xs :: [Int]-x:z:ys :: [Int]-x:z:zs :: [Int]-y:x:xs :: [Int]-y:x:ys :: [Int]-y:x:zs :: [Int]-y:y:xs :: [Int]-y:y:ys :: [Int]-y:y:zs :: [Int]-y:z:xs :: [Int]-y:z:ys :: [Int]-y:z:zs :: [Int]-z:x:xs :: [Int]-z:x:ys :: [Int]-z:x:zs :: [Int]-z:y:xs :: [Int]-z:y:ys :: [Int]-z:y:zs :: [Int]-z:z:xs :: [Int]-z:z:ys :: [Int]-z:z:zs :: [Int]-[x,x] :: [Int]-[x,y] :: [Int]-[x,z] :: [Int]-[y,x] :: [Int]-[y,y] :: [Int]-[y,z] :: [Int]-[z,x] :: [Int]-[z,y] :: [Int]-[z,z] :: [Int]-x:(xs ++ xs) :: [Int]-x:(xs ++ ys) :: [Int]-x:(xs ++ zs) :: [Int]-x:(ys ++ xs) :: [Int]-x:(ys ++ ys) :: [Int]-x:(ys ++ zs) :: [Int]-x:(zs ++ xs) :: [Int]-x:(zs ++ ys) :: [Int]-x:(zs ++ zs) :: [Int]-y:(xs ++ xs) :: [Int]-y:(xs ++ ys) :: [Int]-y:(xs ++ zs) :: [Int]-y:(ys ++ xs) :: [Int]-y:(ys ++ ys) :: [Int]-y:(ys ++ zs) :: [Int]-y:(zs ++ xs) :: [Int]-y:(zs ++ ys) :: [Int]-y:(zs ++ zs) :: [Int]-z:(xs ++ xs) :: [Int]-z:(xs ++ ys) :: [Int]-z:(xs ++ zs) :: [Int]-z:(ys ++ xs) :: [Int]-z:(ys ++ ys) :: [Int]-z:(ys ++ zs) :: [Int]-z:(zs ++ xs) :: [Int]-z:(zs ++ ys) :: [Int]-z:(zs ++ zs) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail ys) :: [Int]-xs ++ tail (tail zs) :: [Int]-ys ++ tail (tail xs) :: [Int]-ys ++ tail (tail ys) :: [Int]-ys ++ tail (tail zs) :: [Int]-zs ++ tail (tail xs) :: [Int]-zs ++ tail (tail ys) :: [Int]-zs ++ tail (tail zs) :: [Int]-xs ++ tail (tail []) :: [Int]-ys ++ tail (tail []) :: [Int]-zs ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ (y:xs) :: [Int]-xs ++ (z:xs) :: [Int]-xs ++ (x:ys) :: [Int]-xs ++ (y:ys) :: [Int]-xs ++ (z:ys) :: [Int]-xs ++ (x:zs) :: [Int]-xs ++ (y:zs) :: [Int]-xs ++ (z:zs) :: [Int]-ys ++ (x:xs) :: [Int]-ys ++ (y:xs) :: [Int]-ys ++ (z:xs) :: [Int]-ys ++ (x:ys) :: [Int]-ys ++ (y:ys) :: [Int]-ys ++ (z:ys) :: [Int]-ys ++ (x:zs) :: [Int]-ys ++ (y:zs) :: [Int]-ys ++ (z:zs) :: [Int]-zs ++ (x:xs) :: [Int]-zs ++ (y:xs) :: [Int]-zs ++ (z:xs) :: [Int]-zs ++ (x:ys) :: [Int]-zs ++ (y:ys) :: [Int]-zs ++ (z:ys) :: [Int]-zs ++ (x:zs) :: [Int]-zs ++ (y:zs) :: [Int]-zs ++ (z:zs) :: [Int]-xs ++ [x] :: [Int]-xs ++ [y] :: [Int]-xs ++ [z] :: [Int]-ys ++ [x] :: [Int]-ys ++ [y] :: [Int]-ys ++ [z] :: [Int]-zs ++ [x] :: [Int]-zs ++ [y] :: [Int]-zs ++ [z] :: [Int]-xs ++ (xs ++ xs) :: [Int]-xs ++ (xs ++ ys) :: [Int]-xs ++ (xs ++ zs) :: [Int]-xs ++ (ys ++ xs) :: [Int]-xs ++ (ys ++ ys) :: [Int]-xs ++ (ys ++ zs) :: [Int]-xs ++ (zs ++ xs) :: [Int]-xs ++ (zs ++ ys) :: [Int]-xs ++ (zs ++ zs) :: [Int]-ys ++ (xs ++ xs) :: [Int]-ys ++ (xs ++ ys) :: [Int]-ys ++ (xs ++ zs) :: [Int]-ys ++ (ys ++ xs) :: [Int]-ys ++ (ys ++ ys) :: [Int]-ys ++ (ys ++ zs) :: [Int]-ys ++ (zs ++ xs) :: [Int]-ys ++ (zs ++ ys) :: [Int]-ys ++ (zs ++ zs) :: [Int]-zs ++ (xs ++ xs) :: [Int]-zs ++ (xs ++ ys) :: [Int]-zs ++ (xs ++ zs) :: [Int]-zs ++ (ys ++ xs) :: [Int]-zs ++ (ys ++ ys) :: [Int]-zs ++ (ys ++ zs) :: [Int]-zs ++ (zs ++ xs) :: [Int]-zs ++ (zs ++ ys) :: [Int]-zs ++ (zs ++ zs) :: [Int]-head xs:tail xs :: [Int]-head xs:tail ys :: [Int]-head xs:tail zs :: [Int]-head ys:tail xs :: [Int]-head ys:tail ys :: [Int]-head ys:tail zs :: [Int]-head zs:tail xs :: [Int]-head zs:tail ys :: [Int]-head zs:tail zs :: [Int]-head xs:tail [] :: [Int]-head ys:tail [] :: [Int]-head zs:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail ys :: [Int]-head []:tail zs :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail ys :: [Int]-tail xs ++ tail zs :: [Int]-tail ys ++ tail xs :: [Int]-tail ys ++ tail ys :: [Int]-tail ys ++ tail zs :: [Int]-tail zs ++ tail xs :: [Int]-tail zs ++ tail ys :: [Int]-tail zs ++ tail zs :: [Int]-tail xs ++ tail [] :: [Int]-tail ys ++ tail [] :: [Int]-tail zs ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail ys :: [Int]-tail [] ++ tail zs :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-head (tail xs):ys :: [Int]-head (tail xs):zs :: [Int]-head (tail ys):xs :: [Int]-head (tail ys):ys :: [Int]-head (tail ys):zs :: [Int]-head (tail zs):xs :: [Int]-head (tail zs):ys :: [Int]-head (tail zs):zs :: [Int]-[head (tail xs)] :: [Int]-[head (tail ys)] :: [Int]-[head (tail zs)] :: [Int]-head (tail []):xs :: [Int]-head (tail []):ys :: [Int]-head (tail []):zs :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail xs) ++ ys :: [Int]-tail (tail xs) ++ zs :: [Int]-tail (tail ys) ++ xs :: [Int]-tail (tail ys) ++ ys :: [Int]-tail (tail ys) ++ zs :: [Int]-tail (tail zs) ++ xs :: [Int]-tail (tail zs) ++ ys :: [Int]-tail (tail zs) ++ zs :: [Int]-tail (tail []) ++ xs :: [Int]-tail (tail []) ++ ys :: [Int]-tail (tail []) ++ zs :: [Int]--Number of Eq schema classes: 90-Number of Eq 1-var classes: 68-Number of Eq 2-var classes: 191-Number of Eq 3-var classes: 406
− tests/model/list-c.out
@@ -1,777 +0,0 @@-max expr size  =    5-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-head :: [Int] -> Int-tail :: [Int] -> [Int]--_ :: Int-_ :: [Int]-[] :: [Int]-head _ :: Int-head [] :: Int-tail _ :: [Int]-tail [] :: [Int]-head (tail _) :: Int-head (tail []) :: Int-tail (tail _) :: [Int]-tail (tail []) :: [Int]-_:_ :: [Int]-[_] :: [Int]-_ ++ _ :: [Int]-head (tail (tail _)) :: Int-head (tail (tail [])) :: Int-head (_ ++ _) :: Int-tail (tail (tail _)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (_ ++ _) :: [Int]-_:tail _ :: [Int]-_:tail [] :: [Int]-_ ++ tail _ :: [Int]-_ ++ tail [] :: [Int]-[] ++ tail _ :: [Int]-[] ++ tail [] :: [Int]-head _:_ :: [Int]-[head _] :: [Int]-head []:_ :: [Int]-[head []] :: [Int]-tail _ ++ _ :: [Int]-tail _ ++ [] :: [Int]-tail [] ++ _ :: [Int]-tail [] ++ [] :: [Int]-head (tail (tail (tail _))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (_ ++ _)) :: Int-head (_ ++ tail _) :: Int-head (_ ++ tail []) :: Int-head ([] ++ tail _) :: Int-head ([] ++ tail []) :: Int-head (head _:_) :: Int-head [head _] :: Int-head (head []:_) :: Int-head [head []] :: Int-head (tail _ ++ _) :: Int-head (tail _ ++ []) :: Int-head (tail [] ++ _) :: Int-head (tail [] ++ []) :: Int-tail (tail (tail (tail _))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (_ ++ _)) :: [Int]-tail (_:tail _) :: [Int]-tail (_:tail []) :: [Int]-tail (_ ++ tail _) :: [Int]-tail (_ ++ tail []) :: [Int]-tail ([] ++ tail _) :: [Int]-tail ([] ++ tail []) :: [Int]-tail (tail _ ++ _) :: [Int]-tail (tail _ ++ []) :: [Int]-tail (tail [] ++ _) :: [Int]-tail (tail [] ++ []) :: [Int]-_:tail (tail _) :: [Int]-_:tail (tail []) :: [Int]-_:_:_ :: [Int]-[_,_] :: [Int]-_:(_ ++ _) :: [Int]-_ ++ tail (tail _) :: [Int]-_ ++ tail (tail []) :: [Int]-_ ++ (_:_) :: [Int]-_ ++ [_] :: [Int]-_ ++ (_ ++ _) :: [Int]-[] ++ tail (tail _) :: [Int]-[] ++ tail (tail []) :: [Int]-head _:tail _ :: [Int]-head _:tail [] :: [Int]-head []:tail _ :: [Int]-head []:tail [] :: [Int]-tail _ ++ tail _ :: [Int]-tail _ ++ tail [] :: [Int]-tail [] ++ tail _ :: [Int]-tail [] ++ tail [] :: [Int]-head (tail _):_ :: [Int]-[head (tail _)] :: [Int]-head (tail []):_ :: [Int]-[head (tail [])] :: [Int]-tail (tail _) ++ _ :: [Int]-tail (tail _) ++ [] :: [Int]-tail (tail []) ++ _ :: [Int]-tail (tail []) ++ [] :: [Int]--x :: Int-xs :: [Int]-[] :: [Int]-head xs :: Int-head [] :: Int-tail xs :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-[x] :: [Int]-xs ++ xs :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-x:tail xs :: [Int]-x:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail [] :: [Int]-head xs:xs :: [Int]-[head xs] :: [Int]-head []:xs :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail [] ++ xs :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail [] ++ xs) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail [] ++ xs) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail []) :: [Int]-x:x:xs :: [Int]-[x,x] :: [Int]-x:(xs ++ xs) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ [x] :: [Int]-xs ++ (xs ++ xs) :: [Int]-head xs:tail xs :: [Int]-head xs:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-[head (tail xs)] :: [Int]-head (tail []):xs :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail []) ++ xs :: [Int]--x :: Int-y :: Int-xs :: [Int]-ys :: [Int]-[] :: [Int]-head xs :: Int-head ys :: Int-head [] :: Int-tail xs :: [Int]-tail ys :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail ys) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail ys) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-x:ys :: [Int]-y:xs :: [Int]-y:ys :: [Int]-[x] :: [Int]-[y] :: [Int]-xs ++ xs :: [Int]-xs ++ ys :: [Int]-ys ++ xs :: [Int]-ys ++ ys :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail ys)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-head (xs ++ ys) :: Int-head (ys ++ xs) :: Int-head (ys ++ ys) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail ys)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-tail (xs ++ ys) :: [Int]-tail (ys ++ xs) :: [Int]-tail (ys ++ ys) :: [Int]-x:tail xs :: [Int]-x:tail ys :: [Int]-y:tail xs :: [Int]-y:tail ys :: [Int]-x:tail [] :: [Int]-y:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail ys :: [Int]-ys ++ tail xs :: [Int]-ys ++ tail ys :: [Int]-xs ++ tail [] :: [Int]-ys ++ tail [] :: [Int]-head xs:xs :: [Int]-head xs:ys :: [Int]-head ys:xs :: [Int]-head ys:ys :: [Int]-[head xs] :: [Int]-[head ys] :: [Int]-head []:xs :: [Int]-head []:ys :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail xs ++ ys :: [Int]-tail ys ++ xs :: [Int]-tail ys ++ ys :: [Int]-tail [] ++ xs :: [Int]-tail [] ++ ys :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail ys))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (tail (xs ++ ys)) :: Int-head (tail (ys ++ xs)) :: Int-head (tail (ys ++ ys)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail ys) :: Int-head (ys ++ tail xs) :: Int-head (ys ++ tail ys) :: Int-head (xs ++ tail []) :: Int-head (ys ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail xs ++ ys) :: Int-head (tail ys ++ xs) :: Int-head (tail ys ++ ys) :: Int-head (tail [] ++ xs) :: Int-head (tail [] ++ ys) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail ys))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (tail (xs ++ ys)) :: [Int]-tail (tail (ys ++ xs)) :: [Int]-tail (tail (ys ++ ys)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail ys) :: [Int]-tail (ys ++ tail xs) :: [Int]-tail (ys ++ tail ys) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (ys ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail xs ++ ys) :: [Int]-tail (tail ys ++ xs) :: [Int]-tail (tail ys ++ ys) :: [Int]-tail (tail [] ++ xs) :: [Int]-tail (tail [] ++ ys) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail ys) :: [Int]-y:tail (tail xs) :: [Int]-y:tail (tail ys) :: [Int]-x:tail (tail []) :: [Int]-y:tail (tail []) :: [Int]-x:x:xs :: [Int]-x:x:ys :: [Int]-x:y:xs :: [Int]-x:y:ys :: [Int]-y:x:xs :: [Int]-y:x:ys :: [Int]-y:y:xs :: [Int]-y:y:ys :: [Int]-[x,x] :: [Int]-[x,y] :: [Int]-[y,x] :: [Int]-[y,y] :: [Int]-x:(xs ++ xs) :: [Int]-x:(xs ++ ys) :: [Int]-x:(ys ++ xs) :: [Int]-x:(ys ++ ys) :: [Int]-y:(xs ++ xs) :: [Int]-y:(xs ++ ys) :: [Int]-y:(ys ++ xs) :: [Int]-y:(ys ++ ys) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail ys) :: [Int]-ys ++ tail (tail xs) :: [Int]-ys ++ tail (tail ys) :: [Int]-xs ++ tail (tail []) :: [Int]-ys ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ (y:xs) :: [Int]-xs ++ (x:ys) :: [Int]-xs ++ (y:ys) :: [Int]-ys ++ (x:xs) :: [Int]-ys ++ (y:xs) :: [Int]-ys ++ (x:ys) :: [Int]-ys ++ (y:ys) :: [Int]-xs ++ [x] :: [Int]-xs ++ [y] :: [Int]-ys ++ [x] :: [Int]-ys ++ [y] :: [Int]-xs ++ (xs ++ xs) :: [Int]-xs ++ (xs ++ ys) :: [Int]-xs ++ (ys ++ xs) :: [Int]-xs ++ (ys ++ ys) :: [Int]-ys ++ (xs ++ xs) :: [Int]-ys ++ (xs ++ ys) :: [Int]-ys ++ (ys ++ xs) :: [Int]-ys ++ (ys ++ ys) :: [Int]-head xs:tail xs :: [Int]-head xs:tail ys :: [Int]-head ys:tail xs :: [Int]-head ys:tail ys :: [Int]-head xs:tail [] :: [Int]-head ys:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail ys :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail ys :: [Int]-tail ys ++ tail xs :: [Int]-tail ys ++ tail ys :: [Int]-tail xs ++ tail [] :: [Int]-tail ys ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail ys :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-head (tail xs):ys :: [Int]-head (tail ys):xs :: [Int]-head (tail ys):ys :: [Int]-[head (tail xs)] :: [Int]-[head (tail ys)] :: [Int]-head (tail []):xs :: [Int]-head (tail []):ys :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail xs) ++ ys :: [Int]-tail (tail ys) ++ xs :: [Int]-tail (tail ys) ++ ys :: [Int]-tail (tail []) ++ xs :: [Int]-tail (tail []) ++ ys :: [Int]--x :: Int-y :: Int-z :: Int-xs :: [Int]-ys :: [Int]-zs :: [Int]-[] :: [Int]-head xs :: Int-head ys :: Int-head zs :: Int-head [] :: Int-tail xs :: [Int]-tail ys :: [Int]-tail zs :: [Int]-tail [] :: [Int]-head (tail xs) :: Int-head (tail ys) :: Int-head (tail zs) :: Int-head (tail []) :: Int-tail (tail xs) :: [Int]-tail (tail ys) :: [Int]-tail (tail zs) :: [Int]-tail (tail []) :: [Int]-x:xs :: [Int]-x:ys :: [Int]-x:zs :: [Int]-y:xs :: [Int]-y:ys :: [Int]-y:zs :: [Int]-z:xs :: [Int]-z:ys :: [Int]-z:zs :: [Int]-[x] :: [Int]-[y] :: [Int]-[z] :: [Int]-xs ++ xs :: [Int]-xs ++ ys :: [Int]-xs ++ zs :: [Int]-ys ++ xs :: [Int]-ys ++ ys :: [Int]-ys ++ zs :: [Int]-zs ++ xs :: [Int]-zs ++ ys :: [Int]-zs ++ zs :: [Int]-head (tail (tail xs)) :: Int-head (tail (tail ys)) :: Int-head (tail (tail zs)) :: Int-head (tail (tail [])) :: Int-head (xs ++ xs) :: Int-head (xs ++ ys) :: Int-head (xs ++ zs) :: Int-head (ys ++ xs) :: Int-head (ys ++ ys) :: Int-head (ys ++ zs) :: Int-head (zs ++ xs) :: Int-head (zs ++ ys) :: Int-head (zs ++ zs) :: Int-tail (tail (tail xs)) :: [Int]-tail (tail (tail ys)) :: [Int]-tail (tail (tail zs)) :: [Int]-tail (tail (tail [])) :: [Int]-tail (xs ++ xs) :: [Int]-tail (xs ++ ys) :: [Int]-tail (xs ++ zs) :: [Int]-tail (ys ++ xs) :: [Int]-tail (ys ++ ys) :: [Int]-tail (ys ++ zs) :: [Int]-tail (zs ++ xs) :: [Int]-tail (zs ++ ys) :: [Int]-tail (zs ++ zs) :: [Int]-x:tail xs :: [Int]-x:tail ys :: [Int]-x:tail zs :: [Int]-y:tail xs :: [Int]-y:tail ys :: [Int]-y:tail zs :: [Int]-z:tail xs :: [Int]-z:tail ys :: [Int]-z:tail zs :: [Int]-x:tail [] :: [Int]-y:tail [] :: [Int]-z:tail [] :: [Int]-xs ++ tail xs :: [Int]-xs ++ tail ys :: [Int]-xs ++ tail zs :: [Int]-ys ++ tail xs :: [Int]-ys ++ tail ys :: [Int]-ys ++ tail zs :: [Int]-zs ++ tail xs :: [Int]-zs ++ tail ys :: [Int]-zs ++ tail zs :: [Int]-xs ++ tail [] :: [Int]-ys ++ tail [] :: [Int]-zs ++ tail [] :: [Int]-head xs:xs :: [Int]-head xs:ys :: [Int]-head xs:zs :: [Int]-head ys:xs :: [Int]-head ys:ys :: [Int]-head ys:zs :: [Int]-head zs:xs :: [Int]-head zs:ys :: [Int]-head zs:zs :: [Int]-[head xs] :: [Int]-[head ys] :: [Int]-[head zs] :: [Int]-head []:xs :: [Int]-head []:ys :: [Int]-head []:zs :: [Int]-[head []] :: [Int]-tail xs ++ xs :: [Int]-tail xs ++ ys :: [Int]-tail xs ++ zs :: [Int]-tail ys ++ xs :: [Int]-tail ys ++ ys :: [Int]-tail ys ++ zs :: [Int]-tail zs ++ xs :: [Int]-tail zs ++ ys :: [Int]-tail zs ++ zs :: [Int]-tail [] ++ xs :: [Int]-tail [] ++ ys :: [Int]-tail [] ++ zs :: [Int]-head (tail (tail (tail xs))) :: Int-head (tail (tail (tail ys))) :: Int-head (tail (tail (tail zs))) :: Int-head (tail (tail (tail []))) :: Int-head (tail (xs ++ xs)) :: Int-head (tail (xs ++ ys)) :: Int-head (tail (xs ++ zs)) :: Int-head (tail (ys ++ xs)) :: Int-head (tail (ys ++ ys)) :: Int-head (tail (ys ++ zs)) :: Int-head (tail (zs ++ xs)) :: Int-head (tail (zs ++ ys)) :: Int-head (tail (zs ++ zs)) :: Int-head (xs ++ tail xs) :: Int-head (xs ++ tail ys) :: Int-head (xs ++ tail zs) :: Int-head (ys ++ tail xs) :: Int-head (ys ++ tail ys) :: Int-head (ys ++ tail zs) :: Int-head (zs ++ tail xs) :: Int-head (zs ++ tail ys) :: Int-head (zs ++ tail zs) :: Int-head (xs ++ tail []) :: Int-head (ys ++ tail []) :: Int-head (zs ++ tail []) :: Int-head (tail xs ++ xs) :: Int-head (tail xs ++ ys) :: Int-head (tail xs ++ zs) :: Int-head (tail ys ++ xs) :: Int-head (tail ys ++ ys) :: Int-head (tail ys ++ zs) :: Int-head (tail zs ++ xs) :: Int-head (tail zs ++ ys) :: Int-head (tail zs ++ zs) :: Int-head (tail [] ++ xs) :: Int-head (tail [] ++ ys) :: Int-head (tail [] ++ zs) :: Int-tail (tail (tail (tail xs))) :: [Int]-tail (tail (tail (tail ys))) :: [Int]-tail (tail (tail (tail zs))) :: [Int]-tail (tail (tail (tail []))) :: [Int]-tail (tail (xs ++ xs)) :: [Int]-tail (tail (xs ++ ys)) :: [Int]-tail (tail (xs ++ zs)) :: [Int]-tail (tail (ys ++ xs)) :: [Int]-tail (tail (ys ++ ys)) :: [Int]-tail (tail (ys ++ zs)) :: [Int]-tail (tail (zs ++ xs)) :: [Int]-tail (tail (zs ++ ys)) :: [Int]-tail (tail (zs ++ zs)) :: [Int]-tail (xs ++ tail xs) :: [Int]-tail (xs ++ tail ys) :: [Int]-tail (xs ++ tail zs) :: [Int]-tail (ys ++ tail xs) :: [Int]-tail (ys ++ tail ys) :: [Int]-tail (ys ++ tail zs) :: [Int]-tail (zs ++ tail xs) :: [Int]-tail (zs ++ tail ys) :: [Int]-tail (zs ++ tail zs) :: [Int]-tail (xs ++ tail []) :: [Int]-tail (ys ++ tail []) :: [Int]-tail (zs ++ tail []) :: [Int]-tail (tail xs ++ xs) :: [Int]-tail (tail xs ++ ys) :: [Int]-tail (tail xs ++ zs) :: [Int]-tail (tail ys ++ xs) :: [Int]-tail (tail ys ++ ys) :: [Int]-tail (tail ys ++ zs) :: [Int]-tail (tail zs ++ xs) :: [Int]-tail (tail zs ++ ys) :: [Int]-tail (tail zs ++ zs) :: [Int]-tail (tail [] ++ xs) :: [Int]-tail (tail [] ++ ys) :: [Int]-tail (tail [] ++ zs) :: [Int]-x:tail (tail xs) :: [Int]-x:tail (tail ys) :: [Int]-x:tail (tail zs) :: [Int]-y:tail (tail xs) :: [Int]-y:tail (tail ys) :: [Int]-y:tail (tail zs) :: [Int]-z:tail (tail xs) :: [Int]-z:tail (tail ys) :: [Int]-z:tail (tail zs) :: [Int]-x:tail (tail []) :: [Int]-y:tail (tail []) :: [Int]-z:tail (tail []) :: [Int]-x:x:xs :: [Int]-x:x:ys :: [Int]-x:x:zs :: [Int]-x:y:xs :: [Int]-x:y:ys :: [Int]-x:y:zs :: [Int]-x:z:xs :: [Int]-x:z:ys :: [Int]-x:z:zs :: [Int]-y:x:xs :: [Int]-y:x:ys :: [Int]-y:x:zs :: [Int]-y:y:xs :: [Int]-y:y:ys :: [Int]-y:y:zs :: [Int]-y:z:xs :: [Int]-y:z:ys :: [Int]-y:z:zs :: [Int]-z:x:xs :: [Int]-z:x:ys :: [Int]-z:x:zs :: [Int]-z:y:xs :: [Int]-z:y:ys :: [Int]-z:y:zs :: [Int]-z:z:xs :: [Int]-z:z:ys :: [Int]-z:z:zs :: [Int]-[x,x] :: [Int]-[x,y] :: [Int]-[x,z] :: [Int]-[y,x] :: [Int]-[y,y] :: [Int]-[y,z] :: [Int]-[z,x] :: [Int]-[z,y] :: [Int]-[z,z] :: [Int]-x:(xs ++ xs) :: [Int]-x:(xs ++ ys) :: [Int]-x:(xs ++ zs) :: [Int]-x:(ys ++ xs) :: [Int]-x:(ys ++ ys) :: [Int]-x:(ys ++ zs) :: [Int]-x:(zs ++ xs) :: [Int]-x:(zs ++ ys) :: [Int]-x:(zs ++ zs) :: [Int]-y:(xs ++ xs) :: [Int]-y:(xs ++ ys) :: [Int]-y:(xs ++ zs) :: [Int]-y:(ys ++ xs) :: [Int]-y:(ys ++ ys) :: [Int]-y:(ys ++ zs) :: [Int]-y:(zs ++ xs) :: [Int]-y:(zs ++ ys) :: [Int]-y:(zs ++ zs) :: [Int]-z:(xs ++ xs) :: [Int]-z:(xs ++ ys) :: [Int]-z:(xs ++ zs) :: [Int]-z:(ys ++ xs) :: [Int]-z:(ys ++ ys) :: [Int]-z:(ys ++ zs) :: [Int]-z:(zs ++ xs) :: [Int]-z:(zs ++ ys) :: [Int]-z:(zs ++ zs) :: [Int]-xs ++ tail (tail xs) :: [Int]-xs ++ tail (tail ys) :: [Int]-xs ++ tail (tail zs) :: [Int]-ys ++ tail (tail xs) :: [Int]-ys ++ tail (tail ys) :: [Int]-ys ++ tail (tail zs) :: [Int]-zs ++ tail (tail xs) :: [Int]-zs ++ tail (tail ys) :: [Int]-zs ++ tail (tail zs) :: [Int]-xs ++ tail (tail []) :: [Int]-ys ++ tail (tail []) :: [Int]-zs ++ tail (tail []) :: [Int]-xs ++ (x:xs) :: [Int]-xs ++ (y:xs) :: [Int]-xs ++ (z:xs) :: [Int]-xs ++ (x:ys) :: [Int]-xs ++ (y:ys) :: [Int]-xs ++ (z:ys) :: [Int]-xs ++ (x:zs) :: [Int]-xs ++ (y:zs) :: [Int]-xs ++ (z:zs) :: [Int]-ys ++ (x:xs) :: [Int]-ys ++ (y:xs) :: [Int]-ys ++ (z:xs) :: [Int]-ys ++ (x:ys) :: [Int]-ys ++ (y:ys) :: [Int]-ys ++ (z:ys) :: [Int]-ys ++ (x:zs) :: [Int]-ys ++ (y:zs) :: [Int]-ys ++ (z:zs) :: [Int]-zs ++ (x:xs) :: [Int]-zs ++ (y:xs) :: [Int]-zs ++ (z:xs) :: [Int]-zs ++ (x:ys) :: [Int]-zs ++ (y:ys) :: [Int]-zs ++ (z:ys) :: [Int]-zs ++ (x:zs) :: [Int]-zs ++ (y:zs) :: [Int]-zs ++ (z:zs) :: [Int]-xs ++ [x] :: [Int]-xs ++ [y] :: [Int]-xs ++ [z] :: [Int]-ys ++ [x] :: [Int]-ys ++ [y] :: [Int]-ys ++ [z] :: [Int]-zs ++ [x] :: [Int]-zs ++ [y] :: [Int]-zs ++ [z] :: [Int]-xs ++ (xs ++ xs) :: [Int]-xs ++ (xs ++ ys) :: [Int]-xs ++ (xs ++ zs) :: [Int]-xs ++ (ys ++ xs) :: [Int]-xs ++ (ys ++ ys) :: [Int]-xs ++ (ys ++ zs) :: [Int]-xs ++ (zs ++ xs) :: [Int]-xs ++ (zs ++ ys) :: [Int]-xs ++ (zs ++ zs) :: [Int]-ys ++ (xs ++ xs) :: [Int]-ys ++ (xs ++ ys) :: [Int]-ys ++ (xs ++ zs) :: [Int]-ys ++ (ys ++ xs) :: [Int]-ys ++ (ys ++ ys) :: [Int]-ys ++ (ys ++ zs) :: [Int]-ys ++ (zs ++ xs) :: [Int]-ys ++ (zs ++ ys) :: [Int]-ys ++ (zs ++ zs) :: [Int]-zs ++ (xs ++ xs) :: [Int]-zs ++ (xs ++ ys) :: [Int]-zs ++ (xs ++ zs) :: [Int]-zs ++ (ys ++ xs) :: [Int]-zs ++ (ys ++ ys) :: [Int]-zs ++ (ys ++ zs) :: [Int]-zs ++ (zs ++ xs) :: [Int]-zs ++ (zs ++ ys) :: [Int]-zs ++ (zs ++ zs) :: [Int]-head xs:tail xs :: [Int]-head xs:tail ys :: [Int]-head xs:tail zs :: [Int]-head ys:tail xs :: [Int]-head ys:tail ys :: [Int]-head ys:tail zs :: [Int]-head zs:tail xs :: [Int]-head zs:tail ys :: [Int]-head zs:tail zs :: [Int]-head xs:tail [] :: [Int]-head ys:tail [] :: [Int]-head zs:tail [] :: [Int]-head []:tail xs :: [Int]-head []:tail ys :: [Int]-head []:tail zs :: [Int]-head []:tail [] :: [Int]-tail xs ++ tail xs :: [Int]-tail xs ++ tail ys :: [Int]-tail xs ++ tail zs :: [Int]-tail ys ++ tail xs :: [Int]-tail ys ++ tail ys :: [Int]-tail ys ++ tail zs :: [Int]-tail zs ++ tail xs :: [Int]-tail zs ++ tail ys :: [Int]-tail zs ++ tail zs :: [Int]-tail xs ++ tail [] :: [Int]-tail ys ++ tail [] :: [Int]-tail zs ++ tail [] :: [Int]-tail [] ++ tail xs :: [Int]-tail [] ++ tail ys :: [Int]-tail [] ++ tail zs :: [Int]-tail [] ++ tail [] :: [Int]-head (tail xs):xs :: [Int]-head (tail xs):ys :: [Int]-head (tail xs):zs :: [Int]-head (tail ys):xs :: [Int]-head (tail ys):ys :: [Int]-head (tail ys):zs :: [Int]-head (tail zs):xs :: [Int]-head (tail zs):ys :: [Int]-head (tail zs):zs :: [Int]-[head (tail xs)] :: [Int]-[head (tail ys)] :: [Int]-[head (tail zs)] :: [Int]-head (tail []):xs :: [Int]-head (tail []):ys :: [Int]-head (tail []):zs :: [Int]-[head (tail [])] :: [Int]-tail (tail xs) ++ xs :: [Int]-tail (tail xs) ++ ys :: [Int]-tail (tail xs) ++ zs :: [Int]-tail (tail ys) ++ xs :: [Int]-tail (tail ys) ++ ys :: [Int]-tail (tail ys) ++ zs :: [Int]-tail (tail zs) ++ xs :: [Int]-tail (tail zs) ++ ys :: [Int]-tail (tail zs) ++ zs :: [Int]-tail (tail []) ++ xs :: [Int]-tail (tail []) ++ ys :: [Int]-tail (tail []) ++ zs :: [Int]--Number of Eq schema classes: 90-Number of Eq 1-var classes: 68-Number of Eq 2-var classes: 191-Number of Eq 3-var classes: 406
− tests/model/list-s4.out
@@ -1,26 +0,0 @@-max expr size  =    4-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-head :: [Int] -> Int-tail :: [Int] -> [Int]--head (x:xs) == x-   xs ++ [] == xs-   [] ++ xs == xs-tail (x:xs) == xs-- [] <= xs- xs <= x:xs- xs <= xs ++ ys- xs <= ys ++ xs- xs <= tail (xs ++ xs)-[x] <= x:xs-
− tests/model/list.out
@@ -1,37 +0,0 @@-max expr size  =    5-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-[] :: [Int]-(:) :: Int -> [Int] -> [Int]-(++) :: [Int] -> [Int] -> [Int]-head :: [Int] -> Int-tail :: [Int] -> [Int]--     head (x:xs) == x-        xs ++ [] == xs-        [] ++ xs == xs-     tail (x:xs) == xs-(xs ++ ys) ++ zs == xs ++ (ys ++ zs)-    (x:xs) ++ ys == x:(xs ++ ys)--       [] <= xs-       xs <= x:xs-       xs <= xs ++ ys-       xs <= ys ++ xs-       xs <= tail (xs ++ xs)-      [x] <= x:xs-       xs <= head xs:tail xs-     x:xs <= x:y:xs- xs ++ ys <= xs ++ (ys ++ zs)- xs ++ ys <= xs ++ (zs ++ ys)-     x:xs <= x:(xs ++ ys)-     x:xs <= x:(ys ++ xs)- xs ++ ys <= xs ++ (x:ys)-    [x,y] <= x:y:xs-xs ++ [x] <= xs ++ (x:ys)-
− tests/model/minus-c-s4.out
@@ -1,232 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-negate :: Int -> Int-(-) :: Int -> Int -> Int--_ :: Int-0 :: Int-1 :: Int-negate _ :: Int-negate 1 :: Int-_ + _ :: Int-_ + 1 :: Int-1 + 1 :: Int-_ - _ :: Int-_ - 1 :: Int-1 - _ :: Int-negate (_ + _) :: Int-negate (_ + 1) :: Int-negate (1 + 1) :: Int-_ + (_ + _) :: Int-_ + (_ + 1) :: Int-_ + (1 + 1) :: Int-_ + (_ - _) :: Int-_ + (_ - 1) :: Int-_ + (1 - _) :: Int-1 + (1 + 1) :: Int-1 + (1 - _) :: Int-_ - (_ + _) :: Int-_ - (_ + 1) :: Int-_ - (1 + 1) :: Int-1 - (_ + _) :: Int--x :: Int-0 :: Int-1 :: Int-negate x :: Int-negate 1 :: Int-x + x :: Int-x + 1 :: Int-1 + 1 :: Int-x - 1 :: Int-1 - x :: Int-negate (x + x) :: Int-negate (x + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + 1) :: Int-x + (1 + 1) :: Int-x + (x - 1) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-x - (1 + 1) :: Int-1 - (x + x) :: Int--x :: Int-y :: Int-0 :: Int-1 :: Int-negate x :: Int-negate y :: Int-negate 1 :: Int-x + x :: Int-x + y :: Int-y + y :: Int-x + 1 :: Int-y + 1 :: Int-1 + 1 :: Int-x - y :: Int-y - x :: Int-x - 1 :: Int-y - 1 :: Int-1 - x :: Int-1 - y :: Int-negate (x + x) :: Int-negate (x + y) :: Int-negate (y + y) :: Int-negate (x + 1) :: Int-negate (y + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (y + y) :: Int-y + (y + y) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-y + (y + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-x + (x - y) :: Int-y + (y - x) :: Int-x + (x - 1) :: Int-x + (y - 1) :: Int-y + (y - 1) :: Int-x + (1 - y) :: Int-y + (1 - x) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-1 + (1 - y) :: Int-x - (y + y) :: Int-y - (x + x) :: Int-x - (y + 1) :: Int-y - (x + 1) :: Int-x - (1 + 1) :: Int-y - (1 + 1) :: Int-1 - (x + x) :: Int-1 - (x + y) :: Int-1 - (y + y) :: Int--x :: Int-y :: Int-z :: Int-0 :: Int-1 :: Int-negate x :: Int-negate y :: Int-negate z :: Int-negate 1 :: Int-x + x :: Int-x + y :: Int-x + z :: Int-y + y :: Int-y + z :: Int-z + z :: Int-x + 1 :: Int-y + 1 :: Int-z + 1 :: Int-1 + 1 :: Int-x - y :: Int-x - z :: Int-y - x :: Int-y - z :: Int-z - x :: Int-z - y :: Int-x - 1 :: Int-y - 1 :: Int-z - 1 :: Int-1 - x :: Int-1 - y :: Int-1 - z :: Int-negate (x + x) :: Int-negate (x + y) :: Int-negate (x + z) :: Int-negate (y + y) :: Int-negate (y + z) :: Int-negate (z + z) :: Int-negate (x + 1) :: Int-negate (y + 1) :: Int-negate (z + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (x + z) :: Int-x + (y + y) :: Int-x + (y + z) :: Int-x + (z + z) :: Int-y + (y + y) :: Int-y + (y + z) :: Int-y + (z + z) :: Int-z + (z + z) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-x + (z + 1) :: Int-y + (y + 1) :: Int-y + (z + 1) :: Int-z + (z + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-z + (1 + 1) :: Int-x + (x - y) :: Int-x + (x - z) :: Int-x + (y - z) :: Int-x + (z - y) :: Int-y + (y - x) :: Int-y + (y - z) :: Int-y + (z - x) :: Int-z + (z - x) :: Int-z + (z - y) :: Int-x + (x - 1) :: Int-x + (y - 1) :: Int-x + (z - 1) :: Int-y + (y - 1) :: Int-y + (z - 1) :: Int-z + (z - 1) :: Int-x + (1 - y) :: Int-x + (1 - z) :: Int-y + (1 - x) :: Int-y + (1 - z) :: Int-z + (1 - x) :: Int-z + (1 - y) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-1 + (1 - y) :: Int-1 + (1 - z) :: Int-x - (y + y) :: Int-x - (y + z) :: Int-x - (z + z) :: Int-y - (x + x) :: Int-y - (x + z) :: Int-y - (z + z) :: Int-z - (x + x) :: Int-z - (x + y) :: Int-z - (y + y) :: Int-x - (y + 1) :: Int-x - (z + 1) :: Int-y - (x + 1) :: Int-y - (z + 1) :: Int-z - (x + 1) :: Int-z - (y + 1) :: Int-x - (1 + 1) :: Int-y - (1 + 1) :: Int-z - (1 + 1) :: Int-1 - (x + x) :: Int-1 - (x + y) :: Int-1 - (x + z) :: Int-1 - (y + y) :: Int-1 - (y + z) :: Int-1 - (z + z) :: Int--Number of Eq schema classes: 26-Number of Eq 1-var classes: 21-Number of Eq 2-var classes: 53-Number of Eq 3-var classes: 109
− tests/model/minus-c.out
@@ -1,232 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-negate :: Int -> Int-(-) :: Int -> Int -> Int--_ :: Int-0 :: Int-1 :: Int-negate _ :: Int-negate 1 :: Int-_ + _ :: Int-_ + 1 :: Int-1 + 1 :: Int-_ - _ :: Int-_ - 1 :: Int-1 - _ :: Int-negate (_ + _) :: Int-negate (_ + 1) :: Int-negate (1 + 1) :: Int-_ + (_ + _) :: Int-_ + (_ + 1) :: Int-_ + (1 + 1) :: Int-_ + (_ - _) :: Int-_ + (_ - 1) :: Int-_ + (1 - _) :: Int-1 + (1 + 1) :: Int-1 + (1 - _) :: Int-_ - (_ + _) :: Int-_ - (_ + 1) :: Int-_ - (1 + 1) :: Int-1 - (_ + _) :: Int--x :: Int-0 :: Int-1 :: Int-negate x :: Int-negate 1 :: Int-x + x :: Int-x + 1 :: Int-1 + 1 :: Int-x - 1 :: Int-1 - x :: Int-negate (x + x) :: Int-negate (x + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + 1) :: Int-x + (1 + 1) :: Int-x + (x - 1) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-x - (1 + 1) :: Int-1 - (x + x) :: Int--x :: Int-y :: Int-0 :: Int-1 :: Int-negate x :: Int-negate y :: Int-negate 1 :: Int-x + x :: Int-x + y :: Int-y + y :: Int-x + 1 :: Int-y + 1 :: Int-1 + 1 :: Int-x - y :: Int-y - x :: Int-x - 1 :: Int-y - 1 :: Int-1 - x :: Int-1 - y :: Int-negate (x + x) :: Int-negate (x + y) :: Int-negate (y + y) :: Int-negate (x + 1) :: Int-negate (y + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (y + y) :: Int-y + (y + y) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-y + (y + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-x + (x - y) :: Int-y + (y - x) :: Int-x + (x - 1) :: Int-x + (y - 1) :: Int-y + (y - 1) :: Int-x + (1 - y) :: Int-y + (1 - x) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-1 + (1 - y) :: Int-x - (y + y) :: Int-y - (x + x) :: Int-x - (y + 1) :: Int-y - (x + 1) :: Int-x - (1 + 1) :: Int-y - (1 + 1) :: Int-1 - (x + x) :: Int-1 - (x + y) :: Int-1 - (y + y) :: Int--x :: Int-y :: Int-z :: Int-0 :: Int-1 :: Int-negate x :: Int-negate y :: Int-negate z :: Int-negate 1 :: Int-x + x :: Int-x + y :: Int-x + z :: Int-y + y :: Int-y + z :: Int-z + z :: Int-x + 1 :: Int-y + 1 :: Int-z + 1 :: Int-1 + 1 :: Int-x - y :: Int-x - z :: Int-y - x :: Int-y - z :: Int-z - x :: Int-z - y :: Int-x - 1 :: Int-y - 1 :: Int-z - 1 :: Int-1 - x :: Int-1 - y :: Int-1 - z :: Int-negate (x + x) :: Int-negate (x + y) :: Int-negate (x + z) :: Int-negate (y + y) :: Int-negate (y + z) :: Int-negate (z + z) :: Int-negate (x + 1) :: Int-negate (y + 1) :: Int-negate (z + 1) :: Int-negate (1 + 1) :: Int-x + (x + x) :: Int-x + (x + y) :: Int-x + (x + z) :: Int-x + (y + y) :: Int-x + (y + z) :: Int-x + (z + z) :: Int-y + (y + y) :: Int-y + (y + z) :: Int-y + (z + z) :: Int-z + (z + z) :: Int-x + (x + 1) :: Int-x + (y + 1) :: Int-x + (z + 1) :: Int-y + (y + 1) :: Int-y + (z + 1) :: Int-z + (z + 1) :: Int-x + (1 + 1) :: Int-y + (1 + 1) :: Int-z + (1 + 1) :: Int-x + (x - y) :: Int-x + (x - z) :: Int-x + (y - z) :: Int-x + (z - y) :: Int-y + (y - x) :: Int-y + (y - z) :: Int-y + (z - x) :: Int-z + (z - x) :: Int-z + (z - y) :: Int-x + (x - 1) :: Int-x + (y - 1) :: Int-x + (z - 1) :: Int-y + (y - 1) :: Int-y + (z - 1) :: Int-z + (z - 1) :: Int-x + (1 - y) :: Int-x + (1 - z) :: Int-y + (1 - x) :: Int-y + (1 - z) :: Int-z + (1 - x) :: Int-z + (1 - y) :: Int-1 + (1 + 1) :: Int-1 + (1 - x) :: Int-1 + (1 - y) :: Int-1 + (1 - z) :: Int-x - (y + y) :: Int-x - (y + z) :: Int-x - (z + z) :: Int-y - (x + x) :: Int-y - (x + z) :: Int-y - (z + z) :: Int-z - (x + x) :: Int-z - (x + y) :: Int-z - (y + y) :: Int-x - (y + 1) :: Int-x - (z + 1) :: Int-y - (x + 1) :: Int-y - (z + 1) :: Int-z - (x + 1) :: Int-z - (y + 1) :: Int-x - (1 + 1) :: Int-y - (1 + 1) :: Int-z - (1 + 1) :: Int-1 - (x + x) :: Int-1 - (x + y) :: Int-1 - (x + z) :: Int-1 - (y + y) :: Int-1 - (y + z) :: Int-1 - (z + z) :: Int--Number of Eq schema classes: 26-Number of Eq 1-var classes: 21-Number of Eq 2-var classes: 53-Number of Eq 3-var classes: 109
− tests/model/minus-s4.out
@@ -1,25 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-negate :: Int -> Int-(-) :: Int -> Int -> Int--             id x == x-negate (negate x) == x-            x + 0 == x-     x + negate x == 0-            x + y == y + x-            x - y == x + negate y--    x <= x + 1-x - 1 <= x-
− tests/model/minus.out
@@ -1,27 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-0 :: Int-1 :: Int-id :: Int -> Int-(+) :: Int -> Int -> Int-negate :: Int -> Int-(-) :: Int -> Int -> Int--             id x == x-negate (negate x) == x-            x + 0 == x-     x + negate x == 0-            x + y == y + x-            x - y == x + negate y-   negate (x + y) == negate x + negate y-      (x + y) + z == x + (y + z)--    x <= x + 1-x - 1 <= x-
− tests/model/monad-s4.out
@@ -1,21 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-_ :: Int -> [Int]-return :: Int -> [Int]-(>>=) :: [Int] -> (Int -> [Int]) -> [Int]-(>=>) :: (Int -> [Int]) -> (Int -> [Int]) -> Int -> [Int]--(xs >>= return) == xs-            f x == (return x >>= f)-    (f x >>= g) == (f >=> g) x- (f >=> return) == f- (return >=> f) == f--
− tests/model/monad.out
@@ -1,23 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Int-_ :: [Int]-_ :: Int -> [Int]-return :: Int -> [Int]-(>>=) :: [Int] -> (Int -> [Int]) -> [Int]-(>=>) :: (Int -> [Int]) -> (Int -> [Int]) -> Int -> [Int]--   (xs >>= return) == xs-               f x == (return x >>= f)-       (f x >>= g) == (f >=> g) x-((xs >>= f) >>= g) == (xs >>= (f >=> g))-    (f >=> return) == f-    (return >=> f) == f- ((f >=> g) >=> h) == (f >=> (g >=> h))--
− tests/model/nord-s4.out
@@ -1,15 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: EqButNotOrd-C0 :: EqButNotOrd-id :: EqButNotOrd -> EqButNotOrd--Warning: no Ord instance for EqButNotOrd, inequations of this type will not be considered---
− tests/model/nord.out
@@ -1,15 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: EqButNotOrd-C0 :: EqButNotOrd-id :: EqButNotOrd -> EqButNotOrd--Warning: no Ord instance for EqButNotOrd, inequations of this type will not be considered---
− tests/model/oddeven-s4.out
@@ -1,44 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-0 :: Int-1 :: Int-2 :: Int-False :: Bool-True :: Bool-odd :: Int -> Bool-even :: Int -> Bool-mod :: Int -> Int -> Int-(==) :: Int -> Int -> Bool-(==) :: Bool -> Bool -> Bool--         (x == x) == True-         (p == p) == True-      (p == True) == p-         (x == y) == (y == x)-  odd (x `mod` 2) == odd x- even (x `mod` 2) == even x- (False == odd x) == even x-(False == even x) == odd x-        x `mod` 1 == 0--        p ==> True-    False ==> p-   x == 0 ==> even x-   x == 1 ==> odd x-   x == 2 ==> even x-x `mod` 2 <=  2-        0 <=  x `mod` 2-x `mod` 2 <=  1-- odd x ==> x `mod` x == 0- odd x ==> 0 `mod` x == 0- odd x ==> x `mod` 2 == 1-even x ==> x `mod` 2 == 0-
− tests/model/oddeven.out
@@ -1,52 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-0 :: Int-1 :: Int-2 :: Int-False :: Bool-True :: Bool-odd :: Int -> Bool-even :: Int -> Bool-mod :: Int -> Int -> Int-(==) :: Int -> Int -> Bool-(==) :: Bool -> Bool -> Bool--           (x == x) == True-           (p == p) == True-        (p == True) == p-           (x == y) == (y == x)-    odd (x `mod` 2) == odd x-   even (x `mod` 2) == even x-   (False == odd x) == even x-  (False == even x) == odd x-  (odd x == even x) == False-   (2 == x `mod` 2) == False-   (0 == x `mod` 2) == even x-   (1 == x `mod` 2) == odd x-  (even x == odd y) == (odd x == even y)- (even x == even y) == (odd x == odd y)-          x `mod` 1 == 0-(x `mod` 2) `mod` 2 == x `mod` 2--        p ==> True-    False ==> p-   x == 0 ==> even x-   x == 1 ==> odd x-   x == 2 ==> even x-x `mod` 2 <=  2-        0 <=  x `mod` 2-x `mod` 2 <=  1-- odd x ==>           x `mod` x == 0- odd x ==>           0 `mod` x == 0- odd x ==>           x `mod` 2 == 1-even x ==>           x `mod` 2 == 0- odd y ==> (x `mod` y) `mod` y == x `mod` y-
− tests/model/plus-abs-s4.out
@@ -1,40 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-(+) :: Int -> Int -> Int-id :: Int -> Int-abs :: Int -> Int-0 :: Int-1 :: Int-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool--(x <= abs x) == True- (abs x < x) == False-(0 <= abs x) == True- (abs x < 0) == False-(abs x <= x) == (0 <= x)- (x < abs x) == (x < 0)-(x == abs x) == (0 <= x)-    (x == 0) == (abs x <= 0)-        id x == x-       x + 0 == x- abs (abs x) == abs x-       x + y == y + x--x <= abs x-0 <= abs x-x <= x + 1--x <= 0 ==> x + abs x == 0-
− tests/model/plus-abs.out
@@ -1,68 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-(+) :: Int -> Int -> Int-id :: Int -> Int-abs :: Int -> Int-0 :: Int-1 :: Int-(<=) :: Int -> Int -> Bool-(<) :: Int -> Int -> Bool-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool--       (x <= abs x) == True-       (0 <= abs x) == True-       (1 == x + x) == False-       (abs x <= x) == (0 <= x)-       (x == abs x) == (0 <= x)-           (x == 0) == (abs x <= 0)-           (0 <= x) == (y <= x + y)-       (x + y <= x) == (y <= 0)-            (x < y) == (x + 1 <= y)-       (0 <= x + x) == (0 <= x)-       (1 <= x + x) == (1 <= x)-       (x + x <= 0) == (x <= 0)-       (x + x <= 1) == (x <= 0)-       (x == x + y) == (abs y <= 0)-(False == (x <= y)) == (y + 1 <= x)-               id x == x-              x + 0 == x-        abs (abs x) == abs x-              x + y == y + x-        abs (x + x) == abs x + abs x-    abs (x + abs x) == x + abs x-    abs (1 + abs x) == 1 + abs x-        (x + y) + z == x + (y + z)--     x <= y ==> x <= abs y- abs x <= y ==> x <= y-  abs x < y ==> x < y-     x <= 0 ==> x <= abs y- abs x <= y ==> 0 <= y-  abs x < y ==> 1 <= y-     x == 1 ==> 1 == abs x-      x < 0 ==> 1 <= abs x-          x <=  abs x-          0 <=  abs x-          x <=  x + 1-          x <=  x + abs y-          x <=  abs (x + x)-          x <=  1 + abs x-          0 <=  x + abs x-      x + y <=  x + abs y-abs (x + 1) <=  1 + abs x--    x <= 0 ==>       x + abs x == 0-abs x <= y ==>     abs (x + y) == x + y-abs y <= x ==>     abs (x + y) == x + y-    y <= x ==> abs (x + abs y) == x + abs y-
− tests/model/pretty-compact-s4.out
@@ -1,32 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  360-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Char  (holes: Char)-_ :: Int  (holes: Int)-_ :: ODoc Any  (holes: ODoc Any)-_ :: [Char]  (holes: [Char])-text :: [Char] -> ODoc Any-char :: Char -> ODoc Any-flush :: ODoc Any -> ODoc Any-hang :: Int -> ODoc Any -> ODoc Any -> ODoc Any-(<>) :: ODoc Any -> ODoc Any -> ODoc Any-(<+>) :: ODoc Any -> ODoc Any -> ODoc Any-($$) :: ODoc Any -> ODoc Any -> ODoc Any-(</>) :: ODoc Any -> ODoc Any -> ODoc Any-(<//>) :: ODoc Any -> ODoc Any -> ODoc Any-(<$$>) :: ODoc Any -> ODoc Any -> ODoc Any--        d1 $$ d2 == flush d1 <> d2-      d1 <$$> d2 == flush d1 <> d2- flush d1 </> d2 == flush (flush d1) <> d2-flush d1 <//> d2 == flush (flush d1) <> d2--      d1 <= flush d1-      d1 <= d1 $$ d2-      d1 <= d1 </> d2-      d1 <= d1 <//> d2-flush d1 <= d1 $$ d2-
− tests/model/pretty-compact.out
@@ -1,32 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  360-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Char  (holes: Char)-_ :: Int  (holes: Int)-_ :: ODoc Any  (holes: ODoc Any)-_ :: [Char]  (holes: [Char])-text :: [Char] -> ODoc Any-char :: Char -> ODoc Any-flush :: ODoc Any -> ODoc Any-hang :: Int -> ODoc Any -> ODoc Any -> ODoc Any-(<>) :: ODoc Any -> ODoc Any -> ODoc Any-(<+>) :: ODoc Any -> ODoc Any -> ODoc Any-($$) :: ODoc Any -> ODoc Any -> ODoc Any-(</>) :: ODoc Any -> ODoc Any -> ODoc Any-(<//>) :: ODoc Any -> ODoc Any -> ODoc Any-(<$$>) :: ODoc Any -> ODoc Any -> ODoc Any--        d1 $$ d2 == flush d1 <> d2-      d1 <$$> d2 == flush d1 <> d2- flush d1 </> d2 == flush (flush d1) <> d2-flush d1 <//> d2 == flush (flush d1) <> d2--      d1 <= flush d1-      d1 <= d1 $$ d2-      d1 <= d1 </> d2-      d1 <= d1 <//> d2-flush d1 <= d1 $$ d2-
− tests/model/pretty-s4.out
@@ -1,20 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Doc-_ :: Int-_ :: [Char]-($$) :: Doc -> Doc -> Doc-(<>) :: Doc -> Doc -> Doc-nest :: Int -> Doc -> Doc-(++) :: [Char] -> [Char] -> [Char]-length :: [Char] -> Int---d1 <= d1 $$ d2-d1 <= d1 <> d2-
− tests/model/pretty.out
@@ -1,33 +0,0 @@-max expr size  =    7-  |- on ineqs  =    6-  |- on conds  =    6-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Doc-_ :: Int-_ :: [Char]-($$) :: Doc -> Doc -> Doc-(<>) :: Doc -> Doc -> Doc-nest :: Int -> Doc -> Doc-(++) :: [Char] -> [Char] -> [Char]-length :: [Char] -> Int--            d1 <> nest x d2 == d1 <> d2-           (d1 $$ d2) $$ d3 == d1 $$ (d2 $$ d3)-           (d1 <> d2) <> d3 == d1 <> (d2 <> d3)-         nest x (nest y d1) == nest y (nest x d1)-           (d1 $$ d2) <> d3 == d1 $$ (d2 <> d3)-          nest x (d1 <> d2) == nest x d1 <> d2-    d1 <> (nest x d2 <> d3) == d1 <> (d2 <> d3)-          nest x (d1 $$ d2) == nest x d1 $$ nest x d2-nest (length (cs ++ ds)) d1 == nest (length cs) (nest (length ds) d1)--      d1 <= d1 $$ d2-      d1 <= d1 <> d2-d1 $$ d2 <= d1 $$ (d2 $$ d3)-d1 <> d2 <= d1 <> (d2 <> d3)-d1 $$ d2 <= d1 $$ (d2 <> d3)-d1 <> d2 <= d1 <> (d2 $$ d3)-
− tests/model/ratio-s4.out
@@ -1,59 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Integer-_ :: Ratio Integer-id :: Ratio Integer -> Ratio Integer-abs :: Ratio Integer -> Ratio Integer-negate :: Ratio Integer -> Ratio Integer-(+) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(*) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(/) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(%) :: Integer -> Integer -> Ratio Integer-recip :: Ratio Integer -> Ratio Integer-numerator :: Ratio Integer -> Integer-denominator :: Ratio Integer -> Integer-0 % 1 :: Ratio Integer-1 % 1 :: Ratio Integer-0 :: Integer-1 :: Integer--    denominator (abs q) == denominator q- denominator (negate q) == denominator q-      numerator (x % 1) == x-    denominator (x % 1) == 1-denominator (q + 1 % 1) == denominator q-                   id q == q-      negate (negate q) == q-              q + 0 % 1 == q-            q * (1 % 1) == q-            q / (1 % 1) == q-            q * (0 % 1) == 0 % 1-            abs (abs q) == abs q-         abs (negate q) == abs q-           q + negate q == 0 % 1-      0 % denominator q == 0 % 1-                  q + r == r + q-                  q * r == r * q-     q / negate (1 % 1) == negate q-            abs (q * q) == q * q-           q * negate r == negate (q * r)--                   0 <= denominator q-                   1 <= denominator q-                   0 <= numerator (abs q)-         numerator q <= numerator (abs q)-numerator (negate q) <= numerator (abs q)-                   q <= abs q-               0 % 1 <= abs q-                   q <= q + 1 % 1-               0 % 1 <= q * q-            negate q <= abs q-      negate (abs q) <= q-      negate (abs q) <= 0 % 1-      negate (abs q) <= negate q-
− tests/model/ratio.out
@@ -1,114 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Integer-_ :: Ratio Integer-id :: Ratio Integer -> Ratio Integer-abs :: Ratio Integer -> Ratio Integer-negate :: Ratio Integer -> Ratio Integer-(+) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(*) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(/) :: Ratio Integer -> Ratio Integer -> Ratio Integer-(%) :: Integer -> Integer -> Ratio Integer-recip :: Ratio Integer -> Ratio Integer-numerator :: Ratio Integer -> Integer-denominator :: Ratio Integer -> Integer-0 % 1 :: Ratio Integer-1 % 1 :: Ratio Integer-0 :: Integer-1 :: Integer--            denominator (abs q) == denominator q-         denominator (negate q) == denominator q-              numerator (x % 1) == x-            denominator (x % 1) == 1-        denominator (q + 1 % 1) == denominator q-  numerator (1 % denominator q) == 1-denominator (1 % denominator q) == denominator q-        denominator (q * abs r) == denominator (q * r)-                           id q == q-              negate (negate q) == q-                      q + 0 % 1 == q-                    q * (1 % 1) == q-                    q / (1 % 1) == q-                    q * (0 % 1) == 0 % 1-                    abs (abs q) == abs q-                 abs (negate q) == abs q-                   q + negate q == 0 % 1-              0 % denominator q == 0 % 1-                          q + r == r + q-                          q * r == r * q-    numerator q % denominator q == q-             q / negate (1 % 1) == negate q-  denominator q % denominator q == 1 % 1-                    abs (q * q) == q * q-                   q * negate r == negate (q * r)-                abs (q * abs r) == abs (q * r)-                   negate q + r == negate (q + negate r)-                  abs q * abs r == abs (q * r)-                abs (q + abs q) == q + abs q-                  abs q + abs q == abs (q + q)-            abs (1 % 1 + abs q) == 1 % 1 + abs q-        abs (1 % denominator q) == 1 % denominator q-        abs (denominator q % 1) == denominator q % 1-      recip (1 % denominator q) == denominator q % 1-      recip (denominator q % 1) == 1 % denominator q- x % numerator (negate (1 % 1)) == negate (x % 1)-                    (q + r) + s == q + (r + s)-                    (q * r) * s == q * (r * s)-                    (q + q) * r == q * (r + r)-                q * (r + 1 % 1) == q + q * r-          numerator (abs q) % 1 == abs (numerator q % 1)-       numerator (negate q) % 1 == negate (numerator q % 1)--                         0 <= denominator q-                         1 <= denominator q-                         0 <= numerator (abs q)-               numerator q <= numerator (abs q)-                         0 <= numerator (q * q)-numerator (negate (abs q)) <= 0-               numerator q <= numerator (q * q)-             denominator q <= denominator (q * q)-       denominator (q + q) <= denominator q-               numerator q <= numerator (q + 1 % 1)-      numerator (negate q) <= numerator (abs q)-numerator (negate (abs q)) <= numerator q-         numerator (abs q) <= numerator (q * q)-numerator (negate (abs q)) <= numerator (negate q)-                         q <= abs q-                     0 % 1 <= abs q-                         q <= q + 1 % 1-                     0 % 1 <= q * q-                  negate q <= abs q-            negate (abs q) <= q-            negate (abs q) <= 0 % 1-                         q <= q + abs r-                         q <= abs (q + q)-            negate (abs q) <= negate q-                         q <= 1 % 1 + abs q-                     0 % 1 <= q + abs q-            negate (q * q) <= 0 % 1-        q + negate (1 % 1) <= q-                     0 % 1 <= 1 % denominator q-                     0 % 1 <= denominator q % 1-                     1 % 1 <= denominator q % 1-         1 % denominator q <= 1 % 1-                     abs q <= abs (q + q)-        negate (q + 1 % 1) <= negate q-                     q + r <= q + abs r-                 q * abs q <= q * q-        negate (q + 1 % 1) <= q * q-            negate (q * q) <= q + 1 % 1-        q + negate (1 % 1) <= q * q-                 q * abs r <= abs (q * r)-              q + negate r <= q + abs r-         x % denominator q <= abs (x % 1)-                 q + abs q <= abs (q + q)-            negate (q * q) <= q * abs q-            negate (q * q) <= 1 % 1 + negate q-           abs (q + 1 % 1) <= 1 % 1 + abs q-
− tests/model/regexes-s4.out
@@ -1,45 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =   30-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: RE Symbol-Empty :: RE Symbol-None :: RE Symbol-Star :: RE Symbol -> RE Symbol-(:+) :: RE Symbol -> RE Symbol -> RE Symbol-(:.) :: RE Symbol -> RE Symbol -> RE Symbol-(<=) :: RE Symbol -> RE Symbol -> Bool-(==) :: RE Symbol -> RE Symbol -> Bool-False :: Bool-True :: Bool--     (r <= Empty) == True-      (None <= r) == True-    (r <= Star s) == True- (Star r <= None) == False-     (r == Empty) == (Empty <= r)-      (r == None) == (r <= None)-    (r == Star s) == (Star s <= r)-           r :+ r == r-        r :+ None == r-       r :. Empty == r-        r :. None == None-    Star (Star r) == Star r-           r :+ s == s :+ r-           r :. s == s :. r-      r :+ Star r == Star r-Star (r :+ Empty) == Star r-  Empty :+ Star r == Star r-- r <= None ==> r <= s-      None <=  r-         r <=  Star r-     Empty <=  Star r-         r <=  r :+ s-    r :. r <=  Star r-r :+ Empty <=  Star r-    r :. s <=  r :+ s-
− tests/model/regexes.out
@@ -1,45 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =   30-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: RE Symbol-Empty :: RE Symbol-None :: RE Symbol-Star :: RE Symbol -> RE Symbol-(:+) :: RE Symbol -> RE Symbol -> RE Symbol-(:.) :: RE Symbol -> RE Symbol -> RE Symbol-(<=) :: RE Symbol -> RE Symbol -> Bool-(==) :: RE Symbol -> RE Symbol -> Bool-False :: Bool-True :: Bool--     (r <= Empty) == True-      (None <= r) == True-    (r <= Star s) == True- (Star r <= None) == False-     (r == Empty) == (Empty <= r)-      (r == None) == (r <= None)-    (r == Star s) == (Star s <= r)-           r :+ r == r-        r :+ None == r-       r :. Empty == r-        r :. None == None-    Star (Star r) == Star r-           r :+ s == s :+ r-           r :. s == s :. r-      r :+ Star r == Star r-Star (r :+ Empty) == Star r-  Empty :+ Star r == Star r-- r <= None ==> r <= s-      None <=  r-         r <=  Star r-     Empty <=  Star r-         r <=  r :+ s-    r :. r <=  Star r-r :+ Empty <=  Star r-    r :. s <=  r :+ s-
− tests/model/sets-s4.out
@@ -1,50 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: Set Int-emptyS :: Set Int-singleS :: Int -> Set Int-insertS :: Int -> Set Int -> Set Int-deleteS :: Int -> Set Int -> Set Int-sizeS :: Set Int -> Int-(<~) :: Int -> Set Int -> Bool-(\/) :: Set Int -> Set Int -> Set Int-(/\) :: Set Int -> Set Int -> Set Int-False :: Bool-True :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool-(==) :: Set Int -> Set Int -> Bool--          x <~ emptyS == False-       x <~ singleS x == True-(emptyS == singleS x) == False-             (x == y) == x <~ singleS y-       x <~ singleS y == y <~ singleS x-    sizeS (singleS x) == sizeS (singleS y)-               s \/ s == s-               s /\ s == s-          s \/ emptyS == s-     deleteS x emptyS == emptyS-          s /\ emptyS == emptyS-     insertS x emptyS == singleS x-deleteS x (singleS x) == emptyS-               s \/ t == t \/ s-               s /\ t == t /\ s-insertS x (singleS x) == singleS x-       s \/ singleS x == insertS x s-insertS x (singleS y) == insertS y (singleS x)--          sizeS emptyS <= sizeS s-                emptyS <= s-singleS (sizeS emptyS) <= singleS (sizeS s)--x <~ s ==>    insertS x s == s-x <~ s ==> s /\ singleS x == singleS x-
− tests/model/sets.out
@@ -1,81 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: Set Int-emptyS :: Set Int-singleS :: Int -> Set Int-insertS :: Int -> Set Int -> Set Int-deleteS :: Int -> Set Int -> Set Int-sizeS :: Set Int -> Int-(<~) :: Int -> Set Int -> Bool-(\/) :: Set Int -> Set Int -> Set Int-(/\) :: Set Int -> Set Int -> Set Int-False :: Bool-True :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: Int -> Int -> Bool-(==) :: Set Int -> Set Int -> Bool--                  x <~ emptyS == False-               x <~ singleS x == True-        (emptyS == singleS x) == False-             x <~ insertS x s == True-             x <~ deleteS x s == False-      (emptyS == insertS x s) == False-                     (x == y) == x <~ singleS y-           (s == insertS x s) == x <~ s-               x <~ singleS y == y <~ singleS x-     (singleS x == singleS y) == x <~ singleS y-                (s /\ t == s) == (t == s \/ t)-           (s == deleteS x s) == (False == x <~ s)-            sizeS (singleS x) == sizeS (singleS y)-sizeS (deleteS x (singleS y)) == sizeS (deleteS y (singleS x))-                       s \/ s == s-                       s /\ s == s-                  s \/ emptyS == s-             deleteS x emptyS == emptyS-                  s /\ emptyS == emptyS-             insertS x emptyS == singleS x-        deleteS x (singleS x) == emptyS-                       s \/ t == t \/ s-                       s /\ t == t /\ s-             s \/ deleteS x s == s-                s \/ (s /\ t) == s-             s /\ insertS x s == s-                s /\ (s \/ t) == s-        insertS x (singleS x) == singleS x-               s \/ singleS x == insertS x s-      insertS x (insertS x s) == insertS x s-      deleteS x (deleteS x s) == deleteS x s-      insertS x (deleteS x s) == insertS x s-      deleteS x (insertS x s) == deleteS x s-        insertS x (singleS y) == insertS y (singleS x)-      insertS x (insertS y s) == insertS y (insertS x s)-      deleteS x (deleteS y s) == deleteS y (deleteS x s)-                (s \/ t) \/ u == s \/ (t \/ u)-                (s /\ t) /\ u == s /\ (t /\ u)-             s \/ insertS x t == insertS x (s \/ t)-             s /\ deleteS x t == deleteS x (s /\ t)--          s == singleS x ==> x <~ s-            sizeS emptyS <=  sizeS s-                 sizeS s <=  sizeS (insertS x s)-                 sizeS s <=  sizeS (s \/ t)-     sizeS (deleteS x s) <=  sizeS s-          sizeS (s /\ t) <=  sizeS s-       sizeS (singleS x) <=  sizeS (insertS y s)-     sizeS (deleteS x s) <=  sizeS (t \/ s)-                  emptyS <=  s-   deleteS x (singleS y) <=  singleS y-          s /\ singleS x <=  singleS x-  singleS (sizeS emptyS) <=  singleS (sizeS s)-insertS (sizeS emptyS) s <=  singleS (sizeS s)-insertS (sizeS emptyS) s <=  singleS (sizeS (singleS x))--
− tests/model/speculate-reason-s4.out
@@ -1,28 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   = 6000-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Equation-_ :: Expr-_ :: Thyght-_ :: [Expr]-okThy :: Thyght -> Bool-insert :: Expr -> Thyght -> Thyght-complete :: Thyght -> Thyght-normalize :: Thyght -> Expr -> Expr-equivalent :: Thyght -> Expr -> Expr -> Bool-append :: Thyght -> [Expr] -> Thyght-emptyThy :: Thyght-True :: Bool-False :: Bool-Equation :: Expr -> Expr -> Equation--              okThy t == True-     equivalent t e e == True-     equivalent t e f == equivalent t f e- normalize emptyThy e == e-complete (complete t) == complete t-
− tests/model/speculate-reason.out
@@ -1,28 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   = 6000-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Equation-_ :: Expr-_ :: Thyght-_ :: [Expr]-okThy :: Thyght -> Bool-insert :: Expr -> Thyght -> Thyght-complete :: Thyght -> Thyght-normalize :: Thyght -> Expr -> Expr-equivalent :: Thyght -> Expr -> Expr -> Bool-append :: Thyght -> [Expr] -> Thyght-emptyThy :: Thyght-True :: Bool-False :: Bool-Equation :: Expr -> Expr -> Equation--              okThy t == True-     equivalent t e e == True-     equivalent t e f == equivalent t f e- normalize emptyThy e == e-complete (complete t) == complete t-
− tests/model/string-s4.out
@@ -1,47 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: [Char]-_ :: [[Char]]-"" :: [Char]-" " :: [Char]-"\n" :: [Char]-lines :: [Char] -> [[Char]]-words :: [Char] -> [[Char]]-unlines :: [[Char]] -> [Char]-unwords :: [[Char]] -> [Char]-(++) :: [Char] -> [Char] -> [Char]--                     cs ++ "" == cs-                     "" ++ cs == cs-unlines (lines (unlines css)) == unlines css-   lines (unlines (lines cs)) == lines cs-   words (unlines (words cs)) == words cs-   lines (unlines (words cs)) == words cs-   words (unlines (lines cs)) == words cs-          words (unwords css) == words (unlines css)-            words (cs ++ " ") == words cs-           words (cs ++ "\n") == words cs-            words (" " ++ cs) == words cs-           words ("\n" ++ cs) == words cs--                 "" <= cs-                 cs <= cs ++ ds-                 cs <= unlines (lines cs)-               "\n" <= cs ++ "\n"-               "\n" <= cs ++ " "-         "\n" ++ cs <= " "- unwords (lines cs) <= cs ++ ds-         "\n" ++ cs <= ds ++ " "- unlines (lines cs) <= cs ++ cs-         "\n" ++ cs <= cs ++ "\n"-         cs ++ "\n" <= cs ++ " "- unlines (lines cs) <= cs ++ " "- unlines (lines cs) <= cs ++ "\n"-           lines "" <= css-lines (unlines css) <= css-
− tests/model/string.out
@@ -1,73 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: [Char]-_ :: [[Char]]-"" :: [Char]-" " :: [Char]-"\n" :: [Char]-lines :: [Char] -> [[Char]]-words :: [Char] -> [[Char]]-unlines :: [[Char]] -> [Char]-unwords :: [[Char]] -> [Char]-(++) :: [Char] -> [Char] -> [Char]--                            cs ++ "" == cs-                            "" ++ cs == cs-       unlines (lines (unlines css)) == unlines css-unwords (lines (unwords (lines cs))) == unwords (lines cs)-unwords (lines (unwords (words cs))) == unwords (words cs)-        unlines (lines (cs ++ "\n")) == cs ++ "\n"-                    (cs ++ ds) ++ es == cs ++ (ds ++ es)-            cs ++ unlines (lines cs) == unlines (lines (cs ++ cs))-           cs ++ unlines (lines " ") == unlines (lines (cs ++ " "))-           " " ++ unwords (lines cs) == unwords (lines (" " ++ cs))-          "\n" ++ unlines (lines cs) == unlines (lines ("\n" ++ cs))-           unlines (lines " ") ++ cs == " " ++ ("\n" ++ cs)-          lines (unlines (lines cs)) == lines cs-          words (unlines (words cs)) == words cs-          lines (unlines (words cs)) == words cs-          words (unlines (lines cs)) == words cs-                 words (unwords css) == words (unlines css)-                   words (cs ++ " ") == words cs-                  words (cs ++ "\n") == words cs-                   words (" " ++ cs) == words cs-                  words ("\n" ++ cs) == words cs-           words (cs ++ unwords css) == words (cs ++ unlines css)--                           "" <= cs-                           cs <= cs ++ ds-                           cs <= unlines (lines cs)-                         "\n" <= cs ++ "\n"-                         "\n" <= cs ++ " "-                   "\n" ++ cs <= " "-           unwords (lines cs) <= cs ++ ds-                   "\n" ++ cs <= ds ++ " "-           unlines (lines cs) <= cs ++ cs-unwords (lines (unwords css)) <= unwords css-                   "\n" ++ cs <= cs ++ "\n"-                  unwords css <= unwords (lines (unlines css))-                   cs ++ "\n" <= cs ++ " "-                  unlines css <= unwords css ++ " "-                  unlines css <= unwords css ++ "\n"-           unlines (lines cs) <= cs ++ " "-           unlines (lines cs) <= cs ++ "\n"-unwords (lines (unlines css)) <= unwords css ++ cs-           unlines css ++ " " <= unwords css ++ " "-                     lines "" <= css-          lines (unlines css) <= css-                     lines cs <= lines (cs ++ ds)-                     words cs <= words (cs ++ ds)-                     words cs <= lines (unwords (words cs))-                   lines "\n" <= lines (cs ++ "\n")-                   lines "\n" <= lines (cs ++ " ")-           lines ("\n" ++ cs) <= lines " "-   lines (unwords (lines cs)) <= lines (cs ++ ds)-           lines ("\n" ++ cs) <= lines (ds ++ " ")-           lines ("\n" ++ cs) <= lines (cs ++ "\n")-           lines (cs ++ "\n") <= lines (cs ++ " ")-
− tests/model/tauts-s4.out
@@ -1,33 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   = 4000-min  #-tests   =  200  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Name-_ :: Prop-False :: Bool-True :: Bool-(==) :: Prop -> Prop -> Bool-eval :: Prop -> Prop-varOf :: Prop -> Name-subst :: Name -> Bool -> Prop -> Prop-taut :: Prop -> Bool-(==) :: Bool -> Bool -> Bool-(==) :: Name -> Name -> Bool--     (p == p) == True-     (p == p) == True-  (p == True) == p-     (n == n) == True-taut (eval p) == taut p-     (p == q) == (q == p)-eval (eval p) == eval p--    p ==> True-False ==> p--p ==> subst n True q == subst n p q-
− tests/model/tauts.out
@@ -1,37 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   = 4000-min  #-tests   =  200  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: Bool-_ :: Name-_ :: Prop-False :: Bool-True :: Bool-(==) :: Prop -> Prop -> Bool-eval :: Prop -> Prop-varOf :: Prop -> Name-subst :: Name -> Bool -> Prop -> Prop-taut :: Prop -> Bool-(==) :: Bool -> Bool -> Bool-(==) :: Name -> Name -> Bool--     (p == p) == True-     (p == p) == True-  (p == True) == p-     (n == n) == True-taut (eval p) == taut p-     (p == q) == (q == p)-eval (eval p) == eval p--              p ==> True-          False ==> p-    p == eval q ==> p == eval p-    subst n p q <=  q-    subst n p q <=  subst n True q-subst n False p <=  subst n q p--taut q ==> subst n (taut q) p == subst n True p-
− tests/model/tuples-s4.out
@@ -1,36 +0,0 @@-max expr size  =    4-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: ()-_ :: Int-_ :: (Int,Int)-_ :: (Int,Int,Int)-() :: ()-id :: () -> ()-id :: Int -> Int-id :: (Int,Int) -> (Int,Int)-id :: (Int,Int,Int) -> (Int,Int,Int)-(,) :: Int -> Int -> (Int,Int)-(,,) :: Int -> Int -> Int -> (Int,Int,Int)-fst :: (Int,Int) -> Int-snd :: (Int,Int) -> Int-swap :: (Int,Int) -> (Int,Int)-right :: (Int,Int,Int) -> (Int,Int,Int)-left :: (Int,Int,Int) -> (Int,Int,Int)--                     id x == x-                fst (x,y) == x-                snd (x,y) == y-            fst (swap xy) == snd xy-            snd (swap xy) == fst xy-                    id xy == xy-           swap (swap xy) == xy-               swap (x,y) == (y,x)-                   id xyz == xyz-right (right (right xyz)) == xyz-                 left xyz == right (right xyz)--
− tests/model/tuples.out
@@ -1,35 +0,0 @@-max expr size  =    5-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: ()-_ :: Int-_ :: (Int,Int)-_ :: (Int,Int,Int)-() :: ()-id :: () -> ()-id :: Int -> Int-id :: (Int,Int) -> (Int,Int)-id :: (Int,Int,Int) -> (Int,Int,Int)-(,) :: Int -> Int -> (Int,Int)-(,,) :: Int -> Int -> Int -> (Int,Int,Int)-fst :: (Int,Int) -> Int-snd :: (Int,Int) -> Int-swap :: (Int,Int) -> (Int,Int)-right :: (Int,Int,Int) -> (Int,Int,Int)-left :: (Int,Int,Int) -> (Int,Int,Int)--                     id x == x-                fst (x,y) == x-                snd (x,y) == y-                    id xy == xy-          (fst xy,snd xy) == xy-                  swap xy == (snd xy,fst xy)-                   id xyz == xyz-right (right (right xyz)) == xyz-                 left xyz == right (right xyz)-            right (x,y,z) == (z,x,y)--
− tests/model/unit-s4.out
@@ -1,13 +0,0 @@-max expr size  =    4-  |- on ineqs  =    3-  |- on conds  =    3-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: ()-() :: ()-id :: () -> ()---
− tests/model/unit.out
@@ -1,13 +0,0 @@-max expr size  =    5-  |- on ineqs  =    4-  |- on conds  =    4-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    2  (for inequational and conditional laws)--_ :: ()-() :: ()-id :: () -> ()---
− tests/model/zip-s4.out
@@ -1,23 +0,0 @@-max expr size  =    4-  |- on ineqs  =    5-  |- on conds  =    5-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-_ :: [(Int,Int)]-(++) :: [Int] -> [Int] -> [Int]-(==) :: Int -> Int -> Bool-length :: [Int] -> Int-zip :: [Int] -> [Int] -> [(Int,Int)]-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: [Int] -> [Int] -> Bool-(==) :: [(Int,Int)] -> [(Int,Int)] -> Bool---
− tests/model/zip.out
@@ -1,25 +0,0 @@-max expr size  =    5-max  #-tests   =  500-min  #-tests   =   25  (to consider p ==> q true)-max  #-vars    =    3  (for inequational and conditional laws)--_ :: Bool-_ :: Int-_ :: [Int]-_ :: [(Int,Int)]-(++) :: [Int] -> [Int] -> [Int]-(==) :: Int -> Int -> Bool-length :: [Int] -> Int-zip :: [Int] -> [Int] -> [(Int,Int)]-True :: Bool-False :: Bool-(==) :: Bool -> Bool -> Bool-(==) :: [Int] -> [Int] -> Bool-(==) :: [(Int,Int)] -> [(Int,Int)] -> Bool--zip xs (xs ++ ys) == zip xs xs-zip (xs ++ ys) xs == zip xs xs--length xs == length ys ==> zip xs (ys ++ zs) == zip xs ys-length xs == length ys ==> zip (xs ++ zs) ys == zip xs ys-
− tests/test-creason.hs
@@ -1,61 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.CondReason---- Utils-import Test.Speculate.Reason (canonicalEqn, canonicalizeEqn, emptyThy)-import Test.Speculate.Expr (val)--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True--  , creductions1 (zero -<=- yy) (yy -+- abs' yy) (zero -<=- xx, abs' xx, xx)-    == [yy -+- yy]--  , creductions1 (zero -<=- yy) (abs' yy -+- abs' yy) (zero -<=- xx, abs' xx, xx)-    == [yy -+- abs' yy, abs' yy -+- yy]--  , cnormalize-      emptyChy{cequations = [(zero -<=- xx, abs' xx, xx)]}-      (zero -<=- yy) (abs' yy -+- abs' yy)-    == yy -+- yy--  , not-  $ cequivalent-      emptyChy{cequations = []}-      (zero -<=- yy) (abs' yy -+- yy) (yy -+- yy)--  , cequivalent-      emptyChy{cequations = [(zero -<=- xx, abs' xx, xx)]}-      (zero -<=- yy) (abs' yy -+- yy) (yy -+- yy)--  , holds n $ \e1 e2    -> canonicalCEqn compare (val False,e1,e2) == canonicalEqn emptyThy (e1,e2)-  , holds n $ \e1 e2    -> sndTrd (canonicalizeCEqn compare (val False,e1,e2))-                        == canonicalizeEqn emptyThy (e1,e2)-  , holds n $ \e1 e2 ce -> sndTrd (canonicalizeCEqn compare (val False,e1,e2))-                        == sndTrd (canonicalizeCEqn compare (ce,    e1,e2))--  , const True -- TODO: make the following test pass!-  $ let chy = cinsert ( elem' xx xxs-                      , insert' xx (xxs -++- yys)-                      , insert' xx xxs -++- yys-                      )-                      emptyChy-    in cnormalize chy (elem' xx xxs) (insert' xx (xxs -++- yys)) == insert' xx xxs -++- yys--  , const True -- TODO: make the following test pass!-  $ creductions1 (elem' xx xxs) (insert' xx (xxs -++- yys))-      ( elem' xx xxs, insert' xx (xxs -++- yys), insert' xx xxs -++- yys)-    == [insert' xx xxs -++- yys]--  , const True -- TODO: make the following test pass!-  $ holds n $ \(BoolE ce) (SameTypeE e1 e2) -> creductions1 ce e1 (ce,e1,e2) == [e2]-  ]-  where-  sndTrd (_,y,z) = (y,z)
− tests/test-engine.hs
@@ -1,93 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.Engine---- Helper functions-import Test.Speculate.Reason (emptyThy)-import Test.Speculate.Utils--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True-  -  , holds n $ \e -> mostGeneral  e == head (fastCanonicalVariations e)-  , holds n $ \e -> mostSpecific e == last (fastCanonicalVariations e)-  , holds n $ \e -> allLater (\e1 e0 -> not (e0 `isInstanceOf` e1))-                  $ fastCanonicalVariations e--  , equivalencesBetween (===) (i_ -+- i_) (i_ -+- i_)-    == [ ( xx -+- yy, yy -+- xx ) ]--  , equivalencesBetween (===) (i_ -+- (i_ -+- i_)) ((i_ -+- i_) -+- i_)-    == [ ( xx -+- (yy -+- zz), (xx -+- yy) -+- zz )-       , ( xx -+- (yy -+- zz), (xx -+- zz) -+- yy )-       , ( xx -+- (yy -+- zz), (yy -+- xx) -+- zz )-       , ( xx -+- (yy -+- zz), (yy -+- zz) -+- xx )-       , ( xx -+- (yy -+- zz), (zz -+- xx) -+- yy )-       , ( xx -+- (yy -+- zz), (zz -+- yy) -+- xx ) ]---- TODO: make the following pass (add ValueE and SameTypeValueE to Test)---, holds n $ \(SameTypeE e1 e2) (SameTypeE e3 e4)---         -> subConsequence emptyThy (e1 -==- e2) e3 e4---         == subConsequence emptyThy (e2 -==- e1) e3 e4---, holds n $ \(SameTypeE e1 e2) (SameTypeE e3 e4)---         -> subConsequence emptyThy (e1 -==- e2) e3 e4---         == subConsequence emptyThy (e1 -==- e2) e4 e3---, holds n $ \...---         -> not $ subConsequence emptyThy (e1 -<=- e2) e3 e4-  ,       subConsequence emptyThy [] (xx -==- yy) (xx -+- yy) (xx -+- xx)-  , not $ subConsequence emptyThy [] (xx -<=- yy) (xx -+- yy) (xx -+- xx)-  ,       subConsequence emptyThy [(xx -<=- yy, [xx -==- yy])]-                                     (xx -<=- yy) (xx -+- yy) (xx -+- xx)-  ,       subConsequence emptyThy [] (abs' xx -==- abs' yy) (abs' xx) (abs' yy)-  , not $ subConsequence emptyThy [] (abs' xx -<=- abs' yy) (abs' xx) (abs' yy)-  , not $ subConsequence emptyThy [] (abs' xx -==- one) (xx -+- abs' xx) zero--  , holds n $ \e -> length (expansions preludeInstances 1 e) == 1--  , expansions preludeInstances 2 (i_ -+- i_)-    == [ xx -+- xx-       , xx -+- yy-       , yy -+- xx-       , yy -+- yy ]--  , expansions preludeInstances 2 (i_ -+- i_ -+- ord' c_)-    == [ xx -+- xx -+- ord' cc-       , xx -+- xx -+- ord' dd-       , xx -+- yy -+- ord' cc-       , xx -+- yy -+- ord' dd-       , yy -+- xx -+- ord' cc-       , yy -+- xx -+- ord' dd-       , yy -+- yy -+- ord' cc-       , yy -+- yy -+- ord' dd ]--  , expansionsOfType i_ ["x","y"] (i_ -+- i_ -+- ord' c_)-    == [ xx -+- xx -+- ord' c_-       , xx -+- yy -+- ord' c_-       , yy -+- xx -+- ord' c_-       , yy -+- yy -+- ord' c_ ]--  , expansionsOfType i_ [] (i_ -+- i_ -+- ord' c_) == []--  , expansionsWith [xx, yy]     (i_ -+- i_ -+- ord' c_)-    == [ xx -+- xx -+- ord' c_-       , xx -+- yy -+- ord' c_-       , yy -+- xx -+- ord' c_-       , yy -+- yy -+- ord' c_ ]--  , expansionsWith [cc]         (i_ -+- i_ -+- ord' c_)-    == [ i_ -+- i_ -+- ord' cc ]--  , expansionsWith [xx, yy, cc] (i_ -+- i_ -+- ord' c_)-    == [ xx -+- xx -+- ord' cc-       , xx -+- yy -+- ord' cc-       , yy -+- xx -+- ord' cc-       , yy -+- yy -+- ord' cc ]-  ]-  where-  x === y = equal preludeInstances 1000 x y
− tests/test-eval.hs
@@ -1,61 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.Expr.Ground-import Test.Speculate.Expr---- TODO: rename test-eval to test-ground--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True--  ,                                    xx -+- yy === yy -+- xx-  , holds n' $ \(IntE e1) (IntE e2) -> notUndefined e1 && notUndefined e2-                                   ==> e1 -+- e2 === e2 -+- e1-  ,                                    xx -+- yy =/= xx -+- xx-  ,                                      abs' xx === abs' (abs' xx)-  ,                      abs' (xx -+- abs' xx) === (xx -+- abs' xx) -- 2*x or 0-  , holds n' $ \e1 e2 -> typ e1 /= typ e2 ==> e1 =/= e2--  , holds n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2-                         in  notUndefined e1 && notUndefined e2 && isEquation e1e2-                         ==> condEqual preludeInstances 500 e1e2 e1 e2-  , holds n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2-                         in  notUndefined e1 && notUndefined e2 && isEquation e1e2-                         ==> condEqualM preludeInstances 500 0 e1e2 e1 e2-  , fails n' $ \e1 e2 -> let e1e2 = mkEquation preludeInstances e1 e2-                         in  isEquation e1e2-                         ==> condEqualM preludeInstances 500 500 e1e2 e1 e2--  , holds n $ ordOK -:> int-  , holds n $ ordOK -:> ()-  , holds n $ ordOK -:> bool-  , holds n $ ordOK -:> [int]-  ]-  where-  notUndefined e = e === e-  n' = n `div` 50-  x === y = equal preludeInstances 500 x y-  infix 4 ===-  x =/= y = not (x === y)-  infix 4 =/=--(*==*), (*/=*), (*<=*), (*<*) :: (Show a, Typeable a) => a -> a -> Bool-x *==* y = eval undefined $ val x -==- val y-x */=* y = eval undefined $ val x -/=- val y-x *<=* y = eval undefined $ val x -<=- val y-x *<*  y = eval undefined $ val x -<-  val y--eqOK :: (Eq a, Show a, Typeable a) => a -> a -> Bool-eqOK x y =  (x *==* y) == (x == y)-         && (x */=* y) == (x /= y)--ordOK :: (Eq a, Ord a, Show a, Typeable a) => a -> a -> Bool-ordOK x y =  eqOK x y-          && (x *<=* y) == (x <= y)-          && (x *<*  y) == (x <  y)
− tests/test-expr.hs
@@ -1,83 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.Expr---- Helper functions-import Data.Functor ((<$>)) -- for GHC < 7.10--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True--  , ((xx -+- yy) -+- (yy -+- zz)) //- [(yy, yy -+- zz)]-      == (xx -+- (yy -+- zz)) -+- ((yy -+- zz) -+- zz)--  , (xx -+- yy) // [(yy, yy -+- zz), (xx, xx -+- yy)]-      == (xx -+- yy) -+- (yy -+- zz)--  , sub (xx -+- yy) zero ((xx -+- yy) -+- zz) == (zero -+- zz)-  , sub (xx -+- yy) zero (xx -+- (yy -+- zz)) == (xx -+- (yy -+- zz))--  , holds n $ \(SameTypeE e1 e2) -> sub e1 e2 e1 == e2-  , holds n $ \(IntE e1) (IntE e2) -> sub e1 e2 (e1 -+- e1) == (e2 -+- e2)--  , holds n $ \(SameTypeE e1 e2) -> unify e1 e2 =$ fmap canonicalize $= unify e2 e1--  , unification xx yy == Just [(xx,yy)]-  , (canonicalize <$> unify xx yy) == Just xx-  , unification zero zero == Just []-  , unification zero one  == Nothing-  , unification xx one == Just [(xx,one)]-  , unification (zero -+- xx) (zero -+- one) == Just [(xx,one)]-  , unification (zero -+- xx) (yy -+- one) == Just [(xx,one),(yy,zero)]-  , unify (zero -+- xx) (yy -+- one) == Just (zero -+- one)-  , unification (foo xx) (foo (goo yy)) == Just [(xx,goo yy)]-  , unification (foo xx -+- xx) (yy -+- zero) == Just [(xx,zero),(yy,foo zero)]-  , unify (foo xx -+- xx) (yy -+- zero) == Just (foo zero -+- zero)-  , unification (foo xx) (goo yy) == Nothing-  , unification (foo xx) (foo yy) == unification xx yy-  , (canonicalize <$> unify (negate' (negate' xx) -+- yy) (zz -+- zero))-    == Just (negate' (negate' xx) -+- zero)-  , unification (xx -+- one) (one -+- xx) == Just [(xx,one)]-  , unification (xx -+- xx) (one -+- one) == Just [(xx,one)]-  , unification (zz -+- zz) (xx -+- yy) == Just [(xx,yy),(zz,yy)]-  , unification (xx     -*- (-+-) xx xx)-                (foo zz -*- (-+-) xx yy) == Just [(yy,foo zz),(xx,foo zz)]--  -- The following two tests are adapted from Baader and Snyder:-  -- Example 2.8, Chapter 8, Handbook of Automated Reasoning (page 453).-  , unification (hh5 yy zz (ff2 ii ii) (ff2 jj jj) kk) (hh5 (ff2 xx xx) (ff2 yy yy) jj kk zz)-    == Just [ (ii,xx)-            , (kk,ff2 (ff2 xx xx) (ff2 xx xx))-            , (jj,ff2 xx xx)-            , (zz,ff2 (ff2 xx xx) (ff2 xx xx))-            , (yy,ff2 xx xx)-            ]-  , unification (hh7 yy zz xx' (ff2 ii ii) (ff2 jj jj) (ff2 kk kk) ii')-                (hh7 (ff2 xx xx) (ff2 yy yy) (ff2 zz zz) jj kk ii' xx')-    == Just [ (ii,xx)-            , (ii',ff2 (ff2 (ff2 xx xx) (ff2 xx xx)) (ff2 (ff2 xx xx) (ff2 xx xx)))-            , (kk,ff2 (ff2 xx xx) (ff2 xx xx))-            , (jj,ff2 xx xx)-            , (xx',ff2 (ff2 (ff2 xx xx) (ff2 xx xx)) (ff2 (ff2 xx xx) (ff2 xx xx)))-            , (zz,ff2 (ff2 xx xx) (ff2 xx xx))-            , (yy,ff2 xx xx)-            ]-  ]--ff2 :: Expr -> Expr -> Expr-ff2 e1 e2 = ffE :$ e1 :$ e2-  where ffE = value "f" (undefined :: Int -> Int -> Int)--hh5 :: Expr -> Expr -> Expr -> Expr -> Expr -> Expr-hh5 e1 e2 e3 e4 e5 = hhE :$ e1 :$ e2 :$ e3 :$ e4 :$ e5-  where hhE = value "h" (undefined :: Int -> Int -> Int -> Int -> Int -> Int)--hh7 :: Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr-hh7 e1 e2 e3 e4 e5 e6 e7 = hhE :$ e1 :$ e2 :$ e3 :$ e4 :$ e5 :$ e6 :$ e7-  where hhE = value "h" (undefined :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int)
− tests/test-model
@@ -1,74 +0,0 @@-#!/bin/bash-top=`dirname $0`/..-eg=$top/eg-model=$top/tests/model--case "$1" in-	-*) sz="$1"-	    shift-		;;-esac--test-model() {-	$1 $sz | diff -rud $model/$2$sz.out - || exit 1-}--update-test-model() {-	$1 $sz > $model/$2$sz.out-}--tym() {-	/usr/bin/time -f%e "$@"-}--spc() {-	/usr/bin/time -f%M "$@"-}--mean() {-	sum="`echo -n $* | sed -e "s/ / + /g"`"-	mean="`echo "scale = 3; ($sum) / $#" | bc`"-	printf "%3.3f\n" $mean-}-export -f mean--div1024() {-	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"-}-export -f div1024--benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--memory-benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		spc $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean    "$@"' mean |-	       xargs bash -c 'div1024 "$@"' div1024-}--benchmark-cmp() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '-	echo -n ' '-	for run in {1..1}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--find $* | sed -e "s/^bench/     /;s/^eg/  /" |-sort -b | sed -e "s/^     /bench/;s/^  /eg/" |-while read e-do-	`basename $0` $top/$e `basename $e`-done
− tests/test-order.hs
@@ -1,140 +0,0 @@-{-# Language DeriveDataTypeable, StandaloneDeriving #-} -- Travis-import Test-import Test.Speculate.Utils-import qualified Test.LeanCheck.Utils as LC (comparison)--import Test.Speculate.Expr-import Test.Speculate.Reason (emptyThy)-import Test.Speculate.Reason.Order--import Data.Monoid ((<>))---- for Travis:-deriving instance Typeable Thyght-deriving instance Typeable Equation--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True -- see test-expr.hs for general Expr orders--  , holds n $ compare ==== (compareComplexity <> lexicompare)-  , holds n $ LC.comparison lexicompare-  , holds n $ LC.comparison compareComplexity--  , holds n $ \(IntToIntE e1) (IntToIntE e2) (IntE e3) -> let cmp = lexicompare in-                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)-  , holds n $ \(IntToIntE e1) (IntToIntE e2) (IntE e3) -> let cmp = lexicompareBy (flip compare) in-                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)-  , holds n $ \(BoolToBoolE e1) (BoolToBoolE e2) (BoolE e3) -> let cmp = lexicompare in-                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)-  , holds n $ \(BoolToBoolE e1) (BoolToBoolE e2) (BoolE e3) -> let cmp = lexicompareBy (flip compare) in-                e1 `cmp` e2 == (e1 :$ e3) `cmp` (e2 :$ e3)--  -- some tests of order-  , value "xx" xx < zero-  , value "xxeqxx" (Equation xx xx) < value "xx" xx-  , value "xx" xx < value "emptyThyght" (Thyght emptyThy)--  , holds n $ simplificationOrder (|>|)-  , fails n $ simplificationOrder ( >|) -- TODO: make this pass (holds)-  , fails n $ closedUnderSub ( >|) -- reason for the above, I believe this is an actual bug in >|--- > > checkFor 5040 $ closedUnderSub ( >|)--- > *** Failed! Falsifiable (after 3707 tests):--- > (id _ :: Int) (id 0 :: Int) (0 :: Int)--- > > closedUnderSub (>|) (id' xx) (id' zero) zero--- > False------ The above bug did exist before the introduction of Express and probably--- since the creation of (>|).---- TODO: fix the following two tests--- > > checkFor 10080 $ simplificationOrder (dwoBy (<))--- > *** Failed! Falsifiable (after 6901 tests):--- > (f _ :: Int) (id _ :: Int) (_ :: Int)--- > > checkFor 10080 $ simplificationOrder (|> )--- > *** Failed! Falsifiable (after 6901 tests):--- > (f _ :: Int) (id _ :: Int) (_ :: Int)--  -- TODO: fix the following two tests with 10000 tests:-  , holds 5040 $ simplificationOrder (|> )-  , holds 5040 $ simplificationOrder (dwoBy (<))-  , fails 10080 $ compatible (|>)--- TODO: fix the following two tests--- > > checkFor 10080 $ compatible    (|>)--- > *** Failed! Falsifiable (after 6901 tests):--- > (f _ :: Int) (id _ :: Int) (_ :: Int)--- Like the one above---  , fails n $ \e1 e2 -> (e1 |>| e2) == (e1 |>  e2)-  , fails n $ \e1 e2 -> (e1 |>| e2) == (e1  >| e2)-  , fails n $ \e1 e2 -> (e1 |>  e2) == (e1  >| e2)--  , not $ zero |> xx-  , not $ xx |> zero-  , negate' xx |> zero-  , negate' xx -+- xx |> zero-  , zero > xx-  , negateE > zero--  , weight xx                            == 1-  , weight zero                          == 1-  , weight (xx -+- zero)                 == 2-  , weight (one -+- yy)                  == 2-  , weight (xx -*- (yy -+- zz))          == 3-  , weight ((xx -*- yy) -+- (xx -*- zz)) == 4-  , holds n $ \e1 e2 -> weight (e1 -+- e2)  == weight e1 + weight e2-  , holds n $ \e     -> weight (e -+- zero) == 1 + weight e-  , holds n $ \e     -> weight (abs' e)     == 1 + weight e-  , holds n $ \e     -> weightExcept absE (abs' e)    <= weight e-  , holds n $ \e     -> weightExcept absE (negate' e) <= weight e + 1-  , holds n $ \e     -> weightExcept absE (abs' e)    == weightExcept absE e-  , holds n $ \e     -> weightExcept absE (negate' e) == weightExcept absE e + 1--  -- lexicompare is compatible (almost as if by coincidence)-  , fails n $ simplificationOrder lgt-  , holds n $ compatible          lgt-  , fails n $ closedUnderSub      lgt-  , fails n $ subtermProperty     lgt--  -- compare has the subtermProperty (Expr)-  , fails n $ simplificationOrder cgt-  , fails n $ compatible          cgt-  , fails n $ closedUnderSub      cgt-  , holds n $ subtermProperty     cgt-  ]-  where-  e1 `lgt` e2 = e1 `lexicompare` e2 == GT-  e1 `cgt` e2 = e1 `compare` e2 == GT--simplificationOrder :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool-simplificationOrder (>) = \e1 e2 e3 -> reductionOrder  (>) e1 e2 e3-                                    && subtermProperty (>) e1--subtermProperty :: (Expr -> Expr -> Bool) -> Expr -> Bool-subtermProperty (>) = \e -> all (e >)-                          . filter (\e' -> e' /= e && typ e' == typ e)-                          $ subexprs e -- isn't this subexprsV? I don't think so--reductionOrder :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool-reductionOrder (>) = \e1 e2 e3 -> strictPartialOrder (>) e1 e2 e3-                               && compatible         (>) e1 e2 e3-                               && closedUnderSub     (>) e1 e2 e3--compatible :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool-compatible (>) = \e e1 e2 -> e1 > e2 && typ e1 == typ e2-                         ==> and [ (e //- [(v,e1)]) > (e //- [(v,e2)])-                                 | v <- vars e-                                 , typ v == typ e1-                                 , typ v == typ e2 ]---- The formal definition contains multiple assignments,--- here, just a single variable is assigned.-closedUnderSub :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Expr -> Bool-closedUnderSub (>) = \e1 e2 e -> e1 > e2-                             ==> and [ (e1 //- [(v,e)]) > (e2 //- [(v,e)])-                                     | v <- vars e1 `nubMerge` vars e2-                                     , typ v == typ e ]
− tests/test-reason.hs
@@ -1,258 +0,0 @@-{-# LANGUAGE CPP #-}--- Test library-import Test-import Test.Speculate.Utils---- Functions under test-import Test.Speculate.Expr-import Test.Speculate.Reason-import Test.Speculate.Reason.Order-import Data.Tuple (swap)-import Data.Function (on)-import Data.List (permutations)--theorize' :: [(Expr,Expr)] -> Thy-theorize' eqs = finalize $ foldl (flip insert) emptyThy {closureLimit = 3, keepE = keepMaxOf eqs} eqs--theorize'' :: [(Expr,Expr)] -> Thy-theorize'' eqs = finalize $ foldr insert emptyThy {closureLimit = 3, keepE = keepMaxOf eqs} eqs--main :: IO ()-main = do-  n <- getMaxTestsFromArgs 10000--  reportTests (tests n)--  putStrLn "\nlength (rules $ theorize eqs)"-  reportCountsBy (\(SameTypedPairsE eqs) -> show . length . rules $ theorize eqs)-                 (take n list)--  putStrLn "length (equations $ theorize eqs)"-  reportCountsBy (\(SameTypedPairsE eqs) -> show . length . equations $ theorize eqs)-                 (take n list)--  putStrLn "\\e1 e2 e3 -> e1 > e2 && typ e1 == typ e2,  length (vars e3)"-  reportCountsBy (\(e1,e2,e3) -> if e1 > e2 && typ e1 == typ e2-                                   then "OK, length " ++ show (length $ vars e3)-                                   else "Not OK")-                 (take n list)--  putStrLn "\\e e1 e2 -> length $ reductions 1 e (e1,e2)"-  reportCountsBy (\(e,e1,e2) -> if e1 > e2 && typ e1 == typ e2-                                  then "OK, length " ++ show (length $ reductions1 e (e1,e2))-                                  else "Not OK")-                 (take n list)--(~~) :: Expr -> Expr -> (Expr,Expr)-(~~) = (,)-infix 4 ~~--mkThy :: [(Expr,Expr)] -> [(Expr,Expr)] -> Thy-mkThy rs eqs = emptyThy-             { rules     = rs-             , equations = eqs }--tests :: Int -> [Bool]-tests n =-  [ True--  -- Listable Thy sound and complete:-  , holds n $ okThy-  , all (`elem` take n list) (take (n`div`10) listThyInefficient)--  , holds n $ \(SameTypedPairsE eqs) -> theorize eqs == theorize (map swap eqs)-  , holds n $ \(SameTypedPairsE eqs) -> theorize eqs == theorize (reverse eqs)---- TODO: make the following two pass--- > > let eqs = [(xx, id' xx), (zero, id' xx)]--- > > theorize' eqs == theorize eqs--- > False--- > > theorize' eqs--- > Thy { rules = [ id x == x--- >               ]--- >     , equations = [ 0 == x--- >                   ]--- >     , canReduceTo = (|>)--- >     , closureLimit = 3--- >     , keepE = keepUpToLength 3--- >     }--- > > theorize eqs--- > Thy { rules = [ id x == x--- >               , id x == 0--- >               ]--- >     , equations = [ 0 == x--- >                   ]--- >     , canReduceTo = (|>)--- >     , closureLimit = 3--- >     , keepE = keepUpToLength 3--- >     }------ This issue did exist before the introduction of Express,--- it just wasn't found because Expr enumeration wasn't that good.---, holds n $ \(SameTypedPairsE eqs) -> theorize'  eqs == theorize eqs---, holds n $ \(SameTypedPairsE eqs) -> theorize'' eqs == theorize eqs--  , holds n $ okThy . deduce-  , holds n $ idempotent deduce-  , holds n $ \thy -> ((>=) `on` length . equations) (deduce thy) thy-  , holds n $ \thy -> ((==) `on` rules)              (deduce thy) thy--  , holds n $ okThy . simplify-  , holds n $ idempotent simplify-  , holds n $ \thy -> ((<=) `on` length . equations) (simplify thy) thy-  , holds n $ \thy -> ((==) `on` rules)              (simplify thy) thy--  , holds n $ okThy . delete-  , holds n $ idempotent delete-  , holds n $ \thy -> ((<=) `on` length . equations) (delete thy) thy-  , holds n $ \thy -> ((==) `on` rules)              (delete thy) thy--  , holds n $ okThy . orient-  , holds n $ idempotent orient-  , holds n $ \thy -> ((<=) `on` length . equations) (orient thy) thy-  , holds n $ \thy -> ((>=) `on` length . rules)     (orient thy) thy-  , holds n $ \thy -> length (equations thy)      - length (equations $ orient thy)-                   >= length (rules $ orient thy) - length (rules thy)--  , holds n $ okThy . compose-  , holds n $ idempotent compose-  , holds n $ \thy -> ((<=) `on` length . rules)     (compose thy) thy-  , holds n $ \thy -> ((==) `on` equations)          (compose thy) thy--  , holds n $ okThy . collapse-  , holds n $ idempotent collapse-  , holds n $ \thy -> ((<=) `on` length . rules)     (collapse thy) thy-  , holds n $ \thy -> ((>=) `on` length . equations) (collapse thy) thy--  , holds n $ okThy . complete . unThyght--  , holds n $ \(Thyght thy') (SameTypedPairsE eqs) ->-                let thy = complete thy'-                in  foldr insert thy eqs == complete (append thy eqs)--  -- TODO: make the following pass with n `div` 10-  -- Inference order should not matter:-  , holds 100-  $ \(Thyght thy) -> all (\steps -> iterateUntil (==) (chain steps) thy == complete thy)-                   $ permutations [collapse, compose, orient, delete . simplify, deduce]-  -- I now think the above property is not true in all cases, investigate.--  -- NOTE: the following does not hold in general, only for most of the cases-  , holds 4000-  $ \(Thyght thy') (SameTypeE e1 e2) -> closureLimit thy' > 0 ==>-       let thy = insert (e1,e2)-               $ thy' { keepE = keepUpToLength (max (size e1) (size e2)) }-       in  equivalent thy e1 e2--  , holds n $ idempotent finalize--  , criticalPairs emptyThy { rules = [ ((xx -+- yy) -+- zz,xx -+- (yy -+- zz))-                                     , (negate' xx -+- xx, zero) ] }-      == [ (negate' xx -+- (xx -+- yy),zero -+- yy)-         , ((xx -+- (yy -+- zz)) -+- xx', (xx -+- yy) -+- (zz -+- xx')) ]--  , criticalPairs emptyThy { rules = [ (negate' (negate' xx), id' xx) ] }-      == [ (negate' (id' xx), id' (negate' xx)) ]--  , criticalPairs emptyThy { canReduceTo = dwoBy (\e1 e2 -> e1 `lexicompare` e2 == GT)-                           , rules = [ (foo (goo (foo xx)), xx)-                                     , (foo (goo xx), goo (foo xx)) ] }-      == (let sortuple (x,y) | x < y     = (y,x)-                             | otherwise = (x,y)-          in nubSort . map sortuple-           $ [ (goo xx,                   foo (goo (goo (foo xx))))-             , (goo (foo xx),             foo (goo xx))-             , (goo (foo (foo xx)),       xx)-             , (goo (foo (foo (goo xx))), goo xx) ])--  , criticalPairs emptyThy { rules = [ (foo (goo (foo xx)), xx)-                                     , (foo (goo xx), goo (foo xx)) ] }-      == [ (goo (foo xx),             foo (goo xx))-         , (goo (foo (foo xx)),       xx)-         , (foo (goo (goo (foo xx))), goo xx)-         , (goo (foo (foo (goo xx))), goo xx) ]--  , theorize [ (xx -*- yy) -*- (yy -*- zz)  ~~  yy ]-    |==|-    [ (xx -*- yy) -*- (yy -*- zz)  ~~  yy-    , xx -*- ((xx -*- yy) -*- zz)  ~~  xx -*- yy-    , (xx -*- (yy -*- zz)) -*- zz  ~~  yy -*- zz-    ] `mkThy` []--  , theorize [ xx -*- (yy -+- zz)  ~~  (xx -*- yy) -+- (xx -*- zz)-             , (xx -+- yy) -*- zz  ~~  (xx -*- zz) -+- (yy -*- zz) ]-    |==|-    [ (xx -*- yy) -+- (xx -*- zz)  ~~  xx -*- (yy -+- zz)-    , (xx -*- yy) -+- (zz -*- yy)  ~~  (xx -+- zz) -*- yy-    ] `mkThy` [ (xx -+- xx) -*- yy  ~~  xx -*- (yy -+- yy) ]--  , theorizeBy (|>|) [ xx -+- zero      ~~  xx-                     , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]-    |==|-    [ xx -+- zero  ~~  xx-    ] `mkThy` [ xx -+- succ' yy  ~~  succ' (xx -+- yy) ]--  , theorizeBy (kboBy weight (<))-    [ xx -+- zero      ~~  xx-    , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]-    |==|-    [                 xx -+- zero  ~~  xx-    , succ' (xx -+- yy)            ~~  xx -+- succ' yy-    , xx -+-         succ' zero    ~~         succ' xx-    , xx -+- (succ' (succ' zero))  ~~  succ' (succ' xx)-    ] `mkThy` []--  , theorizeBy (|>) [ xx -+- zero      ~~  xx-                    , xx -+- succ' yy  ~~  succ' (xx -+- yy) ]-    |==|-    [ xx -+- zero      ~~  xx-    , xx -+- succ' yy  ~~  succ' (xx -+- yy)-    ] `mkThy` []--  -- TODO: fix order under GHC <= 7.8-#if __GLASGOW_HASKELL >= 800-  , theorizeBy (dwoBy $ \e1 e2 -> if typ e1 == typ e2-                                      then e1 > e2-                                      else typ e1 < typ e2)-    [ ( xx -+- zero, xx )-    , ( xx -+- succ' yy, succ' (xx -+- yy) ) ]-    |==|-    [ ( xx -+- zero, xx )-    , ( succ' (xx -+- yy), xx -+- (succ' yy) )-    ] `mkThy` [ xx -+- (succ' zero)  ~~  succ' xx]-#endif--  , theorizeBy (|>) [ ( zero -+- xx, xx )-                    , ( negate' xx -+- xx, zero )-                    , ( (xx -+- yy) -+- zz, xx -+- (yy -+- zz) ) ]-    |==| [ ( zero -+- xx                , xx )-         , ( negate' xx -+- xx          , zero )-         , ( (xx -+- yy) -+- zz         , xx -+- (yy -+- zz) )-         , ( negate' xx -+- (xx -+- yy) , yy )-         , ( xx -+- zero                , xx )-         , ( xx -+- (negate' xx -+- yy) , yy )-         , ( negate' (negate' xx)         , xx )-         , ( negate' zero                 , zero )-         , ( xx -+- negate' xx            , zero )-         ] `mkThy` []--  , theorizeBy (kboBy (weightExcept negateE) (gtExcept (>) negateE))-      [ ( zero -+- xx, xx )-      , ( negate' xx -+- xx, zero )-      , ( (xx -+- yy) -+- zz, xx -+- (yy -+- zz) ) ]-    |==| [ ( zero -+- xx                , xx )-         , ( negate' xx -+- xx          , zero )-         , ( (xx -+- yy) -+- zz         , xx -+- (yy -+- zz) )-         , ( negate' xx -+- (xx -+- yy) , yy )-         , ( negate' zero -+- xx        , xx )-         , ( xx -+- zero                , xx )-         , ( xx -+- (negate' xx -+- yy) , yy )-         , ( negate' (negate' xx)         , xx )-         , ( xx -+- negate' xx            , zero )-         ] `mkThy` [( negate' zero, zero )]--  -- TODO: restore tests losts after removing test-kbc-  ]--succ' :: Expr -> Expr-succ'  =  (value "succ" ((1+) :: Int -> Int) :$)
− tests/test-sdist
@@ -1,33 +0,0 @@-#!/bin/bash-#-# test-sdist: tests the package generated by "cabal sdist".-#-# Copyright (c) 2015-2018 Rudy Matela.-# Distributed under the 3-Clause BSD licence.-export LC_ALL=C  # consistent sort-pkgver=` cat *.cabal | grep "^version:" | sed -e "s/version: *//"`-pkgname=`cat *.cabal | grep "^name:"    | sed -e "s/name: *//"`-pkg=$pkgname-$pkgver-set -x-cabal sdist &&-cd dist &&-tar -tf $pkg.tar.gz | sort --ignore-case          > ls-cabal-i  &&-tar -tf $pkg.tar.gz | sort --ignore-case --unique > ls-cabal-iu &&-diff -rud ls-cabal-i ls-cabal-iu &&-rm -f ls-cabal ls-cabal-ignore-case &&-if [ -d ../.git ]-then-	# on git repo, test if files are the same-	git -C .. ls-files                                      | sort > ls-git   &&-	tar -tf $pkg.tar.gz | grep -v "/$" | sed -e "s,$pkg/,," | sort > ls-cabal &&-	diff -rud ls-git ls-cabal &&-	rm -f ls-git ls-cabal-else-	# outside of git repo, test build-	rm -rf $pkg/ &&-	tar -xzf $pkg.tar.gz &&-	cd $pkg/ &&-	cabal configure --enable-tests --enable-benchmarks &&-	cabal build &&-	cabal test-fi
− tests/test-stats.hs
@@ -1,41 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.Reason-import Test.Speculate.Utils--main :: IO ()-main = do-  n <- getMaxTestsFromArgs 10000--  putStrLn "typ (e :: Expr)"-  reportCountsBy typ            (take n list :: [Expr])--  putStrLn "size (e :: Expr)"-  reportCountsBy sizeInterval (take n list :: [Expr])--  putStrLn "typ (e1 :: Expr) == typ (e2 :: Expr)"-  reportCountsBy equalTypes (take n list)--  putStrLn "typ (e1 :: Expr) == typ (e2 :: Expr)"-  reportCountsBy equalTypes . map unSameTypeE . take n $ list--  putStrLn "okThy thy"-  reportCountsBy (show . okThy) (take n list)--  putStrLn "length (equations thy)"-  reportCountsBy (show . length . equations) (take n list)--  putStrLn "length (rules thy)"-  reportCountsBy (show . length . rules) (take n list)--  putStrLn "length (equations thy + rules thy)"-  reportCountsBy (show . length . (\thy -> rules thy ++ equations thy)) (take n list)--sizeInterval :: Expr -> (Int,Int)-sizeInterval e = (l, l+2) where l = (size e `div` 3) * 3--equalTypes :: (Expr,Expr) -> String-equalTypes (e1,e2) | typ e1 == typ e2 = show (typ e1)-                   | otherwise        = "invalid"
− tests/test-utils.hs
@@ -1,115 +0,0 @@--- Test library-import Test---- Functions under test-import Test.Speculate.Utils---- Helper functions-import Data.List-import Data.Function--import Test.LeanCheck.Utils (comparison)--main :: IO ()-main = mainTest tests 10000--tests :: Int -> [Bool]-tests n =-  [ True-  -  , holds 100 $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys-                      ==> strictlyOrdered (nubMerge xs (ys::[Int]))-  , and [ nubMerge xs xs == xs | n <- [0..10], let xs = [0..n] :: [Int] ]--  , collectOn snd [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2),(2,2)],[(2,3),(3,3)]]-  , collectOn fst [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2)],[(2,2),(2,3)],[(3,3)]]-  , collectOn (uncurry (+)) [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2)],[(2,2)],[(2,3)],[(3,3)]]-  , collectBy (compare `on` snd) [(1,2),(2,2),(2,3),(3,3)::(Int,Int)] == [[(1,2),(2,2)],[(2,3),(3,3)]]--  , holds n $ \x           -> medianate (,) [x::Int]           == [(x,x)]-  , holds n $ \x y         -> medianate (,) [x::Int,y]         == [(x,y)]-  , holds n $ \x y z       -> medianate (,) [x::Int,y,z]       == [(x,z),(y,y)]-  , holds n $ \x y z w     -> medianate (,) [x::Int,y,z,w]     == [(x,w),(y,z)]-  , holds n $ \x y z w v   -> medianate (,) [x::Int,y,z,w,v]   == [(x,v),(y,w),(z,z)]-  , holds n $ \x y z w v u -> medianate (,) [x::Int,y,z,w,v,u] == [(x,u),(y,v),(z,w)]--  , all (\f -> discardOthers f [] == ([]::[Int])) [(<=),(>=),(<),(>),(==),(/=),\x y -> True]-  , holds n $ \x -> all (\f -> discardOthers f [x] == [x::Int])-                        [(<=),(>=),(<),(>),(==),(/=),\x y -> True]-  , holds n $ \xs -> not (null xs) ==> discardOthers (<=) xs == [maximum xs::Int]-  , holds n $ \xs -> not (null xs) ==> discardOthers (>=) xs == [minimum xs::Int]-  , holds n $ \xs -> not (null xs) ==>-      discardOthers (<) xs == replicate (count (maximum xs) xs) (maximum xs::Int)-  , holds n $ \xs -> not (null xs) ==>-      discardOthers (>) xs == replicate (count (minimum xs) xs) (minimum xs::Int)--  , table "l  l  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]-                    , ["0",    "1",        "2"]-                    , ["123",  "456\n789", "3"] ] ==-      "asdf  qwer  zxvc\n\-      \            zxvc\n\-      \0     1     2\n\-      \123   456   3\n\-      \      789\n"--  , table "r  l  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]-                    , ["0",    "1",        "2"]-                    , ["123",  "456\n789", "3"] ] ==-      "asdf  qwer  zxvc\n\-      \            zxvc\n\-      \   0  1     2\n\-      \ 123  456   3\n\-      \      789\n"--  , table "r  r  l" [ ["asdf", "qwer",     "zxvc\nzxvc"]-                    , ["0",    "1",        "2"]-                    , ["123",  "456\n789", "3"] ] ==-      "asdf  qwer  zxvc\n\-      \            zxvc\n\-      \   0     1  2\n\-      \ 123   456  3\n\-      \       789\n"--  -- different versions of GHC/typeable impose different orders on TypeReps,-  -- hence: map show . sort-  , (sort . map show . typesIn $ typeOf (undefined :: (Int -> Int) -> Int -> Bool))-      == ["Bool","Int"]-  , (sort . map show . typesIn $ typeOf (undefined :: (Int -> Char) -> Integer -> Bool))-      == ["Bool","Char","Int","Integer"]--  , splitAtCommas "1,2,3" == ["1","2","3"]-  , splitAtCommas "123,456,789," == ["123","456","789"]-  , splitAtCommas "123 456,789"  == ["123","456","789"] -- weird behaviour, but fine for speculate--  , compareIndex [3,2,1::Int] 3 1 == LT-  , compareIndex [3,2,1::Int] 1 3 == GT-  , compareIndex [3,2,1::Int] 4 1 == GT-  , compareIndex [3,2,1::Int] 1 0 == LT-  , holds n $ \xs -> comparison (compareIndex (xs::[Int]))--  , partitionByMarkers '#' '*' "" == ("","")-  , partitionByMarkers '#' '*' "abc*def" == ("abc","def")-  , partitionByMarkers '#' '*'  "abcdef" == ("abcdef","")-  , partitionByMarkers '#' '*' "#abcdef" == ("abcdef","")-  , partitionByMarkers '#' '*' "abc#def" == ("abcdef","")-  , partitionByMarkers '#' '*' "*ab#cd" == ("cd","ab")-  , partitionByMarkers '#' '*' "abc#def*ghi*jkl#mno*pqr#stu" == ("abcdefmnostu","ghijklpqr")-  , partitionByMarkers '#' '*' "#foreground*background#foreground" == ("foregroundforeground","background")--  , holds n $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys-                    ==> strictlyOrdered (xs +++ ys :: [Int])-  , holds n $ \xs ys -> xs +++ ys == ys +++ (xs :: [Int])-  , holds n $ \xs ys -> strictlyOrdered xs && strictlyOrdered ys-                    ==> xs +++ ys == nubSort (xs ++ ys :: [Int])--  , holds n $ nubSort === nub . sort -:> [int]--  , halve []             == ([],[]::[Int])-  , halve [1::Int]       == ([],[1])-  , halve [1,2::Int]     == ([1],[2])-  , halve [1,2,3::Int]   == ([1],[2,3])-  , halve [1,2,3,4::Int] == ([1,2],[3,4])--  , holds n $ \n xss -> 0 <  n && n <  length xss ==> xss ! n == (xss !! n :: [Int])-  , holds n $ \n xss -> 0 >= n && n >= length xss ==> xss ! n == ([] :: [Int])-  ]
− tests/update-test-model
@@ -1,74 +0,0 @@-#!/bin/bash-top=`dirname $0`/..-eg=$top/eg-model=$top/tests/model--case "$1" in-	-*) sz="$1"-	    shift-		;;-esac--test-model() {-	$1 $sz | diff -rud $model/$2$sz.out - || exit 1-}--update-test-model() {-	$1 $sz > $model/$2$sz.out-}--tym() {-	/usr/bin/time -f%e "$@"-}--spc() {-	/usr/bin/time -f%M "$@"-}--mean() {-	sum="`echo -n $* | sed -e "s/ / + /g"`"-	mean="`echo "scale = 3; ($sum) / $#" | bc`"-	printf "%3.3f\n" $mean-}-export -f mean--div1024() {-	printf "%3.0f\n" "`echo "$1 / 1024" | bc`"-}-export -f div1024--benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--memory-benchmark() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	printf "%-18s  " "$2$sz"-	for run in {1..3}-	do-		spc $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean    "$@"' mean |-	       xargs bash -c 'div1024 "$@"' div1024-}--benchmark-cmp() {-	[ -x $1 ] || { echo "$0: not found $1"; return 1; }-	grep "^ *$2$sz " bench/runtime-$HOSTNAME | tr '\n' ' '-	echo -n ' '-	for run in {1..1}-	do-		tym $1 $sz 2>&1 >/dev/null-	done | xargs bash -c 'mean "$@"' mean-}--find $* | sed -e "s/^bench/     /;s/^eg/  /" |-sort -b | sed -e "s/^     /bench/;s/^  /eg/" |-while read e-do-	`basename $0` $top/$e `basename $e`-done