Skip to content

Commit 7d620cc

Browse files
committed
suggested changes
1 parent 2d0b331 commit 7d620cc

1 file changed

Lines changed: 41 additions & 56 deletions

File tree

Mathlib/RingTheory/FractionalIdeal/Operations.lean

Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,8 @@ end Adjoin
909909

910910
section RingEquiv
911911

912+
open IsFractionRing
913+
912914
variable {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 :=
921923
is fractional with respect to `S⁰`.
922924
923925
Do 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]
945946
noncomputable 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

972971
lemma 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

977976
lemma 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
982980
lemma 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

995990
lemma 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
1003997
lemma 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
10141004
lemma 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

10371022
lemma ringEquivOfRingEquiv_symm_eq :
10381023
(FractionalIdeal.ringEquivOfRingEquiv K L f).symm =

0 commit comments

Comments
 (0)