module visibles_with_store.

import store algebra_with_store.

type algebraVIS algebra.

evaluate_in_algebra A "get!var!value" ((inLocation Loc)::nil) Store V Store :-
	access Store Loc V.
evaluate_in_algebra A "set!var!value" ((inLocation Loc)::V::nil) Store
		theVoidValue Store' :-
	update Store Loc V Store'.

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