Theorem: Ideal.MvPolynomial.comp_C_integral_of_surjective_of_jacobson
File: Mathlib/RingTheory/Jacobson.lean

Proof steps:
state_before: n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: cases nonempty_fintype σ
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: have e := (Fintype.equivFin σ).symm
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: let f' : MvPolynomial (Fin _) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective (⇑f ∘ ⇑(renameEquiv R e))
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: have hf' := Function.Surjective.comp hf (renameEquiv R e).surjective
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective (⇑f ∘ ⇑(renameEquiv R e))
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: change Function.Surjective ↑f' at hf'
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f'.comp MvPolynomial.C).IsIntegral
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: have : (f'.comp C).IsIntegral := by
    haveI : f'.ker.IsMaximal := ker_isMaximal_of_surjective f' hf'
    let g : MvPolynomial _ R ⧸ (RingHom.ker f') →+* S :=
      Ideal.Quotient.lift (RingHom.ker f') f' fun _ h => h
    have hfg : g.comp (Quotient.mk (RingHom.ker f')) = f' := ringHom_ext (fun r => rfl) fun i => rfl
    rw [← hfg, RingHom.comp_assoc]
    refine (quotient_mk_comp_C_isIntegral_of_jacobson (RingHom.ker f')).trans _ g
      (g.isIntegral_of_surjective ?_)
    rw [← hfg] at hf'
    norm_num at hf'
    exact Function.Surjective.of_comp hf'
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f'.comp MvPolynomial.C).IsIntegral
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
⊢ (f.comp MvPolynomial.C).IsIntegral
tactic: rw [RingHom.comp_assoc] at this
state_before: case intro
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
⊢ (f.comp MvPolynomial.C).IsIntegral
state_after: case h.e'_5.h.e'_8
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
⊢ MvPolynomial.C = (renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C
tactic: convert this
state_before: case h.e'_5.h.e'_8
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
⊢ MvPolynomial.C = (renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C
state_after: case h.e'_5.h.e'_8
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
x : R
⊢ MvPolynomial.C x = ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C) x
tactic: refine RingHom.ext fun x => ?_
state_before: case h.e'_5.h.e'_8
n : ℕ
R : Type u_1
inst✝³ : CommRing R
inst✝² : IsJacobson R
σ : Type u_2
inst✝¹ : _root_.Finite σ
S : Type u_3
inst✝ : Field S
f : MvPolynomial σ R →+* S
hf : Function.Surjective ⇑f
val✝ : Fintype σ
e : Fin (Fintype.card σ) ≃ σ
f' : MvPolynomial (Fin (Fintype.card σ)) R →+* S := f.comp (renameEquiv R e).toRingEquiv.toRingHom
hf' : Function.Surjective ⇑f'
this : (f.comp ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C)).IsIntegral
x : R
⊢ MvPolynomial.C x = ((renameEquiv R e).toRingEquiv.toRingHom.comp MvPolynomial.C) x
state_after: no goals
tactic: exact ((renameEquiv R e).commutes' x).symm