Theorem: IsLocalization.away_of_isIdempotentElem
File: Mathlib/RingTheory/Localization/Away/Basic.lean

Proof steps:
state_before: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
r : ↥(Submonoid.powers e)
⊢ IsUnit ((algebraMap R S) ↑r)
state_after: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
r : ↥(Submonoid.powers e)
this : (algebraMap R S) e = 1
⊢ IsUnit ((algebraMap R S) ↑r)
tactic: have : algebraMap R S e = 1 := by
      rw [← (algebraMap R S).map_one, eq_comm, ← sub_eq_zero, ← map_sub, ← RingHom.mem_ker,
        H, Ideal.mem_span_singleton]
state_before: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
r : ↥(Submonoid.powers e)
this : (algebraMap R S) e = 1
⊢ IsUnit ((algebraMap R S) ↑r)
state_after: case mk.intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
this : (algebraMap R S) e = 1
n : ℕ
⊢ IsUnit ((algebraMap R S) ↑⟨(fun x => e ^ x) n, ⋯⟩)
tactic: obtain ⟨r, n, rfl⟩ := r
state_before: case mk.intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
this : (algebraMap R S) e = 1
n : ℕ
⊢ IsUnit ((algebraMap R S) ↑⟨(fun x => e ^ x) n, ⋯⟩)
state_after: no goals
tactic: simp [this]
state_before: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
z : S
⊢ ∃ x, z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
state_after: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
z : R
⊢ ∃ x, (algebraMap R S) z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
tactic: obtain ⟨z, rfl⟩ := H' z
state_before: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
z : R
⊢ ∃ x, (algebraMap R S) z * (algebraMap R S) ↑x.2 = (algebraMap R S) x.1
state_after: no goals
tactic: exact ⟨⟨z, 1⟩, by simp⟩
state_before: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y : R
h : (algebraMap R S) x = (algebraMap R S) y
⊢ ∃ c, ↑c * x = ↑c * y
state_after: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y : R
h : 1 - e ∣ x - y
⊢ ∃ c, ↑c * x = ↑c * y
tactic: rw [← sub_eq_zero, ← map_sub, ← RingHom.mem_ker, H, Ideal.mem_span_singleton] at h
state_before: R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y : R
h : 1 - e ∣ x - y
⊢ ∃ c, ↑c * x = ↑c * y
state_after: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y k : R
hk : x - y = (1 - e) * k
⊢ ∃ c, ↑c * x = ↑c * y
tactic: obtain ⟨k, hk⟩ := h
state_before: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y k : R
hk : x - y = (1 - e) * k
⊢ ∃ c, ↑c * x = ↑c * y
state_after: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y k : R
hk : x - y = (1 - e) * k
⊢ ↑⟨e, ⋯⟩ * x = ↑⟨e, ⋯⟩ * y
tactic: refine ⟨⟨e, Submonoid.mem_powers e⟩, ?_⟩
state_before: case intro
R✝ : Type u_1
inst✝⁷ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁶ : CommSemiring S✝
inst✝⁵ : Algebra R✝ S✝
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S✝
R : Type u_4
S : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
e : R
he : IsIdempotentElem e
H : RingHom.ker (algebraMap R S) = Ideal.span {1 - e}
H' : Function.Surjective ⇑(algebraMap R S)
x y k : R
hk : x - y = (1 - e) * k
⊢ ↑⟨e, ⋯⟩ * x = ↑⟨e, ⋯⟩ * y
state_after: no goals
tactic: rw [← sub_eq_zero, ← mul_sub, hk, ← mul_assoc, mul_sub, mul_one, he.eq, sub_self, zero_mul]