这是在 Prolog 中编码说谎者悖论的正确方法吗?
英语中的骗子悖论:“这句话不是真的。”
?- LP = not(true(LP)).<br>
LP = not(true(LP)).
?- unify_with_occurs_check(LP, not(true(LP))).<br>
false.
经过其他人的仔细审查,即使我们忽略术语 not 和 true 的含义,上述表达式与说谎者悖论同构似乎是正确的。 Prolog 拒绝的是说谎者悖论的病态自我参照。
?- LP = foo(bar(LP))。 LP = foo(bar(LP)).
?- unify_with_occurrs_check(LP, foo(bar(LP)))。 假的。