定义谓词;需要道具=>布尔

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 的含义。

你不能从 propbool。但您不必:只需使用对象级连接词()而不是元逻辑连接词()。它们在逻辑上是等价的,所以这不是问题。

元逻辑连接词应该(而且通常可以)只用在命题的“最外层”。

但是请注意,当您可以使用大型逻辑的时候,使用它们通常更方便,因为对象级的对 Isabelle 和 Isar 证明是不透明的语言(即它们就像任何其他函数一样是函数)而 Isar“知道” 是什么意思。例如,如果您有一个用 陈述的事实,您可以使用 of/OF 属性立即实例化变量并释放其中的假设。