Sujet : Elaboration Test 3 (Re: How to project variables? [PIP-4711: Marked Variables])
De : janburse (at) *nospam* fastmail.fm (Mild Shock)
Groupes : comp.lang.prologDate : 11. Apr 2025, 11:59:12
Autres entêtes
Message-ID : <vtasmn$11lt5$1@solani.org>
References : 1 2 3
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20
Hi,
We can also make a test case where both SWI-Prolog
and Trealla Prolog fail. Still Dogelog Player does
it as specified.
It is only the following query:
q(Y, Z, _X) :- _X = Y, Z = f(Y,Y).
The projection would be:
p(Y, Z) :- q(Y, Z, _X).
?- p(Y, Z).
Z = f(Y,Y).
Here are the testing results:
Trealla Prolog 2.68.11-5: Fail
?- _X = Y, Z = f(Y,Y).
Z = f(_X,_X). %%% expected Z = f(Y,Y)
?- Y = _X, Z = f(Y,Y).
Z = f(Y,Y).
SWI-Prolog 9.3.21: Fail
?- _X = Y, Z = f(Y,Y).
Z = f(Y,Y).
?- Y = _X, Z = f(Y,Y).
Y = _X,
Z = f(_X,_X). %%% expected Z = f(Y,Y)
Dogelog Player 1.3.2: Pass
?- _X = Y, Z = f(Y,Y).
Z = f(Y, Y).
?- Y = _X, Z = f(Y,Y).
Z = f(Y, Y).
Bye
Mild Shock schrieb:
Test 2 is only minorly more complex than Test 1.
It is only the following query:
q(Y, Z, _X) :- _X = Y, _X = Z.
The projection would be:
p(Y, Z) :- q(Y, Z, _X).
?- p(Y, Z).
Y = Z.
Here are the testing results:
Trealla Prolog 2.68.11-5: Fail
?- _X = Y, _X = Z.
true. %%% expected Z = Y
?- Y = _X, _X = Z.
Z = Y.
?- _X = Y, Z = _X.
true. %%% expected Z = Y
?- Y = _X, Z = _X.
Z = Y.
SWI-Prolog 9.3.21: Pass
?- _X = Y, _X = Z.
Y = Z.
?- Y = _X, _X = Z.
Y = Z.
?- _X = Y, Z = _X.
Y = Z.
?- Y = _X, Z = _X.
Y = Z.
Dogelog Player 1.3.2: Pass
?- _X = Y, _X = Z.
Y = Z.
?- Y = _X, _X = Z.
Y = Z.
?- _X = Y, Z = _X.
Y = Z.
?- Y = _X, Z = _X.
Y = Z.
Mild Shock schrieb:
Test 1 is probably the most simple test case.
It is only the following query:
>
q(Y, _X) :- _X = Y.
>
The projection would be:
>
p(Y) :- q(Y, _X).
>
?- p(Y).
true.
>
Here are the testing results:
>
Trealla Prolog 2.68.11-5: Pass
>
?- _X = Y.
true.
?- Y = _X.
true.
>
SWI-Prolog 9.3.21: Fail
>
?- _X = Y.
true.
?- Y = _X.
Y = _X. %%% expected true
>
Dogelog Player 1.3.2: Pass
>
?- _X = Y.
true.
?- Y = _X.
true.
>
Mild Shock schrieb:
Hi,
>
Now I am writing a new Prolog Improvement Proposal
(PIP), which is PIP-4711: Marked Variables. Can
we easily specify what marked variables should
>
do in the top-level? Oh yes. If you have a query
that contains unmarked and marked variables,
just like this here:
>
?- q(N1, .., Nn, _M1, .., _Mm)
>
Then the above query should work as:
>
p(N1, .., Nn) :- q(N1, .., Nn, _M1, .., _Mm).
>
?- p(N1, .., Nn).
>
The above specification assures that no information
is lost, because it relies on the existential
quantifier of Clark Completion. One can read the
>
definition of q/n logically in first order logic
as follows, namely with existential quantifiers:
>
p(N1, .., Nn) <=> EXISTS(_M1, .., _Mm):q(N1, .., Nn, _M1, .., _Mm)
>
Do some Prolog systems satisfy the above specification.
Amazingly most Prolog systems cannot do it. They
have problems archiving the above result, in very
>
small test cases. The main problem is some permutation
dependency, how the query q/n+m is formulated. It
seems most Prolog systems do not use a
>
permutation agnostic algorithm, whereas the
first order logic specification doesn't have some
permutation dependency and should be immune.
>
Test1 Test2
Trealla Prolog Pass Fail
SWI-Prolog Fail Pass
Dogelog Player Pass Pass
>
Bye
>
>
>