Theorem: IntermediateField.coe_isIntegral_iff
File: Mathlib/FieldTheory/IntermediateField.lean

tactic: refine ⟨fun h => ?_, fun h => ?_⟩
state_before: K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
⊢ IsIntegral R ↑x ↔ IsIntegral R x
state_after: case refine_1
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
h : IsIntegral R ↑x
⊢ IsIntegral R x

case refine_2
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
h : IsIntegral R x
⊢ IsIntegral R ↑x

tactic: obtain ⟨P, hPmo, hProot⟩ := h
state_before: case refine_1
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
h : IsIntegral R ↑x
⊢ IsIntegral R x
state_after: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
⊢ IsIntegral R x

tactic: refine ⟨P, hPmo, (injective_iff_map_eq_zero _).1 (algebraMap (↥S) L).injective _ ?_⟩
state_before: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
⊢ IsIntegral R x
state_after: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
⊢ (algebraMap (↥S) L) (eval₂ (algebraMap R ↥S) x P) = 0

tactic: letI : IsScalarTower R S L := IsScalarTower.of_algebraMap_eq (congr_fun rfl)
state_before: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
⊢ (algebraMap (↥S) L) (eval₂ (algebraMap R ↥S) x P) = 0
state_after: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
this : IsScalarTower R (↥S) L := IsScalarTower.of_algebraMap_eq (congr_fun rfl)
⊢ (algebraMap (↥S) L) (eval₂ (algebraMap R ↥S) x P) = 0

tactic: rw [eval₂_eq_eval_map, ← eval₂_at_apply, eval₂_eq_eval_map, Polynomial.map_map, ←
  IsScalarTower.algebraMap_eq, ← eval₂_eq_eval_map]
state_before: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
this : IsScalarTower R (↥S) L := IsScalarTower.of_algebraMap_eq (congr_fun rfl)
⊢ (algebraMap (↥S) L) (eval₂ (algebraMap R ↥S) x P) = 0
state_after: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
this : IsScalarTower R (↥S) L := IsScalarTower.of_algebraMap_eq (congr_fun rfl)
⊢ eval₂ (algebraMap R L) ((algebraMap (↥S) L) x) P = 0

tactic: exact hProot
state_before: case refine_1.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R L) (↑x) P = 0
this : IsScalarTower R (↥S) L := IsScalarTower.of_algebraMap_eq (congr_fun rfl)
⊢ eval₂ (algebraMap R L) ((algebraMap (↥S) L) x) P = 0
state_after: no goals

tactic: obtain ⟨P, hPmo, hProot⟩ := h
state_before: case refine_2
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
h : IsIntegral R x
⊢ IsIntegral R ↑x
state_after: case refine_2.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R ↥S) x P = 0
⊢ IsIntegral R ↑x

tactic: refine ⟨P, hPmo, ?_⟩
state_before: case refine_2.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R ↥S) x P = 0
⊢ IsIntegral R ↑x
state_after: case refine_2.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R ↥S) x P = 0
⊢ eval₂ (algebraMap R L) (↑x) P = 0

tactic: rw [← aeval_def, aeval_coe, aeval_def, hProot, ZeroMemClass.coe_zero]
state_before: case refine_2.intro.intro
K : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field L'
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K L'
S : IntermediateField K L
R : Type u_4
inst✝³ : CommRing R
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : IsScalarTower R K L
x : ↥S
P : R[X]
hPmo : P.Monic
hProot : eval₂ (algebraMap R ↥S) x P = 0
⊢ eval₂ (algebraMap R L) (↑x) P = 0
state_after: no goals