如何将逻辑子句转换为LEAN



我有一个这样的逻辑子句:

exists l.(language(l) & exists n.(name(n) & :op1(n,"English") & :name(l,n)))

其对应于表达式:";语言是英语;

子句由变量(l,n(、谓词(language,name,op1(和常量("English"(组成。每个变量首先被分配给其对应的类(l被分配给"语言",n被分配到"名称"(,然后类的实例被用于进一步的推理(:op1是一个谓词,将常数"英语"分配给类的实例"语言"。或者它可以被视为类的一个属性"语言"(。

有没有办法将其转换为LEAN代码?

有很多方法可以将其映射到精益中,这在很大程度上取决于您想要精确建模的内容。无论如何,这里有一种可能性。

Lean使用类型理论,类型理论和一阶逻辑之间的一个区别是,量化总是受一个类型的限制,而不是有一个通用的话语领域。也许写这篇文章最惯用的方式是作为

namespace lang_ex
inductive language
| english
def name : language → string
| language.english := "English"
end lang_ex

这定义了一个名为language的新类型,该类型有一个称为language.english的居民,并且它定义了函数name,该函数接受类型为language的东西并生成string(代表您的name类(。该函数的规则是,当给定CCD_ 7时;英语";。

这些指令或多或少地定义了以下公理:

namespace lang_ex
constant language : Type
constant language.english : language
constant name : language → string
axiom name_english : name language.english = "English"
end lang_ex

(constantaxiom没有区别——它们都是公理化的。(在Lean中,函数应用程序语法是并置的,所以name language.english而不是name(language.english)


这里有一种独特的写作方式,尽可能紧密地遵循你的子句:

namespace lang_ex
constant univ : Type
constant is_language : univ → Prop
constant is_name : univ → Prop
constant op1 : univ → string → Prop
constant name : univ → univ → Prop
axiom clause :
∃ (l : univ), is_language l ∧
∃ (n : univ), is_name n ∧ op1 n "English" ∧ name l n
end lang_ex

相关内容

  • 没有找到相关文章

最新更新