factIsNotTrue(Param1, Param2) :-
\+fact(Param1, Param2).
The snippet above means "factIsNotTrue relation holds between Param1
and Param2
if fact(Param1, Param2)
is not provable.
When you query factIsNotTrue(f1p1, Param2).
Obviosuly prolog finds that fact(f1p1, f1p2)
is in fact provable so the query fails.
You can modify your code as follows to generate the negated values:
param(f1p1).
param(f1p2).
param(f2p1).
param(f2p2).
param(f3p1).
param(f3p2).
fact(f1p1, f1p2).
fact(f2p1, f2p2).
fact(f3p1, f3p2).
factIsNotTrue(Param1, Param2):-
param(Param1),
param(Param2),
\+ fact(Param1, Param2).
Test run:
?- factIsNotTrue(f1p1, Param2).
Param2 = f1p1 ;
Param2 = f2p1 ;
Param2 = f2p2 ;
Param2 = f3p1 ;
Param2 = f3p2.
?- factIsNotTrue(f1p1, f1p2).
false.