If I run the ‘denials’ example from the s(CASP) 2021 tutorial paper inside SWI prolog :
:- use_module(library(scasp)).
:- style_check(-discontiguous).
:- style_check(-singleton).
:- set_prolog_flag(scasp_unknown, fail).
opera(D) :- not home(D).
home(D) :- not opera(D).
home(monday).
:- baby(D), opera(D).
baby(tuesday).
… I get:
?- ['/users/mac/workspace-prolog/law/BNA/test2.pl'].
ERROR: /Users/MAC/workspace-prolog/law/BNA/test2.pl:9:
ERROR: '<meta-call>'/1: Unknown procedure: baby/1
Warning: /Users/MAC/workspace-prolog/law/BNA/test2.pl:9:
Warning: Goal (directive) failed: user:(baby(_59506),opera(_59506))
true.
?- ?+- opera(D).
% s(CASP) model
{ not home(D), opera(D)
},
D ∉ [monday] .
… the denial is not recognized and disregarded, yielding the same result as if no such constraint was present.
If I run the same program through s(CASP) natively, from the command line, I get:
Erics-MBP-4:scasp MAC$ ./scasp -i /users/mac/workspace-prolog/law/BNA/test2.pl
casp 1 ?- opera(D).
% Query
?- opera(D).
% ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
% Answer 1 (0.001 sec)
% ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
% Model
{ not baby(_ | {_ ∉ [tuesday]}), home(tuesday),
baby(tuesday), opera(D | {D ∉ [monday,tuesday]}),
not home(D | {D ∉ [monday,tuesday]}), not opera(tuesday)
}
% Bindings
D = D | {D ∉ [monday,tuesday]} ?
casp 2 ?- halt.
[ … after edit of test2.pl to comment out “:- baby(D), opera(D).”
Erics-MBP-4:scasp MAC$ ./scasp -i /users/mac/workspace-prolog/law/BNA/test2.pl
casp 1 ?- opera(D).
% Query
?- opera(D).
% ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
% Answer 1 (0.000 sec)
% ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
% Model
{ not home(D | {D ∉ [monday]}), opera(D | {D ∉ [monday]})
}
% Bindings
D = D | {D ∉ [monday]} ?