I think that I think that I am doing a little confusion with the declarative view of not predicate in Prolog.
I have that I can implement not predicate simply in this way:
not(P) :- P, !, fail;
true.
where P it is a predicate and not P is FALSE if P it is TRUE and TRUE if P it is false.
Reading on the Bratko book I can read:
If Goal succeeds then not(Goal) fails, otherwise not(Goal) succeeds
Ok maybe I am doing to much problem trying to interpret this code snippet but seems me that this goes beyond the declarative paradigm and the logic and go into some kind of procedural paradigm
It seems to me that is a form of if{} else{} implementing by the cut and the fail predicate predicate...I read it in this way:
P is a boolean predicate that can only be: TRUE or FALSE
IF P is TRUE then forces to fail (so it is that not(P) is FALSE) and avoid backtracking to not have other responses.
ELSE P is FALSE and not P is TRUE.
I don't know if my interpretation is wrong, if I am missing something in the reasoning or if I am doing to much problem with stupids questions...