{-
Haskell version of ...
! Text of rule base for Boyer benchmark !
! Started by Tony Kitto on 6th April 1988 !
! Changes Log !
! 07-04-88 ADK Corrected errors in rules
! 08-04-88 ADK Modified "or" rule to remove extra final (f) of book definition
Haskell version:
23-06-93 JSM initial version
-}
module Rulebasetext (rules) where
rules :: [String]
-- Rule base extracted from Gabriel pages 118 to 126
rules = [
"(equal (compile form)\
\(reverse (codegen (optimize form) (nil) ) ) )",
"(equal (eqp x y)\
\(equal (fix x)\
\(fix y) ) )",
"(equal (greaterp x y)\
\(lessp y x) )",
"(equal (lesseqp x y)\
\(not (lessp y x) ) )",
"(equal (greatereqp x y)\
\(not (lessp y x) ) )",
"(equal (boolean x)\
\(or (equal x (t) )\
\(equal x (f) ) )",
"(equal (iff x y)\
\(and (implies x y)\
\(implies y x) ) )",
"(equal (even1 x)\
\(if (zerop x)\
\(t)\
\(odd (1- x) ) ) )",
"(equal (countps- l pred)\
\(countps-loop l pred (zero) ) )",
"(equal (fact- i)\
\(fact-loop i 1) )",
"(equal (reverse- x)\
\(reverse-loop x (nil) ) )",
"(equal (divides x y)\
\(zerop (remainder y x) ) )",
"(equal (assume-true var alist)\
\(cons (cons var (t) )\
\alist) )",
"(equal (assume-false var alist)\
\(cons (cons var (f) )\
\alist) )",
"(equal (tautology-checker x)\
\(tautologyp (normalize x)\
\(nil) ) )",
"(equal (falsify x)\
\(falsify1 (normalize x)\
\(nil) ) )",
"(equal (prime x)\
\(and (not (zerop x))\
\(not (equal x (add1 (zero) ) ) )\
\(prime1 x (1- x) ) ) )",
"(equal (and p q)\
\(if p (if q (t) (f) ) (f) ) )",
"(equal (or p q)\
\(if p (t) (if q (t) (f) ) ) )", -- book has extra (f)
"(equal (not p)\
\(if p (f) (t) ) )",
"(equal (implies p q)\
\(if p (if q (t) (f) ) (t) ) )",
"(equal (fix x)\
\(if (numberp x) x (zero) ) )",
"(equal (if (if a b c) d e)\
\(if a (if b d e) (if c d e) ) )",
"(equal (zerop x)\
\(or (equal x (zero) )\
\(not (numberp x) ) ) )",
"(equal (plus (plus x y) z )\
\(plus x (plus y z) ) )",
"(equal (equal (plus a b) (zero ) )\
\(and (zerop a) (zerop b) ) )",
"(equal (difference x x)\
\(zero) )",
"(equal (equal (plus a b) (plus a c) )\
\(equal (fix b) (fix c) ) )",
"(equal (equal (zero) (difference x y) )\
\(not (lessp y x) ) )",
"(equal (equal x (difference x y) )\
\(and (numberp x)\
\(or (equal x (zero) )\
\(zerop y) ) ) )",
"(equal (meaning (plus-tree (append x y) ) a)\
\(plus (meaning (plus-tree x) a)\
\(meaning (plus-tree y) a) ) )",
"(equal (meaning (plus-tree (plus-fringe x) ) a)\
\(fix (meaning x a) ) )",
"(equal (append (append x y) z)\
\(append x (append y z) ) )",
"(equal (reverse (append a b) )\
\(append (reverse b) (reverse a) ) )",
"(equal (times x (plus y z) )\
\(plus (times x y)\
\(times x z) ) )",
"(equal (times (times x y) z)\
\(times x (times y z) ) )",
"(equal (equal (times x y) (zero) )\
\(or (zerop x)\
\(zerop y) ) )",
"(equal (exec (append x y)\
\pds envrn)\
\(exec y (exec x pds envrn)\
\envrn) )",
"(equal (mc-flatten x y)\
\(append (flatten x)\
\y) )",
"(equal (member x (append a b) )\
\(or (member x a)\
\(member x b) ) )",
"(equal (member x (reverse y) )\
\(member x y) )",
"(equal (length (reverse x) )\
\(length x) )",
"(equal (member a (intersect b c) )\
\(and (member a b)\
\(member a c) ) )",
"(equal (nth (zero)\
\i)\
\(zero) )",
"(equal (exp i (plus j k) )\
\(times (exp i j)\
\(exp i k) ) )",
"(equal (exp i (times j k) )\
\(exp (exp i j)\
\k) )",
"(equal (reverse-loop x y)\
\(append (reverse x)\
\y) )",
"(equal (reverse-loop x (nil) )\
\(reverse x) )",
"(equal (count-list z (sort-lp x y) )\
\(plus (count-list z x)\
\(count-list z y) ) )",
"(equal (equal (append a b)\
\(append a c) )\
\(equal b c) )",
"(equal (plus (remainder x y)\
\(times y (quotient x y) ) )\
\(fix x) )",
"(equal (power-eval (big-plus1 l i base)\
\base)\
\(plus (power-eval l base)\
\i) )",
"(equal (power-eval (big-plus x y i base)\
\base)\
\(plus i (plus (power-eval x base)\
\(power-eval y base) ) ) )",
"(equal (remainder y 1)\
\(zero) )",
"(equal (lessp (remainder x y)\
\y)\
\(not (zerop y) ) )",
"(equal (remainder x x)\
\(zero) )",
"(equal (lessp (quotient i j)\
\i)\
\(and (not (zerop i) )\
\(or (zerop j)\
\(not (equal j 1) ) ) ) )",
"(equal (lessp (remainder x y)\
\x)\
\(and (not (zerop y) )\
\(not (zerop x) )\
\(not (lessp x y) ) ) )",
"(equal (power-eval (power-rep i base)\
\base)\
\(fix i) )",
"(equal (power-eval (big-plus (power-rep i base)\
\(power-rep j base)\
\(zero)\
\base)\
\base)\
\(plus i j) )",
"(equal (gcd x y)\
\(gcd y x) )",
"(equal (nth (append a b)\
\i)\
\(append (nth a i)\
\(nth b (difference i (length a) ) ) ) )",
"(equal (difference (plus x y)\
\x)\
\(fix y) )",
"(equal (difference (plus y x)\
\x)\
\(fix y) )",
"(equal (difference (plus x y)\
\(plus x z) )\
\(difference y z) )",
"(equal (times x (difference c w) )\
\(difference (times c x)\
\(times w x) ) )",
"(equal (remainder (times x z)\
\z)\
\(zero) )",
"(equal (difference (plus b (plus a c) )\
\a)\
\(plus b c) )",
"(equal (difference (add1 (plus y z)\
\z)\
\(add1 y) )",
"(equal (lessp (plus x y)\
\(plus x z ) )\
\(lessp y z) )",
"(equal (lessp (times x z)\
\(times y z) )\
\(and (not (zerop z) )\
\(lessp x y) ) )",
"(equal (lessp y (plus x y) )\
\(not (zerop x) ) )",
"(equal (gcd (times x z)\
\(times y z) )\
\(times z (gcd x y) ) )",
"(equal (value (normalize x)\
\a)\
\(value x a) )",
"(equal (equal (flatten x)\
\(cons y (nil) ) )\
\(and (nlistp x)\
\(equal x y) ) )",
"(equal (listp (gopher x) )\
\(listp x) )",
"(equal (samefringe x y)\
\(equal (flatten x)\
\(flatten y) ) )",
"(equal (equal (greatest-factor x y)\
\(zero) )\
\(and (or (zerop y)\
\(equal y 1) )\
\(equal x (zero) ) ) )",
"(equal (equal (greatest-factor x y)\
\1)\
\(equal x 1) )",
"(equal (numberp (greatest-factor x y) )\
\(not (and (or (zerop y)\
\(equal y 1) )\
\(not (numberp x) ) ) ) )",
"(equal (times-list (append x y) )\
\(times (times-list x)\
\(times-list y) ) )",
"(equal (prime-list (append x y) )\
\(and (prime-list x)\
\(prime-list y) ) )",
"(equal (equal z (times w z) )\
\(and (numberp z)\
\(or (equal z (zero) )\
\(equal w 1) ) ) )",
"(equal (greatereqpr x y)\
\(not (lessp x y) ) )",
"(equal (equal x (times x y) )\
\(or (equal x (zero) )\
\(and (numberp x)\
\(equal y 1) ) ) )",
"(equal (remainder (times y x)\
\y)\
\(zero) )",
"(equal (equal (times a b)\
\1)\
\(and (not (equal a (zero) ) )\
\(not (equal b (zero) ) )\
\(numberp a)\
\(numberp b)\
\(equal (1- a)\
\(zero) )\
\(equal (1- b)\
\(zero) ) ) )",
"(equal (lessp (length (delete x l) )\
\(length l) )\
\(member x l) )",
"(equal (sort2 (delete x l) )\
\(delete x (sort2 l) ) )",
"(equal (dsort x)\
\(sort2 x) )",
"(equal (length\
\(cons \
\x1\
\(cons \
\x2\
\(cons \
\x3\
\(cons \
\x4\
\(cons \
\x5\
\(cons x6 x7) ) ) ) ) ) )\
\(plus 6 (length x7) ) )",
"(equal (difference (add1 (add1 x) )\
\2)\
\(fix x) )",
"(equal (quotient (plus x (plus x y) )\
\2)\
\(plus x (quotient y 2) ) )",
"(equal (sigma (zero)\
\i)\
\(quotient (times i (add1 i) )\
\2) )",
"(equal (plus x (add1 y) )\
\(if (numberp y)\
\(add1 (plus x y) )\
\(add1 x) ) )",
"(equal (equal (difference x y)\
\(difference z y) )\
\(if (lessp x y)\
\(not (lessp y z) )\
\(if (lessp z y)\
\(not (lessp y x) )\
\(equal (fix x)\
\(fix z) ) ) ) )",
"(equal (meaning (plus-tree (delete x y) )\
\a)\
\(if (member x y)\
\(difference (meaning (plus-tree y)\
\a)\
\(meaning x a) )\
\(meaning (plus-tree y)\
\a) ) )",
"(equal (times x (add1 y) )\
\(if (numberp y)\
\(plus x (times x y) )\
\(fix x) ) )",
"(equal (nth (nil)\
\i)\
\(if (zerop i)\
\(nil)\
\(zero) ) )",
"(equal (last (append a b) )\
\(if (listp b)\
\(last b)\
\(if (listp a)\
\(cons (car (last a) )\
\b)\
\b) ) )",
"(equal (equal (lessp x y)\
\z)\
\(if (lessp x y)\
\(equal t z)\
\(equal f z) ) )",
"(equal (assignment x (append a b) )\
\(if (assignedp x a)\
\(assignment x a)\
\(assignment x b) ) )",
"(equal (car (gopher x) )\
\(if (listp x)\
\(car (flatten x) )\
\(zero) ) )",
"(equal (flatten (cdr (gopher x) ) )\
\(if (listp x)\
\(cdr (flatten x) )\
\(cons (zero)\
\(nil) ) ) )",
"(equal (quotient (times y x)\
\y)\
\(if (zerop y)\
\(zero)\
\(fix x) ) )",
"(equal (get j (set i val mem) )\
\(if (eqp j i)\
\val\
\(get j mem) ) )"]
|