awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_4} σ
R : Type u_2
inst : CommRing R
ι : Type u_3
b : ι → MvPolynomial σ R
hb : ∀ (i : ι), IsUnit (m.leadingCoeff (b i))
f : MvPolynomial σ R
h :
  ∀ (y : MvPolynomial σ R),
    (invImage (β := { x : m.syn // Acc (fun (x x_1 : m.syn) ↦ x < x_1) x })
              (fun (x : MvPolynomial σ R) ↦
                ⋯.wrap (r := fun (x x_1 : m.syn) ↦ x < x_1) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree x)))
              (Acc.wfRel (r := fun (x x_1 : m.syn) ↦ x < x_1)) :
            WellFoundedRelation (MvPolynomial σ R)).1
        y f →
      ∃ (g : ι →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
        y =
            HAdd.hAdd (α := MvPolynomial σ R)
              ((Finsupp.linearCombination (MvPolynomial σ R) b : (a : ι →₀ MvPolynomial σ R) → MvPolynomial σ R) g :
                MvPolynomial σ R)
              r ∧
          (∀ (i : ι),
              LE.le.{u_4} (α := m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                    (m.degree
                      (HMul.hMul (β := MvPolynomial σ R) (b i)
                        ((g : (a : ι) → MvPolynomial σ R) i : MvPolynomial σ R))) :
                  m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree y) : m.syn)) ∧
            ∀ c ∈ r.support, ∀ (i : ι), ¬m.degree (b i) ≤ c
hb' : ¬∃ (i : ι), m.degree (b i) = 0
hf0_1 : ¬f = 0
hf : ¬∃ (i : ι), m.degree (b i) ≤ m.degree f
hf'0 : ¬m.subLTerm f = 0
hf0 : m.degree f = 0
hf₁ : f = (monomial (m.degree f) : (a : R) → MvPolynomial σ R) (m.leadingCoeff f)
⊢ m.subLTerm f = 0

Tactic:
simp only [subLTerm, sub_eq_zero]

Premises used: sub_eq_zero, MonomialOrder.subLTerm
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_4} σ
R : Type u_2
inst : CommRing R
ι : Type u_3
b : ι → MvPolynomial σ R
hb : ∀ (i : ι), IsUnit (m.leadingCoeff (b i))
f : MvPolynomial σ R
h :
  ∀ (y : MvPolynomial σ R),
    (invImage (β := { x : m.syn // Acc (fun (x x_1 : m.syn) ↦ x < x_1) x })
              (fun (x : MvPolynomial σ R) ↦
                ⋯.wrap (r := fun (x x_1 : m.syn) ↦ x < x_1) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree x)))
              (Acc.wfRel (r := fun (x x_1 : m.syn) ↦ x < x_1)) :
            WellFoundedRelation (MvPolynomial σ R)).1
        y f →
      ∃ (g : ι →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
        y =
            HAdd.hAdd (α := MvPolynomial σ R)
              ((Finsupp.linearCombination (MvPolynomial σ R) b : (a : ι →₀ MvPolynomial σ R) → MvPolynomial σ R) g :
                MvPolynomial σ R)
              r ∧
          (∀ (i : ι),
              LE.le.{u_4} (α := m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                    (m.degree
                      (HMul.hMul (β := MvPolynomial σ R) (b i)
                        ((g : (a : ι) → MvPolynomial σ R) i : MvPolynomial σ R))) :
                  m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree y) : m.syn)) ∧
            ∀ c ∈ r.support, ∀ (i : ι), ¬m.degree (b i) ≤ c
hb' : ¬∃ (i : ι), m.degree (b i) = 0
hf0_1 : ¬f = 0
hf : ¬∃ (i : ι), m.degree (b i) ≤ m.degree f
hf'0 : ¬m.subLTerm f = 0
hf0 : m.degree f = 0
hf₁ :
  Eq (α := MvPolynomial σ R) ((C : (a : R) → MvPolynomial σ R) (m.leadingCoeff f) : MvPolynomial σ R)
    ((monomial 0 : (a : R) → MvPolynomial σ R) (m.leadingCoeff f) : MvPolynomial σ R)
⊢ f = (monomial (m.degree f) : (a : R) → MvPolynomial σ R) (m.leadingCoeff f)

Tactic:
nth_rewrite 1 [eq_C_of_degree_eq_zero hf0, hf0]

Premises used: MonomialOrder.eq_C_of_degree_eq_zero
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_4} σ
R : Type u_2
inst : CommRing R
ι : Type u_3
b : ι → MvPolynomial σ R
hb : ∀ (i : ι), IsUnit (m.leadingCoeff (b i))
f : MvPolynomial σ R
h :
  ∀ (y : MvPolynomial σ R),
    (invImage (β := { x : m.syn // Acc (fun (x x_1 : m.syn) ↦ x < x_1) x })
              (fun (x : MvPolynomial σ R) ↦
                ⋯.wrap (r := fun (x x_1 : m.syn) ↦ x < x_1) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree x)))
              (Acc.wfRel (r := fun (x x_1 : m.syn) ↦ x < x_1)) :
            WellFoundedRelation (MvPolynomial σ R)).1
        y f →
      ∃ (g : ι →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
        y =
            HAdd.hAdd (α := MvPolynomial σ R)
              ((Finsupp.linearCombination (MvPolynomial σ R) b : (a : ι →₀ MvPolynomial σ R) → MvPolynomial σ R) g :
                MvPolynomial σ R)
              r ∧
          (∀ (i : ι),
              LE.le.{u_4} (α := m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                    (m.degree
                      (HMul.hMul (β := MvPolynomial σ R) (b i)
                        ((g : (a : ι) → MvPolynomial σ R) i : MvPolynomial σ R))) :
                  m.syn)
                ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree y) : m.syn)) ∧
            ∀ c ∈ r.support, ∀ (i : ι), ¬m.degree (b i) ≤ c
hb' : ¬∃ (i : ι), m.degree (b i) = 0
hf0_1 : ¬f = 0
hf : ¬∃ (i : ι), m.degree (b i) ≤ m.degree f
hf'0 : ¬m.subLTerm f = 0
hf0 : m.degree f = 0
⊢ Eq (α := MvPolynomial σ R) ((C : (a : R) → MvPolynomial σ R) (m.leadingCoeff f) : MvPolynomial σ R)
    ((monomial 0 : (a : R) → MvPolynomial σ R) (m.leadingCoeff f) : MvPolynomial σ R)

Tactic:
simp
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
B : Set (MvPolynomial σ R)
hB : ∀ b ∈ B, IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
obtain :
  ∀ (g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R)
    (H :
      f =
          HAdd.hAdd (α := MvPolynomial σ R)
            ((Finsupp.linearCombination (MvPolynomial σ R) fun (p : (↑B : Type (max u_1 u_2))) ↦
                    (↑p : MvPolynomial σ R) :
                  (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
                g :
              MvPolynomial σ R)
            r ∧
        (∀ (i : (↑B : Type (max u_1 u_2))),
            LE.le.{u_3} (α := m.syn)
              ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                  (m.degree
                    (HMul.hMul (β := MvPolynomial σ R) (↑i : MvPolynomial σ R)
                      ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) i : MvPolynomial σ R))) :
                m.syn)
              ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
          ∀ c ∈ r.support, ∀ (i : (↑B : Type (max u_1 u_2))), ¬m.degree (↑i : MvPolynomial σ R) ≤ c),
    ∃ (g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
      f =
          HAdd.hAdd (α := MvPolynomial σ R)
            ((Finsupp.linearCombination (MvPolynomial σ R) fun (b : (↑B : Type (max u_1 u_2))) ↦
                    (↑b : MvPolynomial σ R) :
                  (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
                g :
              MvPolynomial σ R)
            r ∧
        (∀ (b : (↑B : Type (max u_1 u_2))),
            LE.le.{u_3} (α := m.syn)
              ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                  (m.degree
                    (HMul.hMul (β := MvPolynomial σ R) (↑b : MvPolynomial σ R)
                      ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) b : MvPolynomial σ R))) :
                m.syn)
              ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
          ∀ c ∈ r.support, ∀ b ∈ B, ¬m.degree b ≤ c
⊢ ∃ (g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
    f =
        HAdd.hAdd (α := MvPolynomial σ R)
          ((Finsupp.linearCombination (MvPolynomial σ R) fun (b : (↑B : Type (max u_1 u_2))) ↦ (↑b : MvPolynomial σ R) :
                (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
              g :
            MvPolynomial σ R)
          r ∧
      (∀ (b : (↑B : Type (max u_1 u_2))),
          LE.le.{u_3} (α := m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                (m.degree
                  (HMul.hMul (β := MvPolynomial σ R) (↑b : MvPolynomial σ R)
                    ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) b : MvPolynomial σ R))) :
              m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
        ∀ c ∈ r.support, ∀ b ∈ B, ¬m.degree b ≤ c

Tactic:
obtain ⟨g, r, H⟩ := m.div (b := fun (p : B) ↦ p) (fun b ↦ hB b b.prop) f

Premises used: MonomialOrder.div
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
B : Set (MvPolynomial σ R)
hB : ∀ b ∈ B, IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
H :
  f =
      HAdd.hAdd (α := MvPolynomial σ R)
        ((Finsupp.linearCombination (MvPolynomial σ R) fun (p : (↑B : Type (max u_1 u_2))) ↦ (↑p : MvPolynomial σ R) :
              (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
            g :
          MvPolynomial σ R)
        r ∧
    (∀ (i : (↑B : Type (max u_1 u_2))),
        LE.le.{u_3} (α := m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
              (m.degree
                (HMul.hMul (β := MvPolynomial σ R) (↑i : MvPolynomial σ R)
                  ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) i : MvPolynomial σ R))) :
            m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
      ∀ c ∈ r.support, ∀ (i : (↑B : Type (max u_1 u_2))), ¬m.degree (↑i : MvPolynomial σ R) ≤ c
⊢ ∃ (g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
    f =
        HAdd.hAdd (α := MvPolynomial σ R)
          ((Finsupp.linearCombination (MvPolynomial σ R) fun (b : (↑B : Type (max u_1 u_2))) ↦ (↑b : MvPolynomial σ R) :
                (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
              g :
            MvPolynomial σ R)
          r ∧
      (∀ (b : (↑B : Type (max u_1 u_2))),
          LE.le.{u_3} (α := m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                (m.degree
                  (HMul.hMul (β := MvPolynomial σ R) (↑b : MvPolynomial σ R)
                    ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) b : MvPolynomial σ R))) :
              m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
        ∀ c ∈ r.support, ∀ b ∈ B, ¬m.degree b ≤ c

Tactic:
⟨g, r, H.1, H.2.1, fun c hc b hb ↦ H.2.2 c hc ⟨b, hb⟩⟩

Premises used: Subtype.mk, And.right, And.left, And.intro, Exists.intro
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
B : Set (MvPolynomial σ R)
hB : ∀ b ∈ B, IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
H :
  f =
      HAdd.hAdd (α := MvPolynomial σ R)
        ((Finsupp.linearCombination (MvPolynomial σ R) fun (p : (↑B : Type (max u_1 u_2))) ↦ (↑p : MvPolynomial σ R) :
              (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
            g :
          MvPolynomial σ R)
        r ∧
    (∀ (i : (↑B : Type (max u_1 u_2))),
        LE.le.{u_3} (α := m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
              (m.degree
                (HMul.hMul (β := MvPolynomial σ R) (↑i : MvPolynomial σ R)
                  ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) i : MvPolynomial σ R))) :
            m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
      ∀ c ∈ r.support, ∀ (i : (↑B : Type (max u_1 u_2))), ¬m.degree (↑i : MvPolynomial σ R) ≤ c
⊢ ∃ (g : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R),
    f =
        HAdd.hAdd (α := MvPolynomial σ R)
          ((Finsupp.linearCombination (MvPolynomial σ R) fun (b : (↑B : Type (max u_1 u_2))) ↦ (↑b : MvPolynomial σ R) :
                (a : (↑B : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
              g :
            MvPolynomial σ R)
          r ∧
      (∀ (b : (↑B : Type (max u_1 u_2))),
          LE.le.{u_3} (α := m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
                (m.degree
                  (HMul.hMul (β := MvPolynomial σ R) (↑b : MvPolynomial σ R)
                    ((g : (a : (↑B : Type (max u_1 u_2))) → MvPolynomial σ R) b : MvPolynomial σ R))) :
              m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)) ∧
        ∀ c ∈ r.support, ∀ b ∈ B, ¬m.degree b ≤ c

Tactic:
exact ⟨g, r, H.1, H.2.1, fun c hc b hb ↦ H.2.2 c hc ⟨b, hb⟩⟩
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
⊢ ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → IsUnit (m.leadingCoeff b_1)

Tactic:
simp [hb]
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
obtain :
  ∀ (g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) (r : MvPolynomial σ R)
    (hgr :
      f =
        HAdd.hAdd (α := MvPolynomial σ R)
          ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
                  (↑b_1 : MvPolynomial σ R) :
                (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
              g :
            MvPolynomial σ R)
          r)
    (h1 :
      ∀ (b_1 : (↑{b} : Type (max u_1 u_2))),
        LE.le.{u_3} (α := m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
              (m.degree
                (HMul.hMul (β := MvPolynomial σ R) (↑b_1 : MvPolynomial σ R)
                  ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R) b_1 : MvPolynomial σ R))) :
            m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn))
    (h2 :
      ∀ c ∈ r.support,
        ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c),
    ∃ (g : MvPolynomial σ R) (r : MvPolynomial σ R),
      f = g * b + r ∧
        LE.le.{u_3} (α := m.syn) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree (b * g)) : m.syn)
            ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn) ∧
          ∀ c ∈ r.support, ¬m.degree b ≤ c
⊢ ∃ (g : MvPolynomial σ R) (r : MvPolynomial σ R),
    f = g * b + r ∧
      LE.le.{u_3} (α := m.syn) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree (b * g)) : m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn) ∧
        ∀ c ∈ r.support, ¬m.degree b ≤ c

Tactic:
obtain ⟨g, r, hgr, h1, h2⟩ := div_set (B := {b}) (m := m) (by simp [hb]) f

Premises used: MonomialOrder.div_set
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
h1 :
  ∀ (b_1 : (↑{b} : Type (max u_1 u_2))),
    LE.le.{u_3} (α := m.syn)
      ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
          (m.degree
            (HMul.hMul (β := MvPolynomial σ R) (↑b_1 : MvPolynomial σ R)
              ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R) b_1 : MvPolynomial σ R))) :
        m.syn)
      ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
h2 :
  ∀ c ∈ r.support, ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c
⊢ Membership.mem (γ := Set (MvPolynomial σ R)) {b} b

Tactic:
simp
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
h1 :
  ∀ (b_1 : (↑{b} : Type (max u_1 u_2))),
    LE.le.{u_3} (α := m.syn)
      ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
          (m.degree
            (HMul.hMul (β := MvPolynomial σ R) (↑b_1 : MvPolynomial σ R)
              ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R) b_1 : MvPolynomial σ R))) :
        m.syn)
      ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
h2 :
  ∀ c ∈ r.support, ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c
⊢ LE.le.{u_3} (α := m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
        (m.degree
          (HMul.hMul (β := MvPolynomial σ R)
            (↑(Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯) :
              MvPolynomial σ R)
            ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
                (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b
                  ⋯) :
              MvPolynomial σ R))) :
      m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)

Tactic:
specialize h1 ⟨b, by simp⟩

Premises used: Subtype.mk
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
h2 :
  ∀ c ∈ r.support, ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c
h1 :
  LE.le.{u_3} (α := m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
        (m.degree
          (HMul.hMul (β := MvPolynomial σ R)
            (↑(Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯) :
              MvPolynomial σ R)
            ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
                (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b
                  ⋯) :
              MvPolynomial σ R))) :
      m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
⊢ Membership.mem (γ := Set (MvPolynomial σ R)) {b} b

Tactic:
simp
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
h2 :
  ∀ c ∈ r.support, ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c
h1 :
  LE.le.{u_3} (α := m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
        (m.degree
          (HMul.hMul (β := MvPolynomial σ R)
            (↑(Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯) :
              MvPolynomial σ R)
            ((g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
                (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b
                  ⋯) :
              MvPolynomial σ R))) :
      m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
⊢ let q : MvPolynomial σ R :=
    (g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
      (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯);
  LE.le.{u_3} (α := m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
        (m.degree
          ((↑(Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯) :
              MvPolynomial σ R) *
            q)) :
      m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)

Tactic:
set q := g ⟨b, by simp⟩

Premises used: Subtype.mk, DFunLike.coe
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
h2 :
  ∀ c ∈ r.support, ∀ (b_1 : MvPolynomial σ R), Membership.mem (γ := Set (MvPolynomial σ R)) {b} b_1 → ¬m.degree b_1 ≤ c
q : MvPolynomial σ R :=
  (g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
    (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯)
h1 :
  LE.le.{u_3} (α := m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn)
        (m.degree
          ((↑(Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯) :
              MvPolynomial σ R) *
            q)) :
      m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
⊢ ∀ c ∈ r.support, ¬m.degree b ≤ c

Tactic:
simp only [Set.mem_singleton_iff, forall_eq] at h2

Premises used: forall_eq, Set.mem_singleton_iff
-- Module: Mathlib.RingTheory.MvPolynomial.Groebner
Goal:
σ : Type u_1
m : MonomialOrder.{u_1, u_3} σ
R : Type u_2
inst : CommRing R
b : MvPolynomial σ R
hb : IsUnit (m.leadingCoeff b)
f : MvPolynomial σ R
g : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R
r : MvPolynomial σ R
hgr :
  f =
    HAdd.hAdd (α := MvPolynomial σ R)
      ((Finsupp.linearCombination (MvPolynomial σ R) fun (b_1 : (↑{b} : Type (max u_1 u_2))) ↦
              (↑b_1 : MvPolynomial σ R) :
            (a : (↑{b} : Type (max u_1 u_2)) →₀ MvPolynomial σ R) → MvPolynomial σ R)
          g :
        MvPolynomial σ R)
      r
q : MvPolynomial σ R :=
  (g : (a : (↑{b} : Type (max u_1 u_2))) → MvPolynomial σ R)
    (Subtype.mk (p := fun (x : MvPolynomial σ R) ↦ Membership.mem (γ := Set (MvPolynomial σ R)) {b} x) b ⋯)
h1 :
  LE.le.{u_3} (α := m.syn) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree (b * q)) : m.syn)
    ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn)
h2 : ∀ c ∈ r.support, ¬m.degree b ≤ c
⊢ ∃ (g : MvPolynomial σ R) (r : MvPolynomial σ R),
    f = g * b + r ∧
      LE.le.{u_3} (α := m.syn) ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree (b * g)) : m.syn)
          ((m.toSyn : (a : σ →₀ ℕ) → m.syn) (m.degree f) : m.syn) ∧
        ∀ c ∈ r.support, ¬m.degree b ≤ c

Tactic:
⟨q, r, ?_, h1, h2⟩

Premises used: And.intro, Exists.intro