@@ -907,4 +907,124 @@ theorem mem_adjoinIntegral_self (hx : IsIntegral R x) : x ∈ adjoinIntegral S x
907907
908908end Adjoin
909909
910+ section RingEquiv
911+
912+ open IsFractionRing
913+
914+ variable {R S : Type *} (K L : Type *) [CommRing R] [IsDomain R] [CommRing S] [IsDomain S]
915+ [CommRing K] [CommRing L] [Algebra R K] [Algebra S L] [IsFractionRing R K] [IsFractionRing S L]
916+ (f : R ≃+* S)
917+
918+ local instance (f : R ≃+* S) : RingHomInvPair (f : R →+* S) f.symm :=
919+ RingHomInvPair.of_ringEquiv f
920+
921+ /-- If `f : R ≃+* S` is a ring isomorphism and `I : Submodule R K` is fractional with respect to
922+ `R⁰`, then `I.map (IsFractionRing.semilinearEquivOfRingEquiv K L f).toLinearMap`
923+ is fractional with respect to `S⁰`.
924+
925+ Do not confuse with `IsFractional.map`. -/
926+ theorem _root_.IsFractional.mapEquiv {I : Submodule R K} (hI : IsFractional R⁰ I) :
927+ IsFractional S⁰ (I.map (semilinearEquivOfRingEquiv K L f).toLinearMap) := by
928+ simp only [IsFractional, mem_nonZeroDivisors_iff_ne_zero, ne_eq, Submodule.mem_map,
929+ forall_exists_index, and_imp, forall_apply_eq_imp_iff₂] at hI ⊢
930+ obtain ⟨r, hr0, hr⟩ := hI
931+ use f r
932+ refine ⟨by simp [hr0], ?_⟩
933+ intro x hx
934+ specialize hr x hx
935+ simp only [IsLocalization.IsInteger, RingHom.mem_rangeS] at hr ⊢
936+ obtain ⟨r', hr'⟩ := hr
937+ use f r'
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]
942+
943+ /-- The equiv `FractionalIdeal R⁰ K ≃+* FractionalIdeal S⁰ L`
944+ induced by a ring isomorphism `f : R ≃+* S`. -/
945+ @ [simps -isSimp]
946+ noncomputable def ringEquivOfRingEquiv :
947+ FractionalIdeal R⁰ K ≃+* FractionalIdeal S⁰ L :=
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]
953+ map_mul' I J := by
954+ simp only [FractionalIdeal.coe_ext_iff, val_eq_coe, coe_mul, coe_mk]
955+ apply le_antisymm <;> simp only [map_le_iff_le_comap, Submodule.mul_le, mem_coe, mem_comap,
956+ semilinearEquivOfRingEquiv_apply, map_mul, mem_map_equiv,
957+ semilinearEquivOfRingEquiv_symm_apply, LinearEquiv.coe_coe]
958+ · exact fun m hm n hn ↦ Submodule.mul_mem_mul (mem_map_of_mem hm) (mem_map_of_mem hn)
959+ · exact fun m hm n hn ↦ Submodule.mul_mem_mul hm hn
960+ left_inv I := by
961+ simp only [RingEquiv.symm_symm, val_eq_coe, ← Submodule.map_comp, LinearEquiv.comp_coe,
962+ coe_ext_iff, coe_mk]
963+ convert Submodule.map_id _
964+ ext; simp [semilinearEquivOfRingEquiv, IsLocalization.map_map]
965+ right_inv I := by
966+ simp only [RingEquiv.symm_symm, val_eq_coe, ← Submodule.map_comp, LinearEquiv.comp_coe,
967+ coe_ext_iff, coe_mk]
968+ convert Submodule.map_id _
969+ ext; simp [semilinearEquivOfRingEquiv, IsLocalization.map_map]}
970+
971+ lemma ringEquivOfRingEquiv_apply (f : R ≃+* S) (I : FractionalIdeal (nonZeroDivisors R) K) :
972+ ringEquivOfRingEquiv K L f I =
973+ ⟨Submodule.map (semilinearEquivOfRingEquiv _ _ f).toLinearMap I.val,
974+ IsFractional.mapEquiv K L f I.prop⟩ := rfl
975+
976+ lemma ringEquivOfRingEquiv_apply_val (f : R ≃+* S) (I : FractionalIdeal R⁰ K) :
977+ (ringEquivOfRingEquiv K L f I).val =
978+ I.val.map (semilinearEquivOfRingEquiv _ _ f).toLinearMap := rfl
979+
980+ lemma ringEquivOfRingEquiv_trans {T : Type *} [CommRing T] [IsDomain T] (M : Type *) [CommRing M]
981+ [Algebra T M] [IsFractionRing T M] (f : R ≃+* S) (g : S ≃+* T) :
982+ ringEquivOfRingEquiv K M (f.trans g) =
983+ (ringEquivOfRingEquiv K L f).trans (ringEquivOfRingEquiv L M g) := by
984+ have : RingHomCompTriple f (g : S →+* T) (f.trans g : R →+* T) := ⟨rfl⟩
985+ ext1 I
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]
989+
990+ lemma ringEquivOfRingEquiv_trans_apply {T : Type *} [CommRing T] [IsDomain T] (M : Type *)
991+ [CommRing M] [Algebra T M] [IsFractionRing T M]
992+ (f : R ≃+* S) (g : S ≃+* T) (I : FractionalIdeal R⁰ K) :
993+ ringEquivOfRingEquiv K M (f.trans g) I =
994+ ringEquivOfRingEquiv L M g (ringEquivOfRingEquiv K L f I) := by
995+ simp [ringEquivOfRingEquiv_trans K L M]
996+
997+ lemma ringEquivOfRingEquiv_refl :
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]
1003+
1004+ lemma ringEquivOfRingEquiv_spanSingleton (x : K) :
1005+ FractionalIdeal.ringEquivOfRingEquiv K L f (spanSingleton R⁰ x) =
1006+ spanSingleton S⁰ (IsFractionRing.ringEquivOfRingEquiv (L := L) f x) := by
1007+ simp only [ringEquivOfRingEquiv, val_eq_coe, RingEquiv.symm_symm, RingEquiv.coe_mk,
1008+ Equiv.coe_fn_mk, coe_spanSingleton, IsFractionRing.ringEquivOfRingEquiv_apply]
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]
1021+
1022+ lemma ringEquivOfRingEquiv_symm_eq :
1023+ (FractionalIdeal.ringEquivOfRingEquiv K L f).symm =
1024+ FractionalIdeal.ringEquivOfRingEquiv L K f.symm := by
1025+ exact (RingEquiv.coe_nonUnitalRingHom_inj_iff (ringEquivOfRingEquiv K L f).symm
1026+ (ringEquivOfRingEquiv L K f.symm)).mpr rfl
1027+
1028+ end RingEquiv
1029+
9101030end FractionalIdeal
0 commit comments