我如何在Isabelle中证明简单的lemma cd : "card {m∈ℕ. m <4} = 4"
陈述?
auto
对我没有帮助,奇怪sledgehammer
次超时(即使我在右侧使用不同的值,例如3
或5
确定我没有忽略一些技术性的Isabelle细节,这些细节可能实际上使得红衣主教评估其中一个数字。)
我的印象是我必须使用Set_Interval.thy
中的一些引理(或获得灵感),因为这些类型被广泛使用,但到目前为止我还没有取得进展。
答案 0 :(得分:3)
只是想补充一点,如果你把你的引理改写为"card {m::nat. m < n} = n"
,Isabelle就可以证明这一点。
*编辑,谢谢曼努埃尔。
答案 1 :(得分:1)
你的陈述的问题是它不是真的。使用thm Nats_def
:ℕ = range of_nat
of_nat
是从自然界到semiring_1
的规范同态,即具有1的半环.ℕ的定义基本上表示ℕ由环的所有元素组成。自然数of_nat n
的格式n
。如果你看一下{m∈ℕ. m <4}
的类型,你会发现它是'a
,或者如果你之前declare [[show_sorts]]
'a :: {ord, semiring_1}
,那就是一个1的半环和某种顺序。这种排序不必须与环结构兼容,也不必是线性的。
您可能认为您定义的集合始终是集{0, 1, 2, 3}
,但由于排序不需要与环结构兼容,因此情况并非如此。排序可能非常简单,因此您将获得所有自然数。
此外,即使集合 {0, 1, 2, 3}
,其基数也不一定是4.(想想戒指ℤ/2ℤ - 那么该集合将等于{{1} },所以基数是2)
您可能希望稍微限制表达式的类型。我认为这里正确的类型类是{0, 1}
,即具有1,没有零除数的半环,以及与环结构兼容的线性排序。然后你可以这样做:
linordered_semidom
考虑到命题的直观明显,证据有点难看;这里的解决方案不是首先以这种相对不方便的方式写下你想要描述的集合。知道如何以方便的方式写东西需要一些经验。