speculate 0.4.0 → 0.4.1
raw patch · 193 files changed
+7140/−7268 lines, 193 filesdep ~express
Dependency ranges changed: express
Files
- .gitignore +11/−11
- Makefile +53/−53
- TODO.md +6/−26
- bench/runtime-zero +31/−31
- bin/compare-arith +1/−1
- bin/compare-arithficial +1/−1
- bin/compare-bool +1/−1
- eg/fun.hs +1/−2
- eg/monad.hs +1/−2
- mk/depend.mk +77/−139
- speculate.cabal +27/−28
- src/Test/Speculate/Args.hs +2/−2
- src/Test/Speculate/Engine.hs +9/−6
- src/Test/Speculate/Expr.hs +0/−2
- src/Test/Speculate/Expr/Core.hs +2/−11
- src/Test/Speculate/Reason.hs +6/−8
- src/Test/Speculate/Report.hs +3/−3
- src/Test/Speculate/Sanity.hs +8/−5
- src/Test/Speculate/Utils.hs +0/−2
- src/Test/Speculate/Utils/Typeable.hs +0/−28
- stack.yaml +1/−1
- test/Test.hs +237/−0
- test/Test/ListableExpr.hs +272/−0
- test/benchmark +74/−0
- test/benchmark-cmp +74/−0
- test/benchmark-save +23/−0
- test/creason.hs +61/−0
- test/diff +74/−0
- test/engine.hs +93/−0
- test/eval.hs +61/−0
- test/expr.hs +71/−0
- test/memory-benchmark +74/−0
- test/model/algebraic-graphs-s4.out +51/−0
- test/model/algebraic-graphs-s7.out +64/−0
- test/model/algebraic-graphs.out +58/−0
- test/model/arith-c-s4.out +183/−0
- test/model/arith-c.out +183/−0
- test/model/arith-negate-abs-s4.out +40/−0
- test/model/arith-negate-abs.out +68/−0
- test/model/arith-s4.out +23/−0
- test/model/arith.out +27/−0
- test/model/arithficial-s4.out +26/−0
- test/model/arithficial.out +27/−0
- test/model/binarytree-s4.out +41/−0
- test/model/binarytree.out +55/−0
- test/model/binarytree0-s4.out +31/−0
- test/model/binarytree0.out +45/−0
- test/model/bool-c-s4.out +124/−0
- test/model/bool-c.out +124/−0
- test/model/bool-s4.out +38/−0
- test/model/bool.out +55/−0
- test/model/colour-s4.out +89/−0
- test/model/colour.out +89/−0
- test/model/digraphs-s4.out +41/−0
- test/model/digraphs.out +59/−0
- test/model/fun-s4.out +21/−0
- test/model/fun.out +23/−0
- test/model/insertsort-s4.out +41/−0
- test/model/insertsort.out +71/−0
- test/model/insertsort0-s4.out +30/−0
- test/model/insertsort0.out +37/−0
- test/model/length-s4.out +20/−0
- test/model/length.out +23/−0
- test/model/list-c-s4.out +777/−0
- test/model/list-c.out +777/−0
- test/model/list-s4.out +26/−0
- test/model/list.out +37/−0
- test/model/minus-c-s4.out +232/−0
- test/model/minus-c.out +232/−0
- test/model/minus-s4.out +25/−0
- test/model/minus.out +27/−0
- test/model/monad-s4.out +21/−0
- test/model/monad.out +23/−0
- test/model/nord-s4.out +15/−0
- test/model/nord.out +15/−0
- test/model/oddeven-s4.out +44/−0
- test/model/oddeven.out +52/−0
- test/model/plus-abs-s4.out +40/−0
- test/model/plus-abs.out +68/−0
- test/model/pretty-compact-s4.out +32/−0
- test/model/pretty-compact.out +32/−0
- test/model/pretty-s4.out +21/−0
- test/model/pretty.out +34/−0
- test/model/ratio-s4.out +59/−0
- test/model/ratio.out +114/−0
- test/model/regexes-s4.out +46/−0
- test/model/regexes.out +46/−0
- test/model/sets-s4.out +50/−0
- test/model/sets.out +81/−0
- test/model/speculate-reason-s4.out +28/−0
- test/model/speculate-reason.out +28/−0
- test/model/string-s4.out +48/−0
- test/model/string.out +74/−0
- test/model/tauts-s4.out +33/−0
- test/model/tauts.out +37/−0
- test/model/tuples-s4.out +36/−0
- test/model/tuples.out +35/−0
- test/model/unit-s4.out +13/−0
- test/model/unit.out +13/−0
- test/model/zip-s4.out +25/−0
- test/model/zip.out +27/−0
- test/order.hs +141/−0
- test/reason.hs +258/−0
- test/sdist +33/−0
- test/stats.hs +41/−0
- test/update-diff +74/−0
- test/utils.hs +108/−0
- tests/Test.hs +0/−237
- tests/Test/ListableExpr.hs +0/−272
- tests/benchmark +0/−74
- tests/benchmark-cmp +0/−74
- tests/benchmark-save +0/−23
- tests/memory-benchmark +0/−74
- tests/model/algebraic-graphs-s4.out +0/−51
- tests/model/algebraic-graphs-s7.out +0/−64
- tests/model/algebraic-graphs.out +0/−58
- tests/model/arith-c-s4.out +0/−183
- tests/model/arith-c.out +0/−183
- tests/model/arith-negate-abs-s4.out +0/−40
- tests/model/arith-negate-abs.out +0/−68
- tests/model/arith-s4.out +0/−23
- tests/model/arith.out +0/−27
- tests/model/arithficial-s4.out +0/−26
- tests/model/arithficial.out +0/−27
- tests/model/binarytree-s4.out +0/−41
- tests/model/binarytree.out +0/−55
- tests/model/binarytree0-s4.out +0/−31
- tests/model/binarytree0.out +0/−45
- tests/model/bool-c-s4.out +0/−124
- tests/model/bool-c.out +0/−124
- tests/model/bool-s4.out +0/−38
- tests/model/bool.out +0/−55
- tests/model/colour-s4.out +0/−88
- tests/model/colour.out +0/−88
- tests/model/digraphs-s4.out +0/−41
- tests/model/digraphs.out +0/−59
- tests/model/fun-s4.out +0/−21
- tests/model/fun.out +0/−23
- tests/model/insertsort-s4.out +0/−41
- tests/model/insertsort.out +0/−71
- tests/model/insertsort0-s4.out +0/−30
- tests/model/insertsort0.out +0/−37
- tests/model/length-s4.out +0/−20
- tests/model/length.out +0/−23
- tests/model/list-c-s4.out +0/−777
- tests/model/list-c.out +0/−777
- tests/model/list-s4.out +0/−26
- tests/model/list.out +0/−37
- tests/model/minus-c-s4.out +0/−232
- tests/model/minus-c.out +0/−232
- tests/model/minus-s4.out +0/−25
- tests/model/minus.out +0/−27
- tests/model/monad-s4.out +0/−21
- tests/model/monad.out +0/−23
- tests/model/nord-s4.out +0/−15
- tests/model/nord.out +0/−15
- tests/model/oddeven-s4.out +0/−44
- tests/model/oddeven.out +0/−52
- tests/model/plus-abs-s4.out +0/−40
- tests/model/plus-abs.out +0/−68
- tests/model/pretty-compact-s4.out +0/−32
- tests/model/pretty-compact.out +0/−32
- tests/model/pretty-s4.out +0/−20
- tests/model/pretty.out +0/−33
- tests/model/ratio-s4.out +0/−59
- tests/model/ratio.out +0/−114
- tests/model/regexes-s4.out +0/−45
- tests/model/regexes.out +0/−45
- tests/model/sets-s4.out +0/−50
- tests/model/sets.out +0/−81
- tests/model/speculate-reason-s4.out +0/−28
- tests/model/speculate-reason.out +0/−28
- tests/model/string-s4.out +0/−47
- tests/model/string.out +0/−73
- tests/model/tauts-s4.out +0/−33
- tests/model/tauts.out +0/−37
- tests/model/tuples-s4.out +0/−36
- tests/model/tuples.out +0/−35
- tests/model/unit-s4.out +0/−13
- tests/model/unit.out +0/−13
- tests/model/zip-s4.out +0/−23
- tests/model/zip.out +0/−25
- tests/test-creason.hs +0/−61
- tests/test-engine.hs +0/−93
- tests/test-eval.hs +0/−61
- tests/test-expr.hs +0/−83
- tests/test-model +0/−74
- tests/test-order.hs +0/−140
- tests/test-reason.hs +0/−258
- tests/test-sdist +0/−33
- tests/test-stats.hs +0/−41
- tests/test-utils.hs +0/−115
- tests/update-test-model +0/−74
.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