awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
⊢ ∀ (a : HenselianLocalRing R) {K : Type u} [inst_2 : Field K] (φ : R →+* K),
    Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : K),
            eval₂ φ a₀ f = 0 →
              eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 → ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀

Tactic:
1 → 3

Premises used: sorryAx, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous, OfNat.ofNat, Bool.false
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : K
h₁ : eval₂ φ a₀ f = 0
h₂ : eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0
obtain :
  ∀ (a₀ : R) (h₁ : eval₂ φ ((φ : (a : R) → K) a₀) f = 0)
    (h₂ : eval₂ φ ((φ : (a : R) → K) a₀) ((derivative : (a : R[X]) → R[X]) f) ≠ 0),
    ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)
⊢ ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀

Tactic:
obtain ⟨a₀, rfl⟩ := hφ a₀

Premises used: rfl
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
h₁ : eval₂ φ ((φ : (a : R) → K) a₀) f = 0
h₂ : eval₂ φ ((φ : (a : R) → K) a₀) ((derivative : (a : R[X]) → R[X]) f) ≠ 0
⊢ Membership.mem (γ := Ideal R) (maximalIdeal R) (Polynomial.eval a₀ f) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Membership.mem (γ := Ideal R) (maximalIdeal R) (a - a₀)

Tactic:
have H := HenselianLocalRing.is_henselian f hf a₀
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
h₁ : eval₂ φ ((φ : (a : R) → K) a₀) f = 0
h₂ : eval₂ φ ((φ : (a : R) → K) a₀) ((derivative : (a : R[X]) → R[X]) f) ≠ 0
H :
  Membership.mem (γ := Ideal R) (maximalIdeal R) (Polynomial.eval a₀ f) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Membership.mem (γ := Ideal R) (maximalIdeal R) (a - a₀)
⊢ Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)

Tactic:
simp only [← ker_eq_maximalIdeal φ hφ, eval₂_at_apply, RingHom.mem_ker] at H h₁ h₂

Premises used: RingHom.mem_ker, IsLocalRing.ker_eq_maximalIdeal, Polynomial.eval₂_at_apply
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
h₁ : eval₂ φ ((φ : (a : R) → K) a₀) f = 0
h₂ : eval₂ φ ((φ : (a : R) → K) a₀) ((derivative : (a : R[X]) → R[X]) f) ≠ 0
H :
  Membership.mem (γ := Ideal R) (maximalIdeal R) (Polynomial.eval a₀ f) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Membership.mem (γ := Ideal R) (maximalIdeal R) (a - a₀)
H₁ :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
⊢ Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)

Tactic:
simp only [← ker_eq_maximalIdeal φ hφ, eval₂_at_apply, RingHom.mem_ker] at H h₁ h₂

Premises used: RingHom.mem_ker, IsLocalRing.ker_eq_maximalIdeal, Polynomial.eval₂_at_apply
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
h₁ : eval₂ φ ((φ : (a : R) → K) a₀) f = 0
h₂ : eval₂ φ ((φ : (a : R) → K) a₀) ((derivative : (a : R[X]) → R[X]) f) ≠ 0
H :
  Membership.mem (γ := Ideal R) (maximalIdeal R) (Polynomial.eval a₀ f) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Membership.mem (γ := Ideal R) (maximalIdeal R) (a - a₀)
H₁ :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
h₃ : Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)
⊢ Ne (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)

Tactic:
simp only [← ker_eq_maximalIdeal φ hφ, eval₂_at_apply, RingHom.mem_ker] at H h₁ h₂

Premises used: RingHom.mem_ker, IsLocalRing.ker_eq_maximalIdeal, Polynomial.eval₂_at_apply
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
H :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
h₁ : Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)
h₂ : Ne (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)
contrapose :
  ∀ (h₂ : ¬IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f))),
    Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)
⊢ IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f))

Tactic:
contrapose h₂
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
H :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
h₁ : Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)
h₂ : Ne (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)
obtain :
  ∀ (a : R) (ha₁ : f.IsRoot a) (ha₂ : Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)),
    ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)
⊢ ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)

Tactic:
obtain ⟨a, ha₁, ha₂⟩ := H h₁ (by
      contrapose h₂
      rwa [← mem_nonunits_iff, ← mem_maximalIdeal, ← ker_eq_maximalIdeal φ hφ,
        RingHom.mem_ker] at h₂)
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
H :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
h₁ : Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)
h₂ : Ne (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)
a : R
ha₁ : f.IsRoot a
ha₂ : Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
⊢ ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)

Tactic:
⟨a, ha₁, ?_⟩

Premises used: And.intro, Exists.intro
-- Module: Mathlib.RingTheory.Henselian
Goal:
R : Type u
inst : CommRing R
inst_1 : IsLocalRing R
tfae_3_to_2 :
  ∀
    (a :
      ∀ {K : Type u} [inst_2 : Field K] (φ : R →+* K),
        Surjective (α := R) (β := K) (⇑φ : (a : R) → K) →
          ∀ (f : R[X]),
            f.Monic →
              ∀ (a₀ : K),
                eval₂ φ a₀ f = 0 →
                  eval₂ φ a₀ ((derivative : (a : R[X]) → R[X]) f) ≠ 0 →
                    ∃ (a : R), f.IsRoot a ∧ (φ : (a : R) → K) a = a₀)
    (f : R[X]),
    f.Monic →
      ∀ (a₀ : ResidueField R),
        Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R) (0 : ResidueField R) →
          Ne (α := ResidueField R)
              ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
              (0 : ResidueField R) →
            ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀
tfae_2_to_1 :
  ∀
    (a :
      ∀ (f : R[X]),
        f.Monic →
          ∀ (a₀ : ResidueField R),
            Eq (α := ResidueField R) ((aeval a₀ : (a : R[X]) → ResidueField R) f : ResidueField R)
                (0 : ResidueField R) →
              Ne (α := ResidueField R)
                  ((aeval a₀ : (a : R[X]) → ResidueField R) ((derivative : (a : R[X]) → R[X]) f) : ResidueField R)
                  (0 : ResidueField R) →
                ∃ (a : R), f.IsRoot a ∧ (residue R : (a : R) → ResidueField R) a = a₀),
    HenselianLocalRing R
hR : HenselianLocalRing R
K : Type u
_K : Field K
φ : R →+* K
hφ : Surjective (α := R) (β := K) (⇑φ : (a : R) → K)
f : R[X]
hf : f.Monic
a₀ : R
H :
  Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K) →
    IsUnit (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) →
      ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
h₁ : Eq (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ f) : K) (0 : K)
h₂ : Ne (α := K) ((φ : (a : R) → K) (Polynomial.eval a₀ ((derivative : (a : R[X]) → R[X]) f)) : K) (0 : K)
a : R
ha₁ : f.IsRoot a
ha₂ : Eq (α := K) ((φ : (a : R) → K) (a - a₀) : K) (0 : K)
refine : Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)
⊢ ∃ (a : R), f.IsRoot a ∧ Eq (α := K) ((φ : (a : R) → K) a : K) ((φ : (a : R) → K) a₀ : K)

Tactic:
refine ⟨a, ha₁, ?_⟩