(* Teorema_de_Cantor.thy -- Teorema de Cantor -- José A. Alonso Jiménez -- Sevilla, 2-mayo-2024 -- ------------------------------------------------------------------ *) (* --------------------------------------------------------------------- -- Demostrar el teorema de Cantor: -- \ f : \ \ set \, \ surjective f -- ------------------------------------------------------------------ *) theory Teorema_de_Cantor imports Main begin (* 1\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" proof (rule notI) assume "surj f" let ?S = "{i. i \ f i}" have "\ j. ?S = f j" using \surj f\ by (simp only: surjD) then obtain j where "?S = f j" by (rule exE) show False proof (cases "j \ ?S") assume "j \ ?S" then have "j \ f j" by (rule CollectD) moreover have "j \ f j" using \?S = f j\ \j \ ?S\ by (rule subst) ultimately show False by (rule notE) next assume "j \ ?S" with \?S = f j\ have "j \ f j" by (rule subst) then have "j \ ?S" by (rule CollectI) with \j \ ?S\ show False by (rule notE) qed qed (* 2\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" proof (rule notI) assume "surj f" let ?S = "{i. i \ f i}" have "\ j. ?S = f j" using \surj f\ by (simp only: surjD) then obtain j where "?S = f j" by (rule exE) have "j \ ?S" proof (rule notI) assume "j \ ?S" then have "j \ f j" by (rule CollectD) with \?S = f j\ have "j \ ?S" by (rule ssubst) then show False using \j \ ?S\ by (rule notE) qed moreover have "j \ ?S" proof (rule CollectI) show "j \ f j" proof (rule notI) assume "j \ f j" with \?S = f j\ have "j \ ?S" by (rule ssubst) then have "j \ f j" by (rule CollectD) then show False using \j \ f j\ by (rule notE) qed qed ultimately show False by (rule notE) qed (* 3\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" proof assume "surj f" let ?S = "{i. i \ f i}" have "\ j. ?S = f j" using \surj f\ by (simp only: surjD) then obtain j where "?S = f j" by (rule exE) have "j \ ?S" proof assume "j \ ?S" then have "j \ f j" by simp with \?S = f j\ have "j \ ?S" by simp then show False using \j \ ?S\ by simp qed moreover have "j \ ?S" proof show "j \ f j" proof assume "j \ f j" with \?S = f j\ have "j \ ?S" by simp then have "j \ f j" by simp then show False using \j \ f j\ by simp qed qed ultimately show False by simp qed (* 4\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" proof (rule notI) assume "surj f" let ?S = "{i. i \ f i}" have "\ j. ?S = f j" using \surj f\ by (simp only: surjD) then obtain j where "?S = f j" by (rule exE) have "j \ ?S = (j \ f j)" by (rule mem_Collect_eq) also have "\ = (j \ ?S)" by (simp only: \?S = f j\) finally show False by (simp only: simp_thms(10)) qed (* 5\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" proof assume "surj f" let ?S = "{i. i \ f i}" have "\ j. ?S = f j" using \surj f\ by (simp only: surjD) then obtain j where "?S = f j" by (rule exE) have "j \ ?S = (j \ f j)" by simp also have "\ = (j \ ?S)" using \?S = f j\ by simp finally show False by simp qed (* 6\ demostración *) theorem fixes f :: "'\ \ '\ set" shows "\ surj f" unfolding surj_def by best end