Logic 关于逻辑和柯里霍华德书信的问题

Logic 关于逻辑和柯里霍华德书信的问题,logic,logic-programming,type-theory,curry-howard,Logic,Logic Programming,Type Theory,Curry Howard,你能解释一下逻辑编程的基本原理与类型系统和传统逻辑之间的语法相似现象之间的基本联系吗 Curry Howard通信不是关于逻辑编程,而是关于函数编程。Prolog的基本机制在John Robinson的证明理论中得到了证明,这说明了如何能够检查以Horn子句表示的逻辑公式是否正确,也就是说,是否可以找到术语来替代逻辑变量使其正确 因此,逻辑编程就是将程序指定为逻辑公式,程序的计算是某种形式的证明推理,在序言中,正如我所说的。相比之下,Curry-Howard通信显示了一种特殊的逻辑公式(称为)中

你能解释一下逻辑编程的基本原理与类型系统和传统逻辑之间的语法相似现象之间的基本联系吗

Curry Howard通信不是关于逻辑编程,而是关于函数编程。Prolog的基本机制在John Robinson的证明理论中得到了证明,这说明了如何能够检查以Horn子句表示的逻辑公式是否正确,也就是说,是否可以找到术语来替代逻辑变量使其正确

因此,逻辑编程就是将程序指定为逻辑公式,程序的计算是某种形式的证明推理,在序言中,正如我所说的。相比之下,Curry-Howard通信显示了一种特殊的逻辑公式(称为)中的证明如何与lambda演算中的程序相对应,程序的类型与证明所证明的公式相对应;lambda演算中的计算对应于证明理论中的一个重要现象,称为归一化,它将证明转换为新的、更直接的证明。所以逻辑编程和函数编程对应于这些逻辑的不同层次:逻辑程序匹配逻辑的公式,而函数程序匹配公式的证明

还有另一个区别:使用的逻辑通常是不同的。逻辑编程通常使用更简单的逻辑——正如我所说,Prolog基于Horn子句,这是一类高度受限的公式,其中的含义可能不会嵌套,并且没有析取,尽管Prolog使用切割规则恢复了经典逻辑的全部强度。相比之下,Haskell等函数式编程语言大量使用类型具有嵌套含义的程序,并通过各种形式的多态性进行修饰。它们也基于直觉逻辑,这是一类禁止使用排除中间原则的逻辑,罗宾逊的计算机制就是基于这一原则

其他几点:

  • 可以基于比Horn子句更复杂的逻辑进行逻辑编程;例如,Lambda prolog基于直觉逻辑,其计算机制与解析不同
  • 戴尔·米勒(Dale Miller)将逻辑编程背后的证明理论范式称为“证明搜索”作为编程隐喻,以与“证明作为程序隐喻”(Curry Howard通信中使用的另一个术语)形成对比

  • 逻辑编程基本上是关于目标导向的证明搜索。类型化语言和逻辑之间的结构关系通常涉及函数式语言,尽管有时是命令式语言和其他语言,但不直接涉及逻辑编程语言。这种关系将证明与程序联系起来

    因此,逻辑编程证明搜索可用于查找证明,然后将其解释为函数程序。这似乎是两者之间最直接的关系(正如你所要求的)


    以这种方式构建整个程序是不实际的,但它可以用于在程序中填充繁琐的细节,在实践中有一些重要的例子。这方面的一个基本例子是结构子类型——它对应于通过简单的蕴涵证明填充几个证明步骤。一个更复杂的例子是Haskell的类型类系统,它涉及到一种特定的目标导向搜索——在极端情况下,这涉及到编译时逻辑编程的图灵完整形式。

    你能更具体一点,或者提供一些例子吗?这是一个多么美妙的解释啊!你比我读过的维基和书籍做得更好,非常感谢!a想问(也许有点傻)一个问题:一般来说,lambda calculust中的一级函数对应于自然演绎的WRT是什么。。这些是高阶谓词吗?哦,如果用谓词扩展,我的意思是“在自然演绎中”:)对不起,另一条评论:为了澄清我最后一个问题的要点,你能解释一下短语
    吗?像Haskell这样的函数式编程语言大量使用类型具有嵌套含义的程序吗?@Bubba:一阶谓词calulus中的量化对应于lambda中的依赖类型微积分:有几种方法可以做到这一点。不能使用Horn子句来表示map这样的组合符:类型是(a->b)->[a]->[b],其中第一个“->”是嵌套的,因为它显示在最后一个“->”的左边,这使它成为一个order 2函数。Horn子句只能表示1阶函数。