咨询:我的Prolog表达式结构是否与说谎者悖论结构同构?
咨询:我的Prolog表达式结构是否与说谎者悖论结构同构?
我们假设Prolog不评估术语“not”和“true”的含义,仅对表达式的结构进行评估。
英文表述的说谎者悖论: "This sentence is not true."
?- LP = not(true(LP)). LP = not(true(LP)). ?- unify_with_occurs_check(LP, not(true(LP))). false.
经他人仔细审核后,可以确定上述表达式与(结构层面的)说谎者悖论同构。
专家认为Prolog将“not”和“true”视为无意义符号,仅评估表达式的结构。
?- LP = foo(bar(LP)). LP = foo(bar(LP)). ?- unify_with_occurs_check(LP, foo(bar(LP))). false.
SWI-Prolog中unify_with_occurs_check/2的实现具有循环安全性,仅防范创建循环,而非防范参数中已存在的循环。
我的理解是,Prolog检测到了表达式求值序列有向图中的循环。
我的回答中引用的Clocksin & Mellish文献详细解释了unify_with_occurs_check拒绝LP的原因。
内容的提问来源于stack exchange,提问作者polcott
相关产品推荐
相关产品推荐

