Theorem: IsField.localization_map_bijective
File: Mathlib/RingTheory/Localization/Basic.lean

tactic: letI := hR.toField
state_before: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hM : 0 ∉ M
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
⊢ Bijective ⇑(algebraMap R Rₘ)
state_after: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hM : 0 ∉ M
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
⊢ Bijective ⇑(algebraMap R Rₘ)

tactic: replace hM := le_nonZeroDivisors_of_noZeroDivisors hM
state_before: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hM : 0 ∉ M
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
⊢ Bijective ⇑(algebraMap R Rₘ)
state_after: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
⊢ Bijective ⇑(algebraMap R Rₘ)

tactic: refine ⟨IsLocalization.injective _ hM, fun x => ?_⟩
state_before: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
⊢ Bijective ⇑(algebraMap R Rₘ)
state_after: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
x : Rₘ
⊢ ∃ a, (algebraMap R Rₘ) a = x

tactic: obtain ⟨r, ⟨m, hm⟩, rfl⟩ := mk'_surjective M x
state_before: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
x : Rₘ
⊢ ∃ a, (algebraMap R Rₘ) a = x
state_after: case intro.intro.mk
R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
r m : R
hm : m ∈ M
⊢ ∃ a, (algebraMap R Rₘ) a = mk' Rₘ r ⟨m, hm⟩

tactic: obtain ⟨n, hn⟩ := hR.mul_inv_cancel (nonZeroDivisors.ne_zero <| hM hm)
state_before: case intro.intro.mk
R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
r m : R
hm : m ∈ M
⊢ ∃ a, (algebraMap R Rₘ) a = mk' Rₘ r ⟨m, hm⟩
state_after: case intro.intro.mk.intro
R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
r m : R
hm : m ∈ M
n : R
hn : m * n = 1
⊢ ∃ a, (algebraMap R Rₘ) a = mk' Rₘ r ⟨m, hm⟩

tactic: exact ⟨r * n, by erw [eq_mk'_iff_mul_eq, ← map_mul, mul_assoc, _root_.mul_comm n, hn, mul_one]⟩
state_before: case intro.intro.mk.intro
R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
r m : R
hm : m ∈ M
n : R
hn : m * n = 1
⊢ ∃ a, (algebraMap R Rₘ) a = mk' Rₘ r ⟨m, hm⟩
state_after: no goals

tactic: erw [eq_mk'_iff_mul_eq, ← map_mul, mul_assoc, _root_.mul_comm n, hn, mul_one]
state_before: R✝ : Type u_1
inst✝⁷ : CommRing R✝
M✝ : Submonoid R✝
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R✝ S
P : Type u_3
inst✝⁴ : CommRing P
R : Type u_4
Rₘ : Type u_5
inst✝³ : CommRing R
inst✝² : CommRing Rₘ
M : Submonoid R
hR : IsField R
inst✝¹ : Algebra R Rₘ
inst✝ : IsLocalization M Rₘ
this : Field R := hR.toField
hM : M ≤ nonZeroDivisors R
r m : R
hm : m ∈ M
n : R
hn : m * n = 1
⊢ (algebraMap R Rₘ) (r * n) = mk' Rₘ r ⟨m, hm⟩
state_after: no goals