在Isabelle中定义有限集
如何在Isabelle中定义常量集?例如{1,2,3}(给它一个更有趣的扭曲,1,2,3是实数),或者{x\in N:x在Isabelle中定义有限集,isabelle,Isabelle,如何在Isabelle中定义常量集?例如{1,2,3}(给它一个更有趣的扭曲,1,2,3是实数),或者{x\in N:x
definition a_set :: set
where "a_set ⟷ ??? "
但是用正确的东西替换?
的各种尝试都失败了
不知怎的,我找到的所有教程都谈到了在集合上定义函数,但我找不到像这样的简单例子来学习。使用
definition
命令定义常量。它采用一个在左侧定义符号的等式,例如定义“x=5”
或定义“f=(λx.x+1)”
。为了提高可读性,函数参数可以出现在等式的左侧,例如fx=x+1
问题是您正在使用⟷代码>(“当且仅当”运算符,即布尔数相等)。当你有布尔值时,最好使用它而不是简单的=
,因为它可以保存括号:你可以写'px'⟷ x=2∨ x=5'而不是'px=(x=2∨ x=5。(与逻辑连接词相比,=
运算符绑定的强度更大∨代码>和∧代码>;⟷另一方面,代码>,绑定更弱)
⟷
只是另一种专门针对布尔人的书写方式。这意味着,如果定义的内容不返回布尔值,⟷代码>不起作用。只需使用常规的=
:
definition A :: "real set" where
"A = {1, 2, 3}"
或者,举另一个例子:
definition B :: "complex set set" where
"B = {ℕ, ℝ, UNIV}"
注意HOL是一个类型化逻辑;这意味着你不能只是这样做
definition a_set :: set
因为没有所有集合的类型。只有一种类型的所有集合的元素具有特定的类型,例如nat set
或(real⇒ 实际)设置
或确实nat设置
。只说set
会给您一条错误消息“无法解析类型”,因为set
是一个类型构造函数,需要一个类型参数,而您没有给它任何类型参数
关于布景{ℕ, ℝ, ℂ}, 这是上面定义的常量B
I,作为示例。没有ℂ因为那只是UNIV::complex set
(UNIV
是所讨论类型的所有值的集合)ℕ 及ℝ 在这种情况下,自然数和实数的集合是复数的子集。答案很好,thx!但不知何故,一个稍微复杂的集合定义,如定义a::“nat set”其中“a={n∈ℕ . 这里请注意我的答案:这是一个代码生成失败的示例,value
返回到其他方法,并且输出不是非常有用。尽管有时看起来很有用,但Isabelle实际上无法发挥神奇的作用。计算表达式需要Isabelle为所有涉及的常量建立代码方程d、 由于常数涉及对无限集合(自然数)的集合理解,因此没有可用的代码方程。当然,您的示例非常简单,但代码生成器不知道这一点。顺便说一下ℕ 在中,存在冗余,因为您的集合类型为nat set
,所以ℕ
与UNIV
相同。您可以简单地编写:“A={n。在这种情况下,让评估工作的通常方法是提供一个代码等式,例如,在您的情况下,引理A_code[code]:“A={0,1}”by(auto simp:A_def)
。然后值
起作用。