Skip to content

Instantly share code, notes, and snippets.

@barrucadu
Created December 15, 2015 06:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save barrucadu/64c4c9f0ddbb9475252c to your computer and use it in GitHub Desktop.
Save barrucadu/64c4c9f0ddbb9475252c to your computer and use it in GitHub Desktop.
lemma finite_map_elems_card:
assumes "finite {(a, b). m a = Some b}"
shows "card {(a, b). m a = Some b} = card (Map.dom m)" (is "card ?E = card ?D")
proof-
have "Map.dom m = fst ` ?E"
apply (simp add: Map.dom_def)
by force
hence de: "card ?D ≤ card ?E"
by (simp add: assms card_image_le)
have e_alt: "{(a, b). m a = Some b} = (λ a. (a, the (m a))) ` Map.dom m"
by fastforce
have "∀ (a, b) ∈ ?E. ¬ (∃ c. b ≠ c ∧ (a, c) ∈ ?E)"
by auto
hence ed: "card ?E ≤ card ?D"
by (metis `?D = fst \` ?E` assms card_image_le e_alt finite_imageI)
show ?thesis
using antisym_conv ed de
by blast
qed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment