This code here doesn’t make much sense:
prove(L --> R):-
member(A => B,L),
del(A => B,L,NewL),!,
One can combine member/2 and del/3 into select/3. select/3
together with member/2 is part of the Prologue to Prolog:
**A Prologue for Prolog (working draft)** https://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue
So if I further strip away using a two sided sequent,
I can implement Hoa Wangs implication fagment:
P1. Initial rule: if λ, ζ are strings of atomic
formulae, then λ -> ζ is a theorem if some atomic
formula occurs an both sides of the arrow.
P5a. Rule —> => If ζ, φ -> λ, ψ, ρ, then ζ -> λ, φ => ψ, ρ P5b. Rule => -> If λ, ψ, ρ -> π and λ, ρ -> π, φ then λ, φ => ψ, ρ -> π
(Hao Wang. Toward Mechanical Mathematics. IBM
Journal of Research and Development 4:1 (1960), 15.)
as follows in 3 lines:
prove(L) :- select((A->B),L,R), !, prove([-A,B|R]).
prove(L) :- select(-(A->B),L,R), !, prove([A|R]), prove([-B|R]).
prove(L) :- select(-A,L,R), member(A,R), !.
Seems to work, I can prove Peirce Law:
?- prove([(((p->q)->p)->p)]).
true.
See also:
**Hao Wang on the formalisation of mathematics**
Lawrence C. Paulson 26 Jul 2023 https://lawrencecpaulson.github.io/2023/07/26/Wang.html
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 491 |
Nodes: | 16 (2 / 14) |
Uptime: | 146:51:27 |
Calls: | 9,694 |
Calls today: | 4 |
Files: | 13,732 |
Messages: | 6,178,670 |