在Isabelle中定义有限集

时间:2017-02-18 14:51:01

标签: isabelle

如何在Isabelle中定义常量集?例如{1,2,3}之类的东西(给它一个更有趣的转折,1,2,3为实数),或者{x \ in N:x< m},其中m是某个固定数字 - 或者可能更难,集合{N,R,C},其中N是自然数,R是实数,C是复数。

我想在所有情况下都必须像

???

但是用正确的东西替换{{1}}的各种尝试都失败了。

不知怎的,我发现的所有教程都谈到了在集合上定义函数 - 但我找不到像这样的简单例子来学习。

1 个答案:

答案 0 :(得分:1)

definition命令定义一个常量。它采用单个方程,其符号在左侧定义,例如definition "x = 5"definition "f = (λx. x + 1)"。为了提高可读性,函数参数可以出现在等式的左侧,例如, f x = x + 1

问题是你正在使用('if if only if'运算符,即布尔运算的相等性)。当你有布尔人时,使用它而不是简单的=是一个好主意,因为它保存了括号:你可以写'Px⟷x=2∨x= 5'而不是'P x =( 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 ⇒ real) setnat set set。只是说set会给你一个错误消息'无法解析类型',因为set是一个类型构造函数,它需要一个类型参数而你没有给它。

关于集合{ℕ,ℝ,ℂ},这是我在上面定义的常量B作为示例。伊莎贝尔没有,因为那只是UNIV :: complex set。 (UNIV是所讨论类型的所有值的集合)。请注意,在这种情况下,ℕ和are是自然数字和实数的集合,作为复数的子集。