Deutsch English Français Italiano |
<viv6ub$gnap$1@solani.org> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.nobody.at!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock <janburse@fastmail.fm> Newsgroups: sci.logic Subject: Re: The solver does not terminate Date: Fri, 6 Dec 2024 16:58:03 +0100 Message-ID: <viv6ub$gnap$1@solani.org> References: <vihumn$2eqeg$3@dont-email.me> <vijsa2$a7ut$1@solani.org> <vik669$3a0q9$1@dont-email.me> <vit5qd$1lts7$1@dont-email.me> <viv3d6$2bkfm$1@dont-email.me> <viv5ls$gmgf$1@solani.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 6 Dec 2024 15:58:03 -0000 (UTC) Injection-Info: solani.org; logging-data="548185"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.19 Cancel-Lock: sha1:fESUcSGGOfmPPBSEuL+sWLz8IUM= X-User-ID: eJwNwYEBwCAIA7CXQAq4c7DI/yfMxC00mAgP+Lx7aVQfJJ9vemNfU58yWY17dViaMl7N8BJwnaYaKQbnD29uFmM= In-Reply-To: <viv5ls$gmgf$1@solani.org> Bytes: 3953 Lines: 82 Plus a hand full of more techniques, like for example what is hard wired into Prolog, that you choose goals from left to right. See also: In both SL and SLD, "S" stands for the fact that the only literal resolved upon in any clause C i is one that is uniquely selected by a selection rule or selection function. In SL resolution, the selected literal is restricted to one which has been most recently introduced into the clause. In the simplest case, such a last-in-first-out selection function can be specified by the order in which literals are written, as in Prolog. https://en.wikipedia.org/wiki/SLD_resolution#The_origin_of_the_name_%22SLD%22 So basically you would replace something like: nth1(N, List, Lit, List2) select(Lit, List, List2) member(Lit, List) By this here: once(nth1(N, List, Lit, List2)) once(select(Lit, List, List2)) once(member(Lit, List)) No need to backtrack over multiple literals. With Gentzen inversion lemmas you can even go a step farther: nth1(N, List, Lit, List2), ! select(Lit, List, List2), ! member(Lit, List), ! Cut away certain rules, avoiding even more backtracking. Mild Shock schrieb: > > Yes, a binary tree of depth n, can still have 2^n nodes. > > Unless you apply some pruning technique. > > The typical pruning technique in proof search is > > Gentzens inversion lemma. > > Julio Di Egidio schrieb: >> On 05/12/2024 22:26, Julio Di Egidio wrote: >>> On 02/12/2024 12:37, Julio Di Egidio wrote: >>>> On 02/12/2024 09:49, Mild Shock wrote: >>>>> Could it be that your procedure doesn't >>>>> terminate always? Why is this not finished >>>>> after more than 1 minute? >>>> >>>> The solver *is* very slow at the moment, and you are trying to prove >>>> a too complicated statement: >>>> >>>> ``` >>>> ?- unfold(tnt((p<->(q<->r))<->(p<->q)), Qs). >>>> Qs = >>>> ((((p->(q->r)/\(r->q))/\((q->r)/\(r->q)->p)->(p->q)/\(q->p))/\((p->q)/\(q->p)->(p->(q->r)/\(r->q))/\((q->r)/\(r->q)->p))->0)->(((p->(q->r)/\(r->q))/\((q->r)/\(r->q)->p)->(p->q)/\(q->p))/\((p->q)/\(q->p)->(p->(q->r)/\(r->q))/\((q->r)/\(r->q)->p))->0)->0). >>>> >>>> ``` >>> >>> Yeah, there is definitely a bug, though unrelated to TNT: the >>> reduction rules are applied in the order of definition, and I can >>> confirm that, depending on that order, the solver may not terminate. >>> >>> Would you think there is an order that works? Otherwise it gets >>> complicated... >> >> It's slowly dawning on me what might be going wrong: I have proved >> that reductions decrease the goal size *for each residual goal*, but >> each reduction may produce more than one residual goal, and I have not >> proved that the proof search will not keep branching indefinitely... >> >> -Julio >> >