我的Prolog表达式的结构与说谎者悖论的结构同构吗?

问题描述 投票:0回答:1

我的 Prolog 表达式的结构与说谎者悖论的结构同构吗?

我们假设 Prolog 不评估术语“not”和“true”的含义,而仅评估表达式的结构。

英语中的骗子悖论:“这句话不是真的。”

?- LP = not(true(LP)).
LP = not(true(LP)).

?- unify_with_occurs_check(LP, not(true(LP))).
false.

经过其他人仔细审查后,即使我们忽略术语“not”和“true”的英文含义并将其替换为“foo”和“bar”,上述表达式与说谎者悖论同构似乎是正确的。 Prolog 拒绝的是说谎者悖论的病态自我参照。

?- LP = foo(bar(LP)).
LP = foo(bar(LP)).

?- unify_with_occurs_check(LP, foo(bar(LP))).
false.

我的答案中的 Clock & Mellish 文本详细解释了原因 unify_with_occurrs_check 拒绝 LP。

prolog swi-prolog
1个回答
-3
投票

Prolog 正确拒绝任何具有与说谎者悖论相同的病态自指结构的表达式及其 unify_with_occurrs_check/2。

© www.soinside.com 2019 - 2024. All rights reserved.