Theorem: Polynomial.zero_modByMonic
File: Mathlib/Algebra/Polynomial/Div.lean

tactic: unfold modByMonic divModByMonicAux
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ 0 %ₘ p = 0
state_after: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ (if h : p.Monic then
      (if h_1 : p.degree ≤ degree 0 ∧ 0 ≠ 0 then
          let z := C (leadingCoeff 0) * X ^ (natDegree 0 - p.natDegree);
          let_fun _wf := ⋯;
          let dm := (0 - p * z).divModByMonicAux ⋯;
          (z + dm.1, dm.2)
        else (0, 0)).2
    else 0) =
    0

tactic: dsimp
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ (if h : p.Monic then
      (if h_1 : p.degree ≤ degree 0 ∧ 0 ≠ 0 then
          let z := C (leadingCoeff 0) * X ^ (natDegree 0 - p.natDegree);
          let_fun _wf := ⋯;
          let dm := (0 - p * z).divModByMonicAux ⋯;
          (z + dm.1, dm.2)
        else (0, 0)).2
    else 0) =
    0
state_after: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0

tactic: by_cases hp : Monic p
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0
state_after: case pos
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
hp : p.Monic
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0

case neg
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
hp : ¬p.Monic
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0

tactic: rw [dif_pos hp, if_neg (mt And.right (not_not_intro rfl))]
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
hp : p.Monic
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0
state_after: no goals

tactic: rw [dif_neg hp]
state_before: case neg
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Ring R
p✝ q p : R[X]
hp : ¬p.Monic
⊢ (if h : p.Monic then
      (if p.degree ≤ ⊥ ∧ ¬0 = 0 then
          (C 0 * X ^ (0 - p.natDegree) + ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).1,
            ((0 - p * (C 0 * X ^ (0 - p.natDegree))).divModByMonicAux ⋯).2)
        else (0, 0)).2
    else 0) =
    0
state_after: no goals