定义谓词;需要道具=>布尔
Defining a predicate; need prop=>bool
我正在尝试定义一个函数,该函数接受一个集合和一个关系,returns 一个布尔值,告诉该关系是否在集合上是自反的。我试着这样定义它:
definition refl::"'a set⇒('a×'a) set⇒bool" where
"refl A R = (∀x. x∈A⟹(x,x)∈R)"
但伊莎贝尔给我以下错误:
Type unification failed: Clash of types "prop" and "bool"
Type error in application: incompatible operand type
Operator: (=) (refl A R) :: bool ⇒ bool
Operand: ∀x. x ∈ A ⟹ (x, x) ∈ R :: prop
我似乎找不到任何将“prop”强制转换为“bool”的函数。我还尝试更改定义以设置 RHS = True,但我得到了同样的错误。
定义函数的正确方法是什么?
您需要编写它,使值首先不是 prop
— 没有转换。在这种情况下,您在 ∀x. x ∈ A
和 (x, x) ∈ R
之间使用了道具级别的含义 ⟹
。您可以改用单宽度箭头 -->
,这是 bools 的含义。
你不能从 prop
到 bool
。但您不必:只需使用对象级连接词(⟶
和 ∀
)而不是元逻辑连接词(⟹
和 ⋀
)。它们在逻辑上是等价的,所以这不是问题。
元逻辑连接词应该(而且通常可以)只用在命题的“最外层”。
但是请注意,当您可以使用大型逻辑的时候,使用它们通常更方便,因为对象级的对 Isabelle 和 Isar 证明是不透明的语言(即它们就像任何其他函数一样是函数)而 Isar“知道”⟹
和 ⋀
是什么意思。例如,如果您有一个用 ⟹
和 ⋀
陈述的事实,您可以使用 of
/OF
属性立即实例化变量并释放其中的假设。
我正在尝试定义一个函数,该函数接受一个集合和一个关系,returns 一个布尔值,告诉该关系是否在集合上是自反的。我试着这样定义它:
definition refl::"'a set⇒('a×'a) set⇒bool" where
"refl A R = (∀x. x∈A⟹(x,x)∈R)"
但伊莎贝尔给我以下错误:
Type unification failed: Clash of types "prop" and "bool"
Type error in application: incompatible operand type
Operator: (=) (refl A R) :: bool ⇒ bool
Operand: ∀x. x ∈ A ⟹ (x, x) ∈ R :: prop
我似乎找不到任何将“prop”强制转换为“bool”的函数。我还尝试更改定义以设置 RHS = True,但我得到了同样的错误。 定义函数的正确方法是什么?
您需要编写它,使值首先不是 prop
— 没有转换。在这种情况下,您在 ∀x. x ∈ A
和 (x, x) ∈ R
之间使用了道具级别的含义 ⟹
。您可以改用单宽度箭头 -->
,这是 bools 的含义。
你不能从 prop
到 bool
。但您不必:只需使用对象级连接词(⟶
和 ∀
)而不是元逻辑连接词(⟹
和 ⋀
)。它们在逻辑上是等价的,所以这不是问题。
元逻辑连接词应该(而且通常可以)只用在命题的“最外层”。
但是请注意,当您可以使用大型逻辑的时候,使用它们通常更方便,因为对象级的对 Isabelle 和 Isar 证明是不透明的语言(即它们就像任何其他函数一样是函数)而 Isar“知道”⟹
和 ⋀
是什么意思。例如,如果您有一个用 ⟹
和 ⋀
陈述的事实,您可以使用 of
/OF
属性立即实例化变量并释放其中的假设。