Deutsch   English   Français   Italiano  
<vhhuuf$1qic1$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Julio Di Egidio <julio@diegidio.name>
Newsgroups: sci.logic
Subject: =?UTF-8?Q?Re=3A_can_=CE=BB-prolog_do_it=3F_=28Was=3A_How_to_prove_t?=
 =?UTF-8?Q?his_theorem_with_intuitionistic_natural_deduction=3F=29?=
Date: Tue, 19 Nov 2024 13:05:34 +0100
Organization: A noiseless patient Spider
Lines: 57
Message-ID: <vhhuuf$1qic1$1@dont-email.me>
References: <vhgdq0$19evr$1@dont-email.me> <vhgemi$ca9e$1@solani.org>
 <vhgg23$19evr$2@dont-email.me> <vhhsit$d108$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 19 Nov 2024 13:05:35 +0100 (CET)
Injection-Info: dont-email.me; posting-host="d0ce389b00a444e2f93f0bf2f9d6d685";
	logging-data="1919361"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18oR3sDaXCyyvOmnu7Em+eJbLgmmvDQMY8="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:iq+n+ZGYJySPfhb469InVz5Izgs=
Content-Language: en-GB
In-Reply-To: <vhhsit$d108$1@solani.org>
Bytes: 2745

On 19/11/2024 12:25, Mild Shock wrote:
> Can λ-prolog do it? The proof is a little bit
> tricky, since line 1 is used twice in
> line 2 and in line 4. So its not a proof
> tree, rather a proof mesh (*).

My reduction rules actually take a goal and, if it can be reduced, 
return proof steps and residual goals.  But indeed, my experiment has 
started with "how far can I get without lambda Prolog", aka "why lambda 
Prolog?"

Now, thanks also to your help, I have fixed my rule for `->E` and now my 
little solver in plain Prolog does it:

```plain
?- solve_test.

solve_test::pos:
- absorp: [(p->q)]=>p->p/\q --> true
- andcom: [p/\q]=>q/\p --> true
- export: [(p/\q->r)]=>p->q->r --> true
- import: [(p->q->r)]=>p/\q->r --> true
- frege_: [(p->q->r)]=>(p->q)->p->r --> true
- hsyll_: [(p->q),(q->r)]=>p->r --> true
solve_test::pos: tot.=6, FAIL=0 --> true.

solve_test::neg:
- pierce: []=>((p->q)->p)->p --> true
solve_test::neg: tot.=1, FAIL=0 --> true.

true.
```

```plain
?- solve(([]=>(p->q->r)->p/\q->r), Qs).
Qs = [
     impi((p->q->r)),
     impi(p/\q),
     impe(1:(q->r)),
     impe(1:p),
     impe(2:r),
     impe(2:q),
     equi(2:r),
     ande(1:(p,q)),
     equi(2:q),
     ande(1:(p,q)),
     equi(1:p)
].
```

In fact, it's still in its infancy and the output is still a flat mess 
with wrong hypothesis numbering, but I will keep working on it with the 
idea of going well past just propositional: will start sharing as soon 
as I manage to implement negation, and a proper proof tree...

-Julio