% Homework 7
/*#####################################################################
#######################################################################
QUESTION 1
"-" not
"->"
conditional
"*" and
"+" or
#######################################################################
#####################################################################*/
/*================================================================
Table of negation
propos. |
propos. negation
--------------------------------------
atom | atom non boolean
not(A) | A idempotent law
A | not(A)
A or B
| not(A) and not(B) de morgan
law
A and B |
not(A) or not(B) de morgan
law
A->B |
A and not(B) imply negation
================================================================*/
negate(A,-A):-atomic(A).
negate(-A,A):-atomic(A).
negate(A+B,X*Y):-negate(A,X),negate(B,Y).
negate(A*B,X+Y):-negate(A,X),negate(B,Y).
negate(-(A+B),A+B):-!.
negate(-(A*B),A*B):-!.
negate(A->B,A*Y):-
negate(B,Y).
negate(-(A->B),A*Y):-
negate(-B,Y).
/*#####################################################################
#######################################################################
QUESTION 2
#######################################################################
#####################################################################*/
% nonvar(3)==> Yes
% nonvar(X)==> No
% val1(s(s(s(s(s(s(s(s(s(s(s(s(0)))))))))))),X)==> X =
12; No.
% val1(?,X)
% val2(X,?)
val1(0,0).
val1(s(0),1):-!.
val1(s(A),B) :- val1(A,C), B is C+1,!.
val1(s(A),B) :- val1(A,C), B is C+1,nonvar(B).
val2(0,0).
val2(s(0),1).
val2(s(A),B) :- val2(A,C), B is C+1,nonvar(s(A)) .
value(A,B):-nonvar(A),nonvar(B),fail.
value(A,B):-nonvar(A),val1(A,B),!.
value(A,B):-nonvar(B),val2(A,B),!.
addS(0,0,0):-!.
addS(0,B,B):-!.
addS(A,0,A):-!.
addS(A,B,S):-value(A,X),
value(B,Y), Stemp is X+Y, value(S,Stemp).
subS(0,0,0):-!.
subS(0,B,0):-!.
subS(A,0,A):-!.
subS(A,B,S):-value(A,X),
value(B,Y), X>Y,Stmp is X-Y, value(S,Stmp).
subS(A,B,0):-value(A,X),
value(B,Y), X=<Y.
mulS(0,B,0):-!.
mulS(A,0,0):-!.
mulS(0,0,0):-!.
mulS(A,B,S):-value(A,X),
value(B,Y), Stemp is X*Y, value(S,Stemp).
/*#####################################################################
#######################################################################
#######################################################################
#####################################################################*/