Path: news.eternal-september.org!eternal-september.org!feeder3.eternal-september.org!2.eu.feeder.erje.net!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.prolog Subject: Elaboration Test 1 (Re: How to project variables? [PIP-4711: Marked Variables]) Date: Fri, 11 Apr 2025 12:47:57 +0200 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 11 Apr 2025 10:47:59 -0000 (UTC) Injection-Info: solani.org; logging-data="1107212"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20 Cancel-Lock: sha1:0m15DLORRcZ3tlxE3cyXDzbLiww= X-User-ID: eJwNwokRACEIBLCWWJ4VyxGU/ku4mySMYC9n0GN+OoIbvkvI6kzrc8tuxQM21izKweRWDYWeCbhYCu9kv5IPQeEU8Q== In-Reply-To: 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 > >