@@ -909,6 +909,8 @@ end Adjoin
909909
910910section RingEquiv
911911
912+ open IsFractionRing
913+
912914variable {R S : Type *} (K L : Type *) [CommRing R] [IsDomain R] [CommRing S] [IsDomain S]
913915 [CommRing K] [CommRing L] [Algebra R K] [Algebra S L] [IsFractionRing R K] [IsFractionRing S L]
914916 (f : R ≃+* S)
@@ -921,8 +923,8 @@ local instance (f : R ≃+* S) : RingHomInvPair (f : R →+* S) f.symm :=
921923is fractional with respect to `S⁰`.
922924
923925Do not confuse with `IsFractional.map`. -/
924- theorem _root_.IsFractional.map' {I : Submodule R K} (hI : IsFractional R⁰ I) :
925- IsFractional S⁰ (I.map (IsFractionRing. semilinearEquivOfRingEquiv K L f).toLinearMap) := by
926+ theorem _root_.IsFractional.mapEquiv {I : Submodule R K} (hI : IsFractional R⁰ I) :
927+ IsFractional S⁰ (I.map (semilinearEquivOfRingEquiv K L f).toLinearMap) := by
926928 simp only [IsFractional, mem_nonZeroDivisors_iff_ne_zero, ne_eq, Submodule.mem_map,
927929 forall_exists_index, and_imp, forall_apply_eq_imp_iff₂] at hI ⊢
928930 obtain ⟨r, hr0, hr⟩ := hI
@@ -933,64 +935,57 @@ theorem _root_.IsFractional.map' {I : Submodule R K} (hI : IsFractional R⁰ I)
933935 simp only [IsLocalization.IsInteger, RingHom.mem_rangeS] at hr ⊢
934936 obtain ⟨r', hr'⟩ := hr
935937 use f r'
936- simp only [IsFractionRing. semilinearEquivOfRingEquiv, RingEquiv.toEquiv_eq_coe,
937- Equiv.toFun_as_coe, EquivLike.coe_coe, Equiv.invFun_as_coe, LinearMap.coe_mk, AddHom.coe_mk]
938- rw [Algebra.smul_def, ← IsFractionRing. ringEquivOfRingEquiv_algebraMap f (K := K) (L := L) r,
939- ← map_mul, ← Algebra.smul_def, ← hr', IsFractionRing. ringEquivOfRingEquiv_algebraMap]
938+ simp only [semilinearEquivOfRingEquiv, RingEquiv.toEquiv_eq_coe, Equiv.toFun_as_coe ,
939+ EquivLike.coe_coe, Equiv.invFun_as_coe, LinearMap.coe_mk, AddHom.coe_mk]
940+ rw [Algebra.smul_def, ← ringEquivOfRingEquiv_algebraMap f (K := K) (L := L) r,
941+ ← map_mul, ← Algebra.smul_def, ← hr', ringEquivOfRingEquiv_algebraMap]
940942
941- set_option backward.isDefEq.respectTransparency false in
942943/-- The equiv `FractionalIdeal R⁰ K ≃+* FractionalIdeal S⁰ L`
943944 induced by a ring isomorphism `f : R ≃+* S`. -/
944945@ [simps -isSimp]
945946noncomputable def ringEquivOfRingEquiv :
946947 FractionalIdeal R⁰ K ≃+* FractionalIdeal S⁰ L :=
947- { toFun I := ⟨Submodule.map (IsFractionRing.semilinearEquivOfRingEquiv _ _ f).toLinearMap I.val,
948- IsFractional.map' K L f I.prop⟩
949- invFun J := ⟨J.val.map (IsFractionRing.semilinearEquivOfRingEquiv _ _ f.symm).toLinearMap,
950- IsFractional.map' L K f.symm J.prop⟩
951- map_add' I J := by
952- rw [Subtype.ext_iff]
953- simp
948+ { toFun I := ⟨Submodule.map (semilinearEquivOfRingEquiv _ _ f).toLinearMap I.val,
949+ IsFractional.mapEquiv K L f I.prop⟩
950+ invFun J := ⟨J.val.map (semilinearEquivOfRingEquiv _ _ f.symm).toLinearMap,
951+ IsFractional.mapEquiv L K f.symm J.prop⟩
952+ map_add' I J := by ext x; simp [← mem_coe]
954953 map_mul' I J := by
955954 simp only [FractionalIdeal.coe_ext_iff, val_eq_coe, coe_mul, coe_mk]
956955 apply le_antisymm <;> simp only [map_le_iff_le_comap, Submodule.mul_le, mem_coe, mem_comap,
957- IsFractionRing. semilinearEquivOfRingEquiv_apply, map_mul, mem_map_equiv,
958- IsFractionRing. semilinearEquivOfRingEquiv_symm_apply, LinearEquiv.coe_coe]
956+ semilinearEquivOfRingEquiv_apply, map_mul, mem_map_equiv,
957+ semilinearEquivOfRingEquiv_symm_apply, LinearEquiv.coe_coe]
959958 · exact fun m hm n hn ↦ Submodule.mul_mem_mul (mem_map_of_mem hm) (mem_map_of_mem hn)
960959 · exact fun m hm n hn ↦ Submodule.mul_mem_mul hm hn
961960 left_inv I := by
962961 simp only [RingEquiv.symm_symm, val_eq_coe, ← Submodule.map_comp, LinearEquiv.comp_coe,
963962 coe_ext_iff, coe_mk]
964963 convert Submodule.map_id _
965- ext; simp [IsFractionRing.semilinearEquivOfRingEquiv_apply , IsLocalization.map_map]
964+ ext; simp [semilinearEquivOfRingEquiv , IsLocalization.map_map]
966965 right_inv I := by
967966 simp only [RingEquiv.symm_symm, val_eq_coe, ← Submodule.map_comp, LinearEquiv.comp_coe,
968967 coe_ext_iff, coe_mk]
969968 convert Submodule.map_id _
970- ext; simp [IsFractionRing.semilinearEquivOfRingEquiv_apply , IsLocalization.map_map]}
969+ ext; simp [semilinearEquivOfRingEquiv , IsLocalization.map_map]}
971970
972971lemma ringEquivOfRingEquiv_apply (f : R ≃+* S) (I : FractionalIdeal (nonZeroDivisors R) K) :
973972 ringEquivOfRingEquiv K L f I =
974- ⟨Submodule.map (IsFractionRing. semilinearEquivOfRingEquiv _ _ f).toLinearMap I.val,
975- IsFractional.map' K L f I.prop⟩ := rfl
973+ ⟨Submodule.map (semilinearEquivOfRingEquiv _ _ f).toLinearMap I.val,
974+ IsFractional.mapEquiv K L f I.prop⟩ := rfl
976975
977976lemma ringEquivOfRingEquiv_apply_val (f : R ≃+* S) (I : FractionalIdeal R⁰ K) :
978977 (ringEquivOfRingEquiv K L f I).val =
979- I.val.map (IsFractionRing. semilinearEquivOfRingEquiv _ _ f).toLinearMap := rfl
978+ I.val.map (semilinearEquivOfRingEquiv _ _ f).toLinearMap := rfl
980979
981- set_option backward.isDefEq.respectTransparency false in
982980lemma ringEquivOfRingEquiv_trans {T : Type *} [CommRing T] [IsDomain T] (M : Type *) [CommRing M]
983- [Algebra T M] [IsFractionRing T M]
984- (f : R ≃+* S) (g : S ≃+* T) :
981+ [Algebra T M] [IsFractionRing T M] (f : R ≃+* S) (g : S ≃+* T) :
985982 ringEquivOfRingEquiv K M (f.trans g) =
986983 (ringEquivOfRingEquiv K L f).trans (ringEquivOfRingEquiv L M g) := by
987984 have : RingHomCompTriple f (g : S →+* T) (f.trans g : R →+* T) := ⟨rfl⟩
988985 ext1 I
989- rw [Subtype.ext_iff]
990- simp only [ringEquivOfRingEquiv, RingEquiv.coe_ringHom_trans, val_eq_coe, RingEquiv.symm_symm,
991- RingEquiv.coe_mk, Equiv.coe_fn_mk, coe_mk, RingEquiv.coe_trans, Function.comp_apply]
992- rw [← Submodule.map_comp, IsFractionRing.semilinearEquivOfRingEquiv_comp K L f M]
993- rfl
986+ simp only [ringEquivOfRingEquiv, RingEquiv.coe_ringHom_trans, Function.comp_apply,
987+ semilinearEquivOfRingEquiv_comp K L f M, LinearEquiv.coe_trans,
988+ Submodule.map_comp, RingEquiv.coe_mk, Equiv.coe_fn_mk, RingEquiv.coe_trans]
994989
995990lemma ringEquivOfRingEquiv_trans_apply {T : Type *} [CommRing T] [IsDomain T] (M : Type *)
996991 [CommRing M] [Algebra T M] [IsFractionRing T M]
@@ -999,40 +994,30 @@ lemma ringEquivOfRingEquiv_trans_apply {T : Type*} [CommRing T] [IsDomain T] (M
999994 ringEquivOfRingEquiv L M g (ringEquivOfRingEquiv K L f I) := by
1000995 simp [ringEquivOfRingEquiv_trans K L M]
1001996
1002- set_option backward.isDefEq.respectTransparency false in
1003997lemma ringEquivOfRingEquiv_refl :
1004- ringEquivOfRingEquiv K K (RingEquiv.refl R) = RingHom.id (FractionalIdeal R⁰ K) := by
1005- ext1 I
1006- rw [Subtype.ext_iff]
1007- simp only [RingHom.coe_coe, ringEquivOfRingEquiv_apply, RingEquiv.coe_ringHom_refl,
1008- RingEquiv.symm_refl, val_eq_coe, coe_mk, RingHom.id_apply]
1009- convert Submodule.map_id _
1010- ext x
1011- simp [IsFractionRing.semilinearEquivOfRingEquiv]
998+ ringEquivOfRingEquiv K K (RingEquiv.refl R) = RingEquiv.refl (FractionalIdeal R⁰ K) := by
999+ ext I x
1000+ simp only [ringEquivOfRingEquiv_apply, RingEquiv.coe_ringHom_refl, RingEquiv.symm_refl,
1001+ val_eq_coe, RingEquiv.refl_apply, ← mem_coe]
1002+ simp [semilinearEquivOfRingEquiv]
10121003
1013- set_option backward.isDefEq.respectTransparency false in
10141004lemma ringEquivOfRingEquiv_spanSingleton (x : K) :
10151005 FractionalIdeal.ringEquivOfRingEquiv K L f (spanSingleton R⁰ x) =
10161006 spanSingleton S⁰ (IsFractionRing.ringEquivOfRingEquiv (L := L) f x) := by
10171007 simp only [ringEquivOfRingEquiv, val_eq_coe, RingEquiv.symm_symm, RingEquiv.coe_mk,
10181008 Equiv.coe_fn_mk, coe_spanSingleton, IsFractionRing.ringEquivOfRingEquiv_apply]
1019- rw [Subtype.ext_iff]
1020- simp only [val_eq_coe, coe_spanSingleton]
1021- ext I
1022- simp only [Submodule.mem_map_equiv, Submodule.mem_span_singleton]
1023- refine ⟨fun ⟨r, hr⟩ ↦ ?_, fun ⟨s, hs⟩ ↦ ?_⟩
1024- · use f r
1025- rw [← (IsFractionRing.semilinearEquivOfRingEquiv K L f).injective.eq_iff] at hr
1026- simp only [LinearEquiv.apply_symm_apply] at hr
1027- simp only [← hr]
1028- exact Eq.symm (map_smulₛₗ _ r x)
1029- · use f.symm s
1030- simp only [Algebra.smul_def, ← hs, IsFractionRing.semilinearEquivOfRingEquiv_symm_apply,
1031- map_mul]
1032- simp only [IsFractionRing.ringEquivOfRingEquiv_symm, IsFractionRing.ringEquivOfRingEquiv_apply,
1033- map_eq, RingHom.coe_coe]
1034- rw [← RingHom.comp_apply, IsLocalization.map_comp_map]
1035- simp only [RingHomCompTriple.comp_eq, IsLocalization.map_id]
1009+ rw [SetLike.ext_iff]
1010+ intro y
1011+ simp only [← FractionalIdeal.mem_coe, coe_mk, mem_map_equiv, coe_spanSingleton,
1012+ Submodule.mem_span_singleton, (semilinearEquivOfRingEquiv K L f).eq_symm_apply]
1013+ constructor
1014+ · rintro ⟨r, rfl⟩
1015+ use f r
1016+ exact .symm (map_smulₛₗ _ r x)
1017+ · rintro ⟨s, rfl⟩
1018+ use f.symm s
1019+ simp only [Algebra.smul_def, semilinearEquivOfRingEquiv_apply, map_mul, map_eq, RingHom.coe_coe,
1020+ IsFractionRing.ringEquivOfRingEquiv_apply, RingEquiv.apply_symm_apply]
10361021
10371022lemma ringEquivOfRingEquiv_symm_eq :
10381023 (FractionalIdeal.ringEquivOfRingEquiv K L f).symm =
0 commit comments