Theorem: FractionalIdeal.isNoetherian_spanSingleton_inv_to_map_mul
File: Mathlib/RingTheory/FractionalIdeal.lean

tactic: by_cases hx : x = 0
state_before: R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }

tactic: have h_gx : algebraMap R₁ K x ≠ 0 :=
  mt ((injective_iff_map_eq_zero (algebraMap R₁ K)).mp (IsFractionRing.injective _ _) x) hx
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }

tactic: have h_spanx : spanSingleton R₁⁰ (algebraMap R₁ K x) ≠ 0 := spanSingleton_ne_zero_iff.mpr h_gx
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }

tactic: rw [isNoetherian_iff] at hI⊢
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }

tactic: intro J hJ
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
⊢ ∀ (J : FractionalIdeal R₁⁰ ((fun x => K) x)), J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I → FG ↑J

tactic: rw [← div_spanSingleton, le_div_iff_mul_le h_spanx] at hJ
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
⊢ FG ↑J

tactic: obtain ⟨s, hs⟩ := hI _ hJ
state_before: case neg
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
⊢ FG ↑J

tactic: use s * {(algebraMap R₁ K x)⁻¹}
state_before: case neg.intro
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
s : Finset K
hs : span R₁ ↑s = ↑(J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x))
⊢ FG ↑J

tactic: rw [Finset.coe_mul, Finset.coe_singleton, ← span_mul_span, hs, ← coe_spanSingleton R₁⁰, ←
  coe_mul, mul_assoc, spanSingleton_mul_spanSingleton, mul_inv_cancel h_gx, spanSingleton_one,
  mul_one]
state_before: case neg.intro
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
s : Finset K
hs : span R₁ ↑s = ↑(J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x))
⊢ span R₁ ↑(s * {(↑(algebraMap R₁ K) x)⁻¹}) = ↑J

tactic: rw [hx, RingHom.map_zero, inv_zero, spanSingleton_zero, MulZeroClass.zero_mul]
state_before: case pos
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : x = 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }

tactic: exact isNoetherian_zero
state_before: case pos
R : Type ?u.1759313
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1759520
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : x = 0
⊢ IsNoetherian R₁ { x // x ∈ ↑0 }