module visibles.

import algebra debug_write.

type algebraVIS algebra.

evaluate_in_algebra A "theVoid" nil theVoidValue.
evaluate_in_algebra A "true" nil (inTruthValue tt).
evaluate_in_algebra A "false" nil (inTruthValue ff).
evaluate_in_algebra A "and" ((inTruthValue tt)::(inTruthValue tt)::nil)
				(inTruthValue tt) :- !.
evaluate_in_algebra A "and" ((inTruthValue X)::(inTruthValue Y)::nil)
				(inTruthValue ff).
evaluate_in_algebra A "or" ((inTruthValue ff)::(inTruthValue ff)::nil)
				(inTruthValue ff) :- !.
evaluate_in_algebra A "or" ((inTruthValue X)::(inTruthValue Y)::nil)
				(inTruthValue tt).
evaluate_in_algebra A "not" ((inTruthValue tt)::nil) (inTruthValue ff).
evaluate_in_algebra A "not" ((inTruthValue ff)::nil) (inTruthValue tt).
evaluate_in_algebra A "0" nil (inInteger 0).
evaluate_in_algebra A "1" nil (inInteger 1).
evaluate_in_algebra A "add" ((inInteger I1)::(inInteger I2)::nil)
				(inInteger Res) :-
	Res is I1 + I2.
evaluate_in_algebra A "mult" ((inInteger I1)::(inInteger I2)::nil)
				(inInteger Res) :-
	Res is I1 * I2.
evaluate_in_algebra A "equal" ((inInteger I1)::(inInteger I1)::nil)
				(inTruthValue tt) :- !.
evaluate_in_algebra A "equal" ((inInteger I1)::(inInteger I2)::nil)
				(inTruthValue ff).
