852 |
852 |
853 corollary ring_iso_trans: "\<lbrakk> R \<simeq> S; S \<simeq> Q \<rbrakk> \<Longrightarrow> R \<simeq> Q" |
853 corollary ring_iso_trans: "\<lbrakk> R \<simeq> S; S \<simeq> Q \<rbrakk> \<Longrightarrow> R \<simeq> Q" |
854 using ring_iso_set_trans unfolding is_ring_iso_def by blast |
854 using ring_iso_set_trans unfolding is_ring_iso_def by blast |
855 |
855 |
856 lemma ring_iso_set_sym: |
856 lemma ring_iso_set_sym: |
857 assumes "ring R" |
857 assumes "ring R" and h: "h \<in> ring_iso R S" |
858 shows "h \<in> ring_iso R S \<Longrightarrow> (inv_into (carrier R) h) \<in> ring_iso S R" |
858 shows "(inv_into (carrier R) h) \<in> ring_iso S R" |
859 proof - |
859 proof - |
860 assume h: "h \<in> ring_iso R S" |
860 have h_hom: "h \<in> ring_hom R S" |
861 hence h_hom: "h \<in> ring_hom R S" |
|
862 and h_surj: "h ` (carrier R) = (carrier S)" |
861 and h_surj: "h ` (carrier R) = (carrier S)" |
863 and h_inj: "\<And> x1 x2. \<lbrakk> x1 \<in> carrier R; x2 \<in> carrier R \<rbrakk> \<Longrightarrow> h x1 = h x2 \<Longrightarrow> x1 = x2" |
862 and h_inj: "\<And> x1 x2. \<lbrakk> x1 \<in> carrier R; x2 \<in> carrier R \<rbrakk> \<Longrightarrow> h x1 = h x2 \<Longrightarrow> x1 = x2" |
864 unfolding ring_iso_def bij_betw_def inj_on_def by auto |
863 using h unfolding ring_iso_def bij_betw_def inj_on_def by auto |
865 |
864 |
866 have h_inv_bij: "bij_betw (inv_into (carrier R) h) (carrier S) (carrier R)" |
865 have h_inv_bij: "bij_betw (inv_into (carrier R) h) (carrier S) (carrier R)" |
867 using bij_betw_inv_into h ring_iso_def by fastforce |
866 using bij_betw_inv_into h ring_iso_def by fastforce |
868 |
867 |
869 show "inv_into (carrier R) h \<in> ring_iso S R" |
868 show "inv_into (carrier R) h \<in> ring_iso S R" |
870 apply (rule ring_iso_memI) |
869 apply (rule ring_iso_memI) |
871 apply (simp add: h_surj inv_into_into) |
870 apply (simp add: h_surj inv_into_into) |
872 apply (auto simp add: h_inv_bij) |
871 apply (auto simp add: h_inv_bij) |
873 apply (smt assms f_inv_into_f h_hom h_inj h_surj inv_into_into |
872 using ring_iso_memE [OF h] bij_betwE [OF h_inv_bij] |
874 ring.ring_simprules(5) ring_hom_closed ring_hom_mult) |
873 apply (simp_all add: \<open>ring R\<close> bij_betw_def bij_betw_inv_into_right inv_into_f_eq ring.ring_simprules(5)) |
875 apply (smt assms f_inv_into_f h_hom h_inj h_surj inv_into_into |
874 using ring_iso_memE [OF h] bij_betw_inv_into_right [of h "carrier R" "carrier S"] |
876 ring.ring_simprules(1) ring_hom_add ring_hom_closed) |
875 apply (simp add: \<open>ring R\<close> inv_into_f_eq ring.ring_simprules(1)) |
877 by (metis (no_types, hide_lams) assms f_inv_into_f h_hom h_inj |
876 by (simp add: \<open>ring R\<close> inv_into_f_eq ring.ring_simprules(6)) |
878 imageI inv_into_into ring.ring_simprules(6) ring_hom_one) |
|
879 qed |
877 qed |
880 |
878 |
881 corollary ring_iso_sym: |
879 corollary ring_iso_sym: |
882 assumes "ring R" |
880 assumes "ring R" |
883 shows "R \<simeq> S \<Longrightarrow> S \<simeq> R" |
881 shows "R \<simeq> S \<Longrightarrow> S \<simeq> R" |