好吧,所以第一步是你应该用更方便的方式写下这个集合理解{S. ∃A∈M. (S = {C. foo A C}) }
。第一步将是{{C. foo A C} |A. A ∈ M}
,但我会建议使用“设置图像”运营商:
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