% 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).

 

 

/*#####################################################################

#######################################################################

#######################################################################

#####################################################################*/