Theorem: Subalgebra.inv_mem_of_algebraic
File: Mathlib/RingTheory/Algebraic.lean

tactic: obtain ⟨p, ne_zero, aeval_eq⟩ := hx
state_before: R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
hx : _root_.IsAlgebraic K ↑x
⊢ (↑x)⁻¹ ∈ A

tactic: rw [Subalgebra.aeval_coe, Subalgebra.coe_eq_zero] at aeval_eq
state_before: case intro.intro
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
ne_zero : p ≠ 0
aeval_eq : ↑(aeval ↑x) p = 0
⊢ (↑x)⁻¹ ∈ A

tactic: revert ne_zero aeval_eq
state_before: case intro.intro
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
ne_zero : p ≠ 0
aeval_eq : ↑(aeval x) p = 0
⊢ (↑x)⁻¹ ∈ A

tactic: refine' p.recOnHorner _ _ _
state_before: case intro.intro
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
⊢ p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A

tactic: intro h
state_before: case intro.intro.refine'_1
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
⊢ 0 ≠ 0 → ↑(aeval x) 0 = 0 → (↑x)⁻¹ ∈ A

tactic: contradiction
state_before: case intro.intro.refine'_1
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
h : 0 ≠ 0
⊢ ↑(aeval x) 0 = 0 → (↑x)⁻¹ ∈ A

tactic: intro p a hp ha _ih _ne_zero aeval_eq
state_before: case intro.intro.refine'_2
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
⊢ ∀ (p : K[X]) (a : K),
    coeff p 0 = 0 →
      a ≠ 0 → (p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A) → p + ↑C a ≠ 0 → ↑(aeval x) (p + ↑C a) = 0 → (↑x)⁻¹ ∈ A

tactic: refine' A.inv_mem_of_root_of_coeff_zero_ne_zero aeval_eq _
state_before: case intro.intro.refine'_2
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
a : K
hp : coeff p 0 = 0
ha : a ≠ 0
_ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p + ↑C a ≠ 0
aeval_eq : ↑(aeval x) (p + ↑C a) = 0
⊢ (↑x)⁻¹ ∈ A

tactic: rwa [coeff_add, hp, zero_add, coeff_C, if_pos rfl]
state_before: case intro.intro.refine'_2
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
a : K
hp : coeff p 0 = 0
ha : a ≠ 0
_ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p + ↑C a ≠ 0
aeval_eq : ↑(aeval x) (p + ↑C a) = 0
⊢ coeff (p + ↑C a) 0 ≠ 0

tactic: intro p hp ih _ne_zero aeval_eq
state_before: case intro.intro.refine'_3
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p : K[X]
⊢ ∀ (p : K[X]), p ≠ 0 → (p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A) → p * X ≠ 0 → ↑(aeval x) (p * X) = 0 → (↑x)⁻¹ ∈ A

tactic: rw [AlgHom.map_mul, aeval_X, mul_eq_zero] at aeval_eq
state_before: case intro.intro.refine'_3
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
hp : p ≠ 0
ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p * X ≠ 0
aeval_eq : ↑(aeval x) (p * X) = 0
⊢ (↑x)⁻¹ ∈ A

tactic: cases' aeval_eq with aeval_eq x_eq
state_before: case intro.intro.refine'_3
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
hp : p ≠ 0
ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p * X ≠ 0
aeval_eq : ↑(aeval x) p = 0 ∨ x = 0
⊢ (↑x)⁻¹ ∈ A

tactic: exact ih hp aeval_eq
state_before: case intro.intro.refine'_3.inl
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
hp : p ≠ 0
ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p * X ≠ 0
aeval_eq : ↑(aeval x) p = 0
⊢ (↑x)⁻¹ ∈ A

tactic: rw [x_eq, Subalgebra.coe_zero, inv_zero]
state_before: case intro.intro.refine'_3.inr
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
hp : p ≠ 0
ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p * X ≠ 0
x_eq : x = 0
⊢ (↑x)⁻¹ ∈ A

tactic: exact A.zero_mem
state_before: case intro.intro.refine'_3.inr
R : Type ?u.864898
S : Type ?u.864901
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_2
L : Type u_1
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : { x // x ∈ A }
p✝ p : K[X]
hp : p ≠ 0
ih : p ≠ 0 → ↑(aeval x) p = 0 → (↑x)⁻¹ ∈ A
_ne_zero : p * X ≠ 0
x_eq : x = 0
⊢ 0 ∈ A