最初のステップでは、このセットの理解度を{S. ∃A∈M. (S = {C. foo A C}) }
と書く方が便利です。最初のステップは、{{C. foo A C} |A. A ∈ M}
だろうが、私は「設定した画像」演算子使用することをお勧めします:そして、あなたは、単に(λA. {C. foo A C})
が単射と画像のカーディナリティと言うルールcard_image
、であるという事実を使用することができます
lemma "{S. ∃A∈M. (S = {C. foo A C})} = (λA. {C. foo A C}) ` M" by blast
をは、元のセットと同じです:
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