(* Las_funciones_biyectivas_tienen_inversa.thy -- Las funciones biyectivas tienen inversa. -- José A. Alonso Jiménez -- Sevilla, 17-junio-2024 -- ------------------------------------------------------------------ *) (* --------------------------------------------------------------------- -- En Isabelle se puede definir que g es una inversa de f por -- definition inversa :: "('a \ 'b) \ ('b \ 'a) \ bool" where -- "inversa f g \ (\ x. (g \ f) x = x) \ (\ y. (f \ g) y = y)" -- y que f tiene inversa por -- definition tiene_inversa :: "('a \ 'b) \ bool" where -- "tiene_inversa f \ (\ g. inversa f g)" -- -- Demostrar que si la función f es biyectiva, entonces f tiene inversa. -- ------------------------------------------------------------------ *) theory Las_funciones_biyectivas_tienen_inversa imports Main begin definition inversa :: "('a \ 'b) \ ('b \ 'a) \ bool" where "inversa f g \ (\ x. (g \ f) x = x) \ (\ y. (f \ g) y = y)" definition tiene_inversa :: "('a \ 'b) \ bool" where "tiene_inversa f \ (\ g. inversa f g)" (* 1\ demostración *) lemma assumes "bij f" shows "tiene_inversa f" proof - have "surj f" using assms by (rule bij_is_surj) then obtain g where hg : "\y. f (g y) = y" by (metis surjD) have "inversa f g" proof (unfold inversa_def; intro conjI) show "\x. (g \ f) x = x" proof (rule allI) fix x have "inj f" using \bij f\ by (rule bij_is_inj) then show "(g \ f) x = x" proof (rule injD) have "f ((g \ f) x) = f (g (f x))" by simp also have "\ = f x" by (simp add: hg) finally show "f ((g \ f) x) = f x" by this qed qed next show "\y. (f \ g) y = y" by (simp add: hg) qed then show "tiene_inversa f" using tiene_inversa_def by blast qed (* 2\ demostración *) lemma assumes "bij f" shows "tiene_inversa f" proof - have "surj f" using assms by (rule bij_is_surj) then obtain g where hg : "\y. f (g y) = y" by (metis surjD) have "inversa f g" proof (unfold inversa_def; intro conjI) show "\x. (g \ f) x = x" proof (rule allI) fix x have "inj f" using \bij f\ by (rule bij_is_inj) then show "(g \ f) x = x" proof (rule injD) have "f ((g \ f) x) = f (g (f x))" by simp also have "\ = f x" by (simp add: hg) finally show "f ((g \ f) x) = f x" by this qed qed next show "\y. (f \ g) y = y" by (simp add: hg) qed then show "tiene_inversa f" using tiene_inversa_def by auto qed (* 3\ demostración *) lemma assumes "bij f" shows "tiene_inversa f" proof - have "inversa f (inv f)" proof (unfold inversa_def; intro conjI) show "\x. (inv f \ f) x = x" by (simp add: \bij f\ bij_is_inj) next show "\y. (f \ inv f) y = y" by (simp add: \bij f\ bij_is_surj surj_f_inv_f) qed then show "tiene_inversa f" using tiene_inversa_def by auto qed end