如何将逻辑子句转换为 LEAN?
How can I convert logical clause to LEAN?
我有这样一个逻辑子句:
exists l.(language(l) & exists n.(name(n) & :op1(n,"English") & :name(l,n)))
对应于表达式:“语言是英语”
子句由变量(l,n)、谓词(language, name, op1)和常量("English")组成。每个变量首先分配给它对应的 class(l 分配给“语言”,n 分配给“名称”)然后 class 的实例用于进一步推理(:op1 是一个谓词将常量“英语”分配给 class“语言”的实例。或者它可以被视为 class“语言”的 属性。
有没有办法将其转换为 LEAN 代码?
您可以通过多种方式将其映射到精益中,这在很大程度上取决于您想要准确建模的内容。无论如何,这是一种可能性。
精益使用类型理论,类型理论和一阶逻辑之间的一个区别是量化总是受类型的限制,而不是有一个普遍的论域。也许最惯用的写法是
namespace lang_ex
inductive language
| english
def name : language → string
| language.english := "English"
end lang_ex
这定义了一个名为 language
的新类型,它有一个名为 language.english
的居民,它定义了一个函数 name
,它接受类型为 language
的东西并产生一个string
(代表您的 name
class)。该函数的规则是给定 language.english
时它的值是“English”。
这些指令的作用或多或少是定义了以下公理:
namespace lang_ex
constant language : Type
constant language.english : language
constant name : language → string
axiom name_english : name language.english = "English"
end lang_ex
(constant
和 axiom
之间没有区别——它们都是公理化地介绍事物。)在精益中,函数应用语法是并列的,所以 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
我有这样一个逻辑子句:
exists l.(language(l) & exists n.(name(n) & :op1(n,"English") & :name(l,n)))
对应于表达式:“语言是英语”
子句由变量(l,n)、谓词(language, name, op1)和常量("English")组成。每个变量首先分配给它对应的 class(l 分配给“语言”,n 分配给“名称”)然后 class 的实例用于进一步推理(:op1 是一个谓词将常量“英语”分配给 class“语言”的实例。或者它可以被视为 class“语言”的 属性。
有没有办法将其转换为 LEAN 代码?
您可以通过多种方式将其映射到精益中,这在很大程度上取决于您想要准确建模的内容。无论如何,这是一种可能性。
精益使用类型理论,类型理论和一阶逻辑之间的一个区别是量化总是受类型的限制,而不是有一个普遍的论域。也许最惯用的写法是
namespace lang_ex
inductive language
| english
def name : language → string
| language.english := "English"
end lang_ex
这定义了一个名为 language
的新类型,它有一个名为 language.english
的居民,它定义了一个函数 name
,它接受类型为 language
的东西并产生一个string
(代表您的 name
class)。该函数的规则是给定 language.english
时它的值是“English”。
这些指令的作用或多或少是定义了以下公理:
namespace lang_ex
constant language : Type
constant language.english : language
constant name : language → string
axiom name_english : name language.english = "English"
end lang_ex
(constant
和 axiom
之间没有区别——它们都是公理化地介绍事物。)在精益中,函数应用语法是并列的,所以 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