证明Isabelle中两个特定集合具有相同的基数

时间:2017-06-15 16:01:02

标签: set isabelle cardinality

我很难证明两套具有相同的基数。 以下所有集合都是有限的。

首先假设我们设置了(M :: b set)和函数foo ::“bset⇒bset⇒bool”
这样(foo A C = foo BC⟷A= B)并且M中的每个A实际上都有一个C,这样就是foo A C.

我试图显示该卡{S ∃A∈M。 (S = {C. foo A C})} =卡M. 对此的非正式证明是显而易见的,但我似乎无法找到有效的证据 在伊莎贝尔;既不是≤也不是≥。

1 个答案:

答案 0 :(得分:3)

好的,所以第一步是你应该以更方便的方式编写这个集合理解{S. ∃A∈M. (S = {C. foo A C}) }。第一步是{{C. foo A C} |A. A ∈ M},但我建议使用'set image'运算符:

lemma "{S. ∃A∈M. (S = {C. foo A C})} = (λA. {C. foo A C}) ` M" by blast

然后你可以简单地使用(λA. {C. foo A C})是单射的事实和规则card_image,它表示在内射函数下集合图像的基数与原始图像的基数相同设置:

lemma
  assumes "⋀A B C. A ∈ M ⟹ B ∈ M ⟹ foo A C = foo B C ⟷ A = B"
  shows   "card {S. ∃A∈M. (S = {C. foo A C})} = card M"
proof -
  have "{S. ∃A∈M. (S = {C. foo A C})} = (λA. {C. foo A C}) ` M"
    by blast
  also have "inj_on (λA. {C. foo A C}) M"
    using assms by (auto simp: inj_on_def)
  hence "card ((λA. {C. foo A C}) ` M) = card M"
    by (rule card_image)
  finally show ?thesis .
qed