Theorem: IsLocalization.sec_fst_ne_zero
File: Mathlib/RingTheory/Localization/Basic.lean

tactic: have hsec := sec_spec 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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
⊢ (sec M x).1 ≠ 0
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x * (algebraMap R S) ↑(sec M x).2 = (algebraMap R S) (sec M x).1
⊢ (sec M x).1 ≠ 0

tactic: intro hfst
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x * (algebraMap R S) ↑(sec M x).2 = (algebraMap R S) (sec M x).1
⊢ (sec M x).1 ≠ 0
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x * (algebraMap R S) ↑(sec M x).2 = (algebraMap R S) (sec M x).1
hfst : (sec M x).1 = 0
⊢ False

tactic: rw [hfst, map_zero, mul_eq_zero, _root_.map_eq_zero_iff] at hsec
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x * (algebraMap R S) ↑(sec M x).2 = (algebraMap R S) (sec M x).1
hfst : (sec M x).1 = 0
⊢ False
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x = 0 ∨ ↑(sec M x).2 = 0
hfst : (sec M x).1 = 0
⊢ False

case hf
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x = 0 ∨ (algebraMap R S) ↑(sec M x).2 = 0
hfst : (sec M x).1 = 0
⊢ Injective ⇑(algebraMap R S)

tactic: exact Or.elim hsec hx (sec_snd_ne_zero hM 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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x = 0 ∨ ↑(sec M x).2 = 0
hfst : (sec M x).1 = 0
⊢ False
state_after: no goals

tactic: exact IsLocalization.injective S hM
state_before: case hf
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
K : Type u_4
inst✝² : IsLocalization M S
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors S
hM : M ≤ nonZeroDivisors R
x : S
hx : x ≠ 0
hsec : x = 0 ∨ (algebraMap R S) ↑(sec M x).2 = 0
hfst : (sec M x).1 = 0
⊢ Injective ⇑(algebraMap R S)
state_after: no goals