Theorem: Ideal.dvd_iff_le
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: by_cases hI : I = ⊥
state_before: R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
⊢ I ∣ J

tactic: have hI' : (I : FractionalIdeal A⁰ (FractionRing A)) ≠ 0 := coeIdeal_ne_zero.mpr hI
state_before: case neg
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
⊢ I ∣ J

tactic: have : (I : FractionalIdeal A⁰ (FractionRing A))⁻¹ * J ≤ 1 :=
  le_trans (mul_left_mono (↑I)⁻¹ ((coeIdeal_le_coeIdeal _).mpr h))
    (le_of_eq (inv_mul_cancel hI'))
state_before: case neg
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
hI' : ↑I ≠ 0
⊢ I ∣ J

tactic: obtain ⟨H, hH⟩ := le_one_iff_exists_coeIdeal.mp this
state_before: case neg
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
hI' : ↑I ≠ 0
this : (↑I)⁻¹ * ↑J ≤ 1
⊢ I ∣ J

tactic: use H
state_before: case neg.intro
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
hI' : ↑I ≠ 0
this : (↑I)⁻¹ * ↑J ≤ 1
H : Ideal A
hH : ↑H = (↑I)⁻¹ * ↑J
⊢ I ∣ J

tactic: refine coeIdeal_injective (show (J : FractionalIdeal A⁰ (FractionRing A)) = ↑(I * H) from ?_)
state_before: case neg.intro
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
hI' : ↑I ≠ 0
this : (↑I)⁻¹ * ↑J ≤ 1
H : Ideal A
hH : ↑H = (↑I)⁻¹ * ↑J
⊢ J = I * H

tactic: rw [coeIdeal_mul, hH, ← mul_assoc, mul_inv_cancel hI', one_mul]
state_before: case neg.intro
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : ¬I = ⊥
hI' : ↑I ≠ 0
this : (↑I)⁻¹ * ↑J ≤ 1
H : Ideal A
hH : ↑H = (↑I)⁻¹ * ↑J
⊢ ↑J = ↑(I * H)

tactic: have hJ : J = ⊥ := by rwa [hI, ← eq_bot_iff] at h
state_before: case pos
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : I = ⊥
⊢ I ∣ J

tactic: rw [hI, hJ]
state_before: case pos
R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : I = ⊥
hJ : J = ⊥
⊢ I ∣ J

tactic: rwa [hI, ← eq_bot_iff] at h
state_before: R : Type ?u.752313
A : Type u_1
K : Type ?u.752319
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : IsDedekindDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
I J : Ideal A
h : J ≤ I
hI : I = ⊥
⊢ J = ⊥