Skip to content

Commit 07ca3dd

Browse files
committed
refactor(FractionalIdeal): use algebraic order theory API (#29538)
Instantiate instances earlier and use generic lemmas instead of the `FractionalIdeal`-specific ones. Also rename `_nonzero` in lemma names to `_ne_zero`.
1 parent af43db4 commit 07ca3dd

File tree

7 files changed

+170
-204
lines changed

7 files changed

+170
-204
lines changed

Mathlib/RingTheory/DedekindDomain/Different.lean

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -342,18 +342,14 @@ lemma inv_le_dual :
342342
lemma dual_inv_le :
343343
(dual A K I)⁻¹ ≤ I := by
344344
by_cases hI : I = 0; · simp [hI]
345-
convert mul_right_mono ((dual A K I)⁻¹)
346-
(mul_left_mono I (inv_le_dual A K I)) using 1
347-
· simp only [mul_inv_cancel₀ hI, one_mul]
348-
· simp only [mul_inv_cancel₀ (dual_ne_zero A K (hI := hI)), mul_assoc, mul_one]
345+
rw [inv_le_comm₀ (by simpa [pos_iff_ne_zero]) (by simpa [pos_iff_ne_zero])]
346+
exact inv_le_dual ..
349347

350348
lemma dual_eq_mul_inv :
351349
dual A K I = dual A K 1 * I⁻¹ := by
352350
by_cases hI : I = 0; · simp [hI]
353351
apply le_antisymm
354-
· suffices dual A K I * I ≤ dual A K 1 by
355-
convert mul_right_mono I⁻¹ this using 1; simp only [mul_inv_cancel₀ hI, mul_one, mul_assoc]
356-
rw [← le_dual_iff A K hI]
352+
· rw [le_mul_inv_iff₀ (pos_iff_ne_zero.2 hI), ← le_dual_iff A K hI]
357353
rw [le_dual_iff A K hI, mul_assoc, inv_mul_cancel₀ hI, mul_one]
358354

359355
variable {I}
@@ -717,10 +713,10 @@ lemma pow_sub_one_dvd_differentIdeal_aux
717713
Submodule.map_le_iff_le_comap]
718714
intro x hx
719715
rw [Submodule.restrictScalars_mem, FractionalIdeal.mem_coe,
720-
FractionalIdeal.mem_div_iff_of_nonzero (by simpa using hp')] at hx
716+
FractionalIdeal.mem_div_iff_of_ne_zero (by simpa using hp')] at hx
721717
rw [Submodule.mem_comap, LinearMap.coe_restrictScalars, ← FractionalIdeal.coe_one,
722718
← div_self (G₀ := FractionalIdeal A⁰ K) (a := p) (by simpa using hp),
723-
FractionalIdeal.mem_coe, FractionalIdeal.mem_div_iff_of_nonzero (by simpa using hp)]
719+
FractionalIdeal.mem_coe, FractionalIdeal.mem_div_iff_of_ne_zero (by simpa using hp)]
724720
simp only [FractionalIdeal.mem_coeIdeal, forall_exists_index, and_imp,
725721
forall_apply_eq_imp_iff₂] at hx
726722
intro y hy'
@@ -875,10 +871,10 @@ lemma dvd_differentIdeal_of_not_isSeparable
875871
Submodule.map_le_iff_le_comap]
876872
intro x hx
877873
rw [Submodule.restrictScalars_mem, FractionalIdeal.mem_coe,
878-
FractionalIdeal.mem_div_iff_of_nonzero (by simpa using hp')] at hx
874+
FractionalIdeal.mem_div_iff_of_ne_zero (by simpa using hp')] at hx
879875
rw [Submodule.mem_comap, LinearMap.coe_restrictScalars, ← FractionalIdeal.coe_one,
880876
← div_self (G₀ := FractionalIdeal A⁰ K) (a := p) (by simpa using hp),
881-
FractionalIdeal.mem_coe, FractionalIdeal.mem_div_iff_of_nonzero (by simpa using hp)]
877+
FractionalIdeal.mem_coe, FractionalIdeal.mem_div_iff_of_ne_zero (by simpa using hp)]
882878
simp only [FractionalIdeal.mem_coeIdeal, forall_exists_index, and_imp,
883879
forall_apply_eq_imp_iff₂] at hx
884880
intro y hy'

Mathlib/RingTheory/DedekindDomain/Factorization.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,6 @@ lemma divMod_zero_of_not_le {a b c : FractionalIdeal R⁰ K} (hac : ¬ a ≤ c)
715715
c.divMod b a = 0 := by
716716
simp [divMod, hac]
717717

718-
set_option maxHeartbeats 210000 in
719-
-- changed for new compiler
720718
/-- Let `I J I' J'` be nonzero fractional ideals in a Dedekind domain with `J ≤ I` and `J' ≤ I'`.
721719
If `I/J = I'/J'` in the group of fractional ideals (i.e. `I * J' = I' * J`),
722720
then `I/J ≃ I'/J'` as quotient `R`-modules. -/

Mathlib/RingTheory/DedekindDomain/Ideal/Basic.lean

Lines changed: 99 additions & 120 deletions
Large diffs are not rendered by default.

Mathlib/RingTheory/DedekindDomain/Ideal/Lemmas.lean

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,6 @@ theorem exists_notMem_one_of_ne_bot [IsDedekindDomain A] {I : Ideal A} (hI0 : I
5858
@[deprecated (since := "2025-05-23")]
5959
alias exists_not_mem_one_of_ne_bot := exists_notMem_one_of_ne_bot
6060

61-
theorem mul_left_strictMono [IsDedekindDomain A] {I : FractionalIdeal A⁰ K} (hI : I ≠ 0) :
62-
StrictMono (I * ·) :=
63-
strictMono_of_le_iff_le fun _ _ => (mul_left_le_iff hI).symm
64-
6561
end FractionalIdeal
6662

6763
end Inverse
@@ -217,16 +213,14 @@ theorem Ideal.exist_integer_multiples_notMem {J : Ideal A} (hJ : J ≠ ⊤) {ι
217213
· contrapose! hpI
218214
-- And if all `a`-multiples of `I` are an element of `J`,
219215
-- then `a` is actually an element of `J / I`, contradiction.
220-
refine (mem_div_iff_of_nonzero hI0).mpr fun y hy => Submodule.span_induction ?_ ?_ ?_ ?_ hy
216+
refine (mem_div_iff_of_ne_zero hI0).mpr fun y hy => Submodule.span_induction ?_ ?_ ?_ ?_ hy
221217
· rintro _ ⟨i, hi, rfl⟩; exact hpI i hi
222218
· rw [mul_zero]; exact Submodule.zero_mem _
223219
· intro x y _ _ hx hy; rw [mul_add]; exact Submodule.add_mem _ hx hy
224220
· intro b x _ hx; rw [mul_smul_comm]; exact Submodule.smul_mem _ b hx
225221
-- To show the inclusion of `J / I` into `I⁻¹ = 1 / I`, note that `J < I`.
226-
calc
227-
↑J / I = ↑J * I⁻¹ := div_eq_mul_inv (↑J) I
228-
_ < 1 * I⁻¹ := mul_right_strictMono (inv_ne_zero hI0) ?_
229-
_ = I⁻¹ := one_mul _
222+
rw [div_eq_mul_inv]
223+
refine mul_lt_of_lt_one_left (by simpa [pos_iff_ne_zero]) ?_
230224
rw [← coeIdeal_top]
231225
-- And multiplying by `I⁻¹` is indeed strictly monotone.
232226
exact

Mathlib/RingTheory/FractionalIdeal/Basic.lean

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Let `S` be a submonoid of an integral domain `R` and `P` the localization of `R`
2222
2323
## Main statements
2424
25-
* `mul_left_mono` and `mul_right_mono` state that ideal multiplication is monotone
25+
* the `MulLeftMono` and `MulRightMono` instances state that ideal multiplication is monotone
2626
* `mul_div_self_cancel_iff` states that `1 / I` is the inverse of `I` if one exists
2727
2828
## Implementation notes
@@ -282,6 +282,8 @@ theorem coeIdeal_le_coeIdeal (K : Type*) [CommRing K] [Algebra R K] [IsFractionR
282282
{I J : Ideal R} : (I : FractionalIdeal R⁰ K) ≤ J ↔ I ≤ J :=
283283
IsFractionRing.coeSubmodule_le_coeSubmodule
284284

285+
@[gcongr] protected alias ⟨_, GCongr.coeIdeal_le_coeIdeal⟩ := coeIdeal_le_coeIdeal
286+
285287
instance : Zero (FractionalIdeal S P) :=
286288
⟨(0 : Ideal R)⟩
287289

@@ -553,15 +555,17 @@ theorem coeIdeal_mul (I J : Ideal R) : (↑(I * J) : FractionalIdeal S P) = I *
553555
simp only [mul_def]
554556
exact coeToSubmodule_injective (coeSubmodule_mul _ _ _)
555557

556-
theorem mul_left_mono (I : FractionalIdeal S P) : Monotone (I * ·) := by
557-
intro J J' h
558-
simp only [mul_def]
559-
exact mul_le.mpr fun x hx y hy => mul_mem_mul hx (h hy)
558+
instance : MulLeftMono (FractionalIdeal S P) where
559+
elim I J J' h := by simpa only [mul_def] using mul_le.mpr fun x hx y hy => mul_mem_mul hx (h hy)
560560

561-
theorem mul_right_mono (I : FractionalIdeal S P) : Monotone fun J => J * I := by
562-
intro J J' h
563-
simp only [mul_def]
564-
exact mul_le.mpr fun x hx y hy => mul_mem_mul (h hx) hy
561+
instance : MulRightMono (FractionalIdeal S P) where
562+
elim I J J' h := by simpa only [mul_def] using mul_le.mpr fun x hx y hy => mul_mem_mul (h hx) hy
563+
564+
@[deprecated _root_.mul_right_mono (since := "2025-09-09")]
565+
protected theorem mul_left_mono (I : FractionalIdeal S P) : Monotone (I * ·) := mul_right_mono
566+
567+
@[deprecated _root_.mul_left_mono (since := "2025-09-09")]
568+
protected lemma mul_right_mono (I : FractionalIdeal S P) : Monotone fun J => J * I := mul_left_mono
565569

566570
theorem mul_mem_mul {I J : FractionalIdeal S P} {i j : P} (hi : i ∈ I) (hj : j ∈ J) :
567571
i * j ∈ I * J := by
@@ -622,25 +626,21 @@ variable {S P}
622626

623627
section Order
624628

625-
instance : AddLeftMono (FractionalIdeal S P) where
626-
elim _ _ _ hIJ := sup_le_sup_left hIJ _
627-
628-
instance : AddRightMono (FractionalIdeal S P) where
629-
elim _ _ _ hIJ := sup_le_sup_right hIJ _
629+
@[deprecated _root_.add_le_add_left (since := "2025-09-14")]
630+
theorem add_le_add_left {I J : FractionalIdeal S P} (hIJ : I ≤ J) (J' : FractionalIdeal S P) :
631+
J' + I ≤ J' + J := _root_.add_le_add_left hIJ _
630632

631-
instance : MulLeftMono (FractionalIdeal S P) where
632-
elim _ _ _ hIJ := mul_le.2 fun _ hk _ hj ↦ mul_mem_mul hk (hIJ hj)
633-
634-
instance : MulRightMono (FractionalIdeal S P) where
635-
elim _ _ _ hIJ := mul_le.2 fun _ hk _ hj ↦ mul_mem_mul (hIJ hk) hj
633+
@[deprecated mul_le_mul_left' (since := "2025-09-14")]
634+
theorem mul_le_mul_left {I J : FractionalIdeal S P} (hIJ : I ≤ J) (J' : FractionalIdeal S P) :
635+
J' * I ≤ J' * J := mul_le_mul_left' hIJ _
636636

637-
theorem le_self_mul_self {I : FractionalIdeal S P} (hI : 1 ≤ I) : I ≤ I * I := by
638-
convert mul_left_mono I hI
639-
exact (mul_one I).symm
637+
@[deprecated le_mul_of_one_le_left' (since := "2025-09-14")]
638+
theorem le_self_mul_self {I : FractionalIdeal S P} (hI : 1 ≤ I) : I ≤ I * I :=
639+
le_mul_of_one_le_left' hI
640640

641-
theorem mul_self_le_self {I : FractionalIdeal S P} (hI : I ≤ 1) : I * I ≤ I := by
642-
convert mul_left_mono I hI
643-
exact (mul_one I).symm
641+
@[deprecated mul_le_of_le_one_left' (since := "2025-09-14")]
642+
theorem mul_self_le_self {I : FractionalIdeal S P} (hI : I ≤ 1) : I * I ≤ I :=
643+
mul_le_of_le_one_left' hI
644644

645645
theorem coeIdeal_le_one {I : Ideal R} : (I : FractionalIdeal S P) ≤ 1 := fun _ hx =>
646646
let ⟨y, _, hy⟩ := (mem_coeIdeal S).mp hx

Mathlib/RingTheory/FractionalIdeal/Inverse.lean

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,20 @@ theorem inv_eq : I⁻¹ = 1 / I := rfl
4545

4646
theorem inv_zero' : (0 : FractionalIdeal R₁⁰ K)⁻¹ = 0 := div_zero
4747

48-
theorem inv_nonzero {J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
49-
J⁻¹ = ⟨(1 : FractionalIdeal R₁⁰ K) / J, fractional_div_of_nonzero h⟩ := div_nonzero h
48+
theorem inv_of_ne_zero {J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
49+
J⁻¹ = ⟨(1 : FractionalIdeal R₁⁰ K) / J, isFractional_div_of_ne_zero h⟩ := div_of_ne_zero h
5050

51-
theorem coe_inv_of_nonzero {J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
51+
theorem coe_inv_of_ne_zero {J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
5252
(↑J⁻¹ : Submodule R₁ K) = IsLocalization.coeSubmodule K ⊤ / (J : Submodule R₁ K) := by
53-
simp_rw [inv_nonzero _ h, coe_one, coe_mk, IsLocalization.coeSubmodule_top]
53+
simp_rw [inv_of_ne_zero _ h, coe_one, coe_mk, IsLocalization.coeSubmodule_top]
54+
55+
@[deprecated (since := "2025-09-14")] alias inv_nonzero := inv_of_ne_zero
56+
@[deprecated (since := "2025-09-14")] alias coe_inv_of_nonzero := coe_inv_of_ne_zero
5457

5558
variable {K}
5659

5760
theorem mem_inv_iff (hI : I ≠ 0) {x : K} : x ∈ I⁻¹ ↔ ∀ y ∈ I, x * y ∈ (1 : FractionalIdeal R₁⁰ K) :=
58-
mem_div_iff_of_nonzero hI
61+
mem_div_iff_of_ne_zero hI
5962

6063
theorem inv_anti_mono (hI : I ≠ 0) (hJ : J ≠ 0) (hIJ : I ≤ J) : J⁻¹ ≤ I⁻¹ := by
6164
-- Porting note: in Lean3, introducing `x` would just give `x ∈ J⁻¹ → x ∈ I⁻¹`, but
@@ -75,21 +78,8 @@ theorem coe_ideal_le_self_mul_inv (I : Ideal R₁) :
7578
le_self_mul_inv coeIdeal_le_one
7679

7780
/-- `I⁻¹` is the inverse of `I` if `I` has an inverse. -/
78-
theorem right_inverse_eq (I J : FractionalIdeal R₁⁰ K) (h : I * J = 1) : J = I⁻¹ := by
79-
have hI : I ≠ 0 := ne_zero_of_mul_eq_one I J h
80-
suffices h' : I * (1 / I) = 1 from
81-
congr_arg Units.inv <| @Units.ext _ _ (Units.mkOfMulEqOne _ _ h) (Units.mkOfMulEqOne _ _ h') rfl
82-
apply le_antisymm
83-
· apply mul_le.mpr _
84-
intro x hx y hy
85-
rw [mul_comm]
86-
exact (mem_div_iff_of_nonzero hI).mp hy x hx
87-
rw [← h]
88-
apply mul_left_mono I
89-
apply (le_div_iff_of_nonzero hI).mpr _
90-
intro y hy x hx
91-
rw [mul_comm]
92-
exact mul_mem_mul hy hx
81+
theorem right_inverse_eq (I J : FractionalIdeal R₁⁰ K) (h : I * J = 1) : J = I⁻¹ :=
82+
eq_one_div_of_mul_eq_one_right _ _ h
9383

9484
theorem mul_inv_cancel_iff {I : FractionalIdeal R₁⁰ K} : I * I⁻¹ = 1 ↔ ∃ J, I * J = 1 :=
9585
fun h => ⟨I⁻¹, h⟩, fun ⟨J, hJ⟩ => by rwa [← right_inverse_eq K I J hJ]⟩
@@ -184,7 +174,7 @@ theorem isPrincipal_inv (I : FractionalIdeal R₁⁰ K) [Submodule.IsPrincipal (
184174
variable {K}
185175

186176
lemma den_mem_inv {I : FractionalIdeal R₁⁰ K} (hI : I ≠ ⊥) :
187-
(algebraMap R₁ K) (I.den : R₁) ∈ I⁻¹ := by
177+
algebraMap R₁ K (I.den : R₁) ∈ I⁻¹ := by
188178
rw [mem_inv_iff hI]
189179
intro i hi
190180
rw [← Algebra.smul_def (I.den : R₁) i, ← mem_coe, coe_one]
@@ -198,7 +188,8 @@ lemma num_le_mul_inv (I : FractionalIdeal R₁⁰ K) : I.num ≤ I * I⁻¹ := b
198188
· rw [hI, num_zero_eq <| FaithfulSMul.algebraMap_injective R₁ K, zero_mul, zero_eq_bot,
199189
coeIdeal_bot]
200190
· rw [mul_comm, ← den_mul_self_eq_num']
201-
exact mul_right_mono I <| spanSingleton_le_iff_mem.2 (den_mem_inv hI)
191+
gcongr
192+
exact spanSingleton_le_iff_mem.2 (den_mem_inv hI)
202193

203194
lemma bot_lt_mul_inv {I : FractionalIdeal R₁⁰ K} (hI : I ≠ ⊥) : ⊥ < I * I⁻¹ :=
204195
lt_of_lt_of_le (coeIdeal_ne_zero.2 (hI ∘ num_eq_zero_iff.1)).bot_lt I.num_le_mul_inv

Mathlib/RingTheory/FractionalIdeal/Operations.lean

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -366,35 +366,41 @@ theorem _root_.IsFractional.div_of_nonzero {I J : Submodule R₁ K} :
366366
convert hI _ (hb _ (Submodule.smul_mem _ aJ mem_J)) using 1
367367
rw [← hy', mul_comm b, ← Algebra.smul_def, mul_smul]
368368

369-
theorem fractional_div_of_nonzero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
369+
theorem isFractional_div_of_ne_zero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
370370
IsFractional R₁⁰ (I / J : Submodule R₁ K) :=
371371
I.isFractional.div_of_nonzero J.isFractional fun H =>
372372
h <| coeToSubmodule_injective <| H.trans coe_zero.symm
373373

374+
@[deprecated (since := "2025-09-14")] alias fractional_div_of_nonzero := isFractional_div_of_ne_zero
375+
374376
open Classical in
375377
noncomputable instance : Div (FractionalIdeal R₁⁰ K) :=
376-
fun I J => if h : J = 0 then 0 else ⟨I / J, fractional_div_of_nonzero h⟩⟩
378+
fun I J => if h : J = 0 then 0 else ⟨I / J, isFractional_div_of_ne_zero h⟩⟩
377379

378380
variable {I J : FractionalIdeal R₁⁰ K}
379381

380382
@[simp]
381383
theorem div_zero {I : FractionalIdeal R₁⁰ K} : I / 0 = 0 :=
382384
dif_pos rfl
383385

384-
theorem div_nonzero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
385-
I / J = ⟨I / J, fractional_div_of_nonzero h⟩ :=
386+
theorem div_of_ne_zero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) :
387+
I / J = ⟨I / J, isFractional_div_of_ne_zero h⟩ :=
386388
dif_neg h
387389

390+
@[deprecated (since := "2025-09-14")] alias div_nonzero := div_of_ne_zero
391+
388392
@[simp]
389393
theorem coe_div {I J : FractionalIdeal R₁⁰ K} (hJ : J ≠ 0) :
390394
(↑(I / J) : Submodule R₁ K) = ↑I / (↑J : Submodule R₁ K) :=
391395
congr_arg _ (dif_neg hJ)
392396

393-
theorem mem_div_iff_of_nonzero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) {x} :
397+
theorem mem_div_iff_of_ne_zero {I J : FractionalIdeal R₁⁰ K} (h : J ≠ 0) {x} :
394398
x ∈ I / J ↔ ∀ y ∈ J, x * y ∈ I := by
395-
rw [div_nonzero h]
399+
rw [div_of_ne_zero h]
396400
exact Submodule.mem_div_iff_forall_mul_mem
397401

402+
@[deprecated (since := "2025-09-14")] alias mem_div_iff_of_nonzero := mem_div_iff_of_ne_zero
403+
398404
theorem mul_one_div_le_one {I : FractionalIdeal R₁⁰ K} : I * (1 / I) ≤ 1 := by
399405
by_cases hI : I = 0
400406
· rw [hI, div_zero, mul_zero]
@@ -410,19 +416,21 @@ theorem le_self_mul_one_div {I : FractionalIdeal R₁⁰ K} (hI : I ≤ (1 : Fra
410416
rw [← coe_le_coe, coe_one] at hI
411417
exact Submodule.le_self_mul_one_div hI
412418

413-
theorem le_div_iff_of_nonzero {I J J' : FractionalIdeal R₁⁰ K} (hJ' : J' ≠ 0) :
419+
theorem le_div_iff_of_ne_zero {I J J' : FractionalIdeal R₁⁰ K} (hJ' : J' ≠ 0) :
414420
I ≤ J / J' ↔ ∀ x ∈ I, ∀ y ∈ J', x * y ∈ J :=
415-
fun h _ hx => (mem_div_iff_of_nonzero hJ').mp (h hx), fun h x hx =>
416-
(mem_div_iff_of_nonzero hJ').mpr (h x hx)⟩
421+
fun h _ hx => (mem_div_iff_of_ne_zero hJ').mp (h hx), fun h x hx =>
422+
(mem_div_iff_of_ne_zero hJ').mpr (h x hx)⟩
423+
424+
@[deprecated (since := "2025-09-14")] alias le_div_iff_of_nonzero := le_div_iff_of_ne_zero
417425

418426
theorem le_div_iff_mul_le {I J J' : FractionalIdeal R₁⁰ K} (hJ' : J' ≠ 0) :
419427
I ≤ J / J' ↔ I * J' ≤ J := by
420-
rw [div_nonzero hJ', ← coe_le_coe (I := I * J') (J := J), coe_mul]
428+
rw [div_of_ne_zero hJ', ← coe_le_coe (I := I * J') (J := J), coe_mul]
421429
exact Submodule.le_div_iff_mul_le
422430

423431
@[simp]
424432
theorem div_one {I : FractionalIdeal R₁⁰ K} : I / 1 = I := by
425-
rw [div_nonzero (one_ne_zero' (FractionalIdeal R₁⁰ K))]
433+
rw [div_of_ne_zero (one_ne_zero' (FractionalIdeal R₁⁰ K))]
426434
ext
427435
constructor <;> intro h
428436
· simpa using mem_div_iff_forall_mul_mem.mp h 1 ((algebraMap R₁ K).map_one ▸ coe_mem_one R₁⁰ 1)
@@ -440,10 +448,10 @@ theorem eq_one_div_of_mul_eq_one_right (I J : FractionalIdeal R₁⁰ K) (h : I
440448
· apply mul_le.mpr _
441449
intro x hx y hy
442450
rw [mul_comm]
443-
exact (mem_div_iff_of_nonzero hI).mp hy x hx
451+
exact (mem_div_iff_of_ne_zero hI).mp hy x hx
444452
rw [← h]
445-
apply mul_left_mono I
446-
apply (le_div_iff_of_nonzero hI).mpr _
453+
gcongr
454+
apply (le_div_iff_of_ne_zero hI).mpr _
447455
intro y hy x hx
448456
rw [mul_comm]
449457
exact mul_mem_mul hy hx
@@ -458,7 +466,7 @@ protected theorem map_div (I J : FractionalIdeal R₁⁰ K) (h : K ≃ₐ[R₁]
458466
(I / J).map (h : K →ₐ[R₁] K') = I.map h / J.map h := by
459467
by_cases H : J = 0
460468
· rw [H, div_zero, FractionalIdeal.map_zero, div_zero]
461-
· simp [← coeToSubmodule_inj, div_nonzero H, div_nonzero (map_ne_zero _ H)]
469+
· simp [← coeToSubmodule_inj, div_of_ne_zero H, div_of_ne_zero (map_ne_zero _ H)]
462470

463471
theorem map_one_div (I : FractionalIdeal R₁⁰ K) (h : K ≃ₐ[R₁] K') :
464472
(1 / I).map (h : K →ₐ[R₁] K') = 1 / I.map h := by

0 commit comments

Comments
 (0)