【问题标题】:Proper definition of "atom" in Prolog and Logic ProgrammingProlog 和逻辑编程中“原子”的正确定义
【发布时间】:2020-08-15 08:34:11
【问题描述】:

我在SWI Prolog Discourse forum 上发布了这个问题,得到了一些有用的 cmets,但也许这里的人也对这个话题有一些想法。

我对如何在我们正在撰写的论文中使用“原子”这个词感到有些困惑。

(1) 在 Prolog 中,原子被称为“文本常量”。用作复合术语的名称,表示常量或文本。”。见here。因此,这些是原子:johngrandparent 等。

(2) 在有关逻辑编程的文本中,例如Riguzzi (2018)Baral and Gelfond (1994),“原子”被称为具有p(t1, t2, ..., tn) 形式的术语,其中ts 是术语,p 是谓词符号。这对应于经典一阶逻辑中“原子”的使用。

在谈论 Prolog 时假设 (1) 是“atom”的正确定义,而在谈论逻辑编程时假设 (2) 是“atom”的正确定义,我是否正确?我认为我感到困惑的一个原因是我将 Prolog 视为逻辑编程的一个实例。

干杯/JC

编辑 2020-08-18********************************************** *****

在使用 LP 术语时解释统一有点困难;我试过了。

与典型 Prolog 术语的统一:

  • 原子、数字、变量和化合物都是术语
  • Atom = 以小写字母开头的字符串
  • 数字 = 一个数字
  • 变量 = 以大写字母开头的字符串
  • Compound = p(t1, t2, ..., tn) 其中 p 是谓词符号,ts 是术语。

统一:

  • 如果两个原子相同,则它们会统一
  • 如果两个数相同,则统一
  • 变量与任何类型的术语相结合
  • 如果 (1) 它们具有相同的名称,(2) 相同数量的参数,(3) 它们的所有参数统一,(4) 它们的变量可以一致地实例化,则两个化合物统一

与典型 LP 术语的统一:

  • 常量、变量和函数都是术语
  • 常量 = 以小写字母或数字开头的字符串
  • 变量 = 以大写字母开头的字符串
  • Function = f(t1, t3, ..., tn) 其中 f 是函数符号,ts 是项
  • 原子公式 = p(t1, t2, ..., tn) 其中 p 是谓词符号,ts 是术语

统一:

  • 两个常量如果相同则统一
  • 变量与任何类型的术语相结合
  • 两个原子公式或两个函数统一如果 (1) 它们具有相同的名称,(2) 相同数量的参数,(3) 它们的所有参数统一,(4) 它们的变量可以一致地实例化

【问题讨论】:

  • 我认为你是对的:Prolog 将“原子”用于(某一类)形式逻辑称为“常量”的东西。您引用的文本将其用作“原子公式”的简写。在您的论文中完全避免使用“原子”一词并改用“常数”或“原子公式”可能是有意义的,除非您专门撰写有关 Prolog 的文章。至于 Prolog 是“逻辑编程”的一个实例,这个术语非常模糊,没有是/否的答案。
  • 是的,同一个词,但根据上下文的不同含义不同。我很确定Prolog的“原子”来自LISP的“原子”,它类似于“代表自身的短字符串”,类似于其他编程语言的“关键字”,但程序员可以灵活使用(尤其是在enums 等指定地点之外)。
  • Prolog 的“函子”具有相同的歧义,它代表与“谓词”相同的概念:一个符号常数(即一个原子)和一个元数——但“函子”在 @987654326 中使用@ 自 40 年代以来,在那里有非常不同的含义。

标签: prolog


【解决方案1】:

为了避免名称冲突,您可以谈论素数公式
或正面文字,但这三个都是一样的:

https://en.wiktionary.org/wiki/prime_formula

https://en.wikipedia.org/wiki/Literal_(mathematical_logic)

https://en.wikipedia.org/wiki/Atomic_formula

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2013-01-20
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多