Ik probeer een manier te vinden om de volgende first order logica formule naar Prolog te vertalen:
Dit betekent dat ik de volgende output zou moeten krijgen:
Ik heb eerst de logica herschreven:
Gebruikmakend van "Clarks completion" (dit is een semantics die stelt dat elke definitional theory in een logisch programma gezet kan worden door gebruik te maken van de if-halves), kan ik de volgende Prolog code verkrijgen:
Helaas is deze theory alleen correct (er zal geen foute informatie afgeleid worden), maar niet compleet (ik kan bijvoorbeeld p(1) niet afleiden). Dit is een consequentie van Clarks completion.
Weet iemand of er een betere manier is die een equivalent logisch programma oplevert?
code:
1
| (p(0) or p(1)) and not (p(0) and p(1)) |
Dit betekent dat ik de volgende output zou moeten krijgen:
code:
1
2
3
4
5
6
| ?- p(0) Yes. ?- p(1) Yes. ?- p(0),p(1). No. |
Ik heb eerst de logica herschreven:
code:
1
2
3
| (p(0) or p(1)) and not (p(0) and p(1)) <=> (not p(0) -> p(1)) and (p(0) -> not p(1)) <=> p(0) <-> not p(1) |
Gebruikmakend van "Clarks completion" (dit is een semantics die stelt dat elke definitional theory in een logisch programma gezet kan worden door gebruik te maken van de if-halves), kan ik de volgende Prolog code verkrijgen:
Prolog:
1
| p(0) :- not p(1). |
Helaas is deze theory alleen correct (er zal geen foute informatie afgeleid worden), maar niet compleet (ik kan bijvoorbeeld p(1) niet afleiden). Dit is een consequentie van Clarks completion.
Weet iemand of er een betere manier is die een equivalent logisch programma oplevert?