-- Init.Data.Int.Linear
Int.Internal.Linear.Poly.combine'.induct_unfolding : ∀ (motive : ℕ → Int.Internal.Linear.Poly → Int.Internal.Linear.Poly → Int.Internal.Linear.Poly → Prop),
  (∀ (p₁ p₂ : Int.Internal.Linear.Poly), motive 0 p₁ p₂ (p₁.append p₂)) →
    (∀ (fuel : ℕ) (k₁ k₂ : ℤ),
        motive fuel.succ (Int.Internal.Linear.Poly.num k₁) (Int.Internal.Linear.Poly.num k₂)
          (Int.Internal.Linear.Poly.num (k₁ + k₂))) →
      (∀ (fuel : ℕ) (k₁ a : ℤ) (x : Int.Internal.Linear.Var) (p : Int.Internal.Linear.Poly),
          motive fuel (Int.Internal.Linear.Poly.num k₁) p
              (Int.Internal.Linear.Poly.combine' fuel (Int.Internal.Linear.Poly.num k₁) p) →
            motive fuel.succ (Int.Internal.Linear.Poly.num k₁) (Int.Internal.Linear.Poly.add a x p)
              (Int.Internal.Linear.Poly.add a x
                (Int.Internal.Linear.Poly.combine' fuel (Int.Internal.Linear.Poly.num k₁) p))) →
        (∀ (fuel : ℕ) (a : ℤ) (x : Int.Internal.Linear.Var) (p : Int.Internal.Linear.Poly) (k₂ : ℤ),
            motive fuel p (Int.Internal.Linear.Poly.num k₂)
                (Int.Internal.Linear.Poly.combine' fuel p (Int.Internal.Linear.Poly.num k₂)) →
              motive fuel.succ (Int.Internal.Linear.Poly.add a x p) (Int.Internal.Linear.Poly.num k₂)
                (Int.Internal.Linear.Poly.add a x
                  (Int.Internal.Linear.Poly.combine' fuel p (Int.Internal.Linear.Poly.num k₂)))) →
          (∀ (fuel : ℕ) (a₁ : ℤ) (x₁ : Int.Internal.Linear.Var) (p₁ : Int.Internal.Linear.Poly) (a₂ : ℤ)
              (x₂ : Int.Internal.Linear.Var) (p₂ : Int.Internal.Linear.Poly),
              Nat.beq x₁ x₂ = true →
                have a := a₁ + a₂;
                (a == 0) = true →
                  motive fuel p₁ p₂ (Int.Internal.Linear.Poly.combine' fuel p₁ p₂) →
                    motive fuel.succ (Int.Internal.Linear.Poly.add a₁ x₁ p₁) (Int.Internal.Linear.Poly.add a₂ x₂ p₂)
                      (Int.Internal.Linear.Poly.combine' fuel p₁ p₂)) →
            (∀ (fuel : ℕ) (a₁ : ℤ) (x₁ : Int.Internal.Linear.Var) (p₁ : Int.Internal.Linear.Poly) (a₂ : ℤ)
                (x₂ : Int.Internal.Linear.Var) (p₂ : Int.Internal.Linear.Poly),
                Nat.beq x₁ x₂ = true →
                  have a := a₁ + a₂;
                  (a == 0) = false →
                    motive fuel p₁ p₂ (Int.Internal.Linear.Poly.combine' fuel p₁ p₂) →
                      motive fuel.succ (Int.Internal.Linear.Poly.add a₁ x₁ p₁) (Int.Internal.Linear.Poly.add a₂ x₂ p₂)
                        (Int.Internal.Linear.Poly.add a x₁ (Int.Internal.Linear.Poly.combine' fuel p₁ p₂))) →
              (∀ (fuel : ℕ) (a₁ : ℤ) (x₁ : Int.Internal.Linear.Var) (p₁ : Int.Internal.Linear.Poly) (a₂ : ℤ)
                  (x₂ : Int.Internal.Linear.Var) (p₂ : Int.Internal.Linear.Poly),
                  Nat.beq x₁ x₂ = false →
                    Nat.blt x₂ x₁ = true →
                      motive fuel p₁ (Int.Internal.Linear.Poly.add a₂ x₂ p₂)
                          (Int.Internal.Linear.Poly.combine' fuel p₁ (Int.Internal.Linear.Poly.add a₂ x₂ p₂)) →
                        motive fuel.succ (Int.Internal.Linear.Poly.add a₁ x₁ p₁) (Int.Internal.Linear.Poly.add a₂ x₂ p₂)
                          (Int.Internal.Linear.Poly.add a₁ x₁
                            (Int.Internal.Linear.Poly.combine' fuel p₁ (Int.Internal.Linear.Poly.add a₂ x₂ p₂)))) →
                (∀ (fuel : ℕ) (a₁ : ℤ) (x₁ : Int.Internal.Linear.Var) (p₁ : Int.Internal.Linear.Poly) (a₂ : ℤ)
                    (x₂ : Int.Internal.Linear.Var) (p₂ : Int.Internal.Linear.Poly),
                    Nat.beq x₁ x₂ = false →
                      Nat.blt x₂ x₁ = false →
                        motive fuel (Int.Internal.Linear.Poly.add a₁ x₁ p₁) p₂
                            (Int.Internal.Linear.Poly.combine' fuel (Int.Internal.Linear.Poly.add a₁ x₁ p₁) p₂) →
                          motive fuel.succ (Int.Internal.Linear.Poly.add a₁ x₁ p₁)
                            (Int.Internal.Linear.Poly.add a₂ x₂ p₂)
                            (Int.Internal.Linear.Poly.add a₂ x₂
                              (Int.Internal.Linear.Poly.combine' fuel (Int.Internal.Linear.Poly.add a₁ x₁ p₁) p₂))) →
                  ∀ (fuel : ℕ) (p₁ p₂ : Int.Internal.Linear.Poly),
                    motive fuel p₁ p₂ (Int.Internal.Linear.Poly.combine' fuel p₁ p₂)