Documentation

Init.Data.Int.Linear

Helper definitions and theorems for constructing linear arithmetic proofs.

@[reducible, inline]
Equations
Instances For
    @[reducible, inline]
    Equations
    Instances For
      @[inline]
      Equations
      Instances For
        Instances For
          Instances For
            noncomputable def Int.Internal.Linear.Poly.beq' (p₁ : Poly) :
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem Int.Internal.Linear.Poly.beq'_eq (p₁ p₂ : Poly) :
              (p₁.beq' p₂ = true) = (p₁ = p₂)
              @[inline]
              noncomputable abbrev Int.Internal.Linear.Poly.denote'.go (ctx : Context) (p : Poly) :
              IntInt
              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[inline]
                noncomputable abbrev Int.Internal.Linear.Poly.denote' (ctx : Context) (p : Poly) :

                Similar to Poly.denote, but produces a denotation better for simp +arith. Remark: we used to convert Poly back into Expr to achieve that.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[simp]
                  theorem Int.Internal.Linear.Poly.denote'_go_eq_denote (ctx : Context) (p : Poly) (r : Int) :
                  denote'.go ctx p r = denote ctx p + r
                  theorem Int.Internal.Linear.Poly.denote'_add (ctx : Context) (a : Int) (x : Var) (p : Poly) :
                  denote' ctx (add a x p) = a * Var.denote ctx x + denote ctx p
                  noncomputable def Int.Internal.Linear.Poly.addConst_k (p : Poly) (k : Int) :
                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    Equations
                    Instances For

                      Normalizes the given polynomial by fusing monomial and constants.

                      Equations
                      Instances For
                        def Int.Internal.Linear.Poly.combine' (fuel : Nat) (p₁ p₂ : Poly) :
                        Equations
                        Instances For
                          @[reducible, inline]
                          Equations
                          Instances For

                            Converts the given expression into a polynomial.

                            Equations
                            Instances For

                              Converts the given expression into a polynomial, and then normalizes it.

                              Equations
                              Instances For

                                Returns the ceiling of the division a / b. That is, the result is equivalent to ⌈a / b⌉. Examples:

                                • cdiv 7 3 returns 3
                                • cdiv (-7) 3 returns -2.
                                Equations
                                Instances For

                                  Returns the ceiling-compatible remainder of the division a / b. This function ensures that the remainder is consistent with cdiv, meaning:

                                  a = b * cdiv a b + cmod a b
                                  

                                  See theorem cdiv_add_cmod. We also have

                                  -b < cmod a b ≤ 0
                                  
                                  Equations
                                  Instances For
                                    theorem Int.Internal.Linear.cmod_gt_of_pos (a : Int) {b : Int} (h : 0 < b) :
                                    cmod a b > -b
                                    theorem Int.Internal.Linear.cmod_nonpos (a : Int) {b : Int} (h : b 0) :
                                    cmod a b 0
                                    theorem Int.Internal.Linear.cdiv_eq_div_of_divides {a b : Int} (h : a % b = 0) :
                                    a / b = cdiv a b

                                    Returns the constant of the given linear polynomial.

                                    Equations
                                    Instances For

                                      p.div k divides all coefficients of the polynomial p by k, but rounds up the constant using cdiv. Notes:

                                      • We only use this function with ks that divides all coefficients.
                                      • We use cdiv for the constant to implement the inequality tightening rule.
                                      Equations
                                      Instances For

                                        Returns true if k divides all coefficients and the constant of the given linear polynomial.

                                        Equations
                                        Instances For

                                          Returns true if k divides all coefficients of the given linear polynomial.

                                          Equations
                                          Instances For

                                            p.mul k multiplies all coefficients and constant of the polynomial p by k.

                                            Equations
                                            Instances For
                                              Equations
                                              Instances For
                                                noncomputable def Int.Internal.Linear.Poly.mul_k (p : Poly) (k : Int) :
                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[simp]
                                                  noncomputable def Int.Internal.Linear.Poly.combine_mul_k' (fuel : Nat) (a b : Int) :
                                                  PolyPolyPoly
                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    noncomputable def Int.Internal.Linear.Poly.combine_mul_k (a b : Int) (p₁ p₂ : Poly) :
                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      @[simp]
                                                      theorem Int.Internal.Linear.Poly.denote_mul (ctx : Context) (p : Poly) (k : Int) :
                                                      denote ctx (p.mul k) = k * denote ctx p
                                                      theorem Int.Internal.Linear.Poly.denote_addConst (ctx : Context) (p : Poly) (k : Int) :
                                                      denote ctx (p.addConst k) = denote ctx p + k
                                                      theorem Int.Internal.Linear.Poly.denote_insert (ctx : Context) (k : Int) (v : Var) (p : Poly) :
                                                      denote ctx (insert k v p) = denote ctx p + k * Var.denote ctx v
                                                      theorem Int.Internal.Linear.Poly.denote_append (ctx : Context) (p₁ p₂ : Poly) :
                                                      denote ctx (p₁.append p₂) = denote ctx p₁ + denote ctx p₂
                                                      theorem Int.Internal.Linear.Poly.denote_combine' (ctx : Context) (fuel : Nat) (p₁ p₂ : Poly) :
                                                      denote ctx (combine' fuel p₁ p₂) = denote ctx p₁ + denote ctx p₂
                                                      theorem Int.Internal.Linear.Poly.denote_combine (ctx : Context) (p₁ p₂ : Poly) :
                                                      denote ctx (p₁.combine p₂) = denote ctx p₁ + denote ctx p₂
                                                      theorem Int.Internal.Linear.Poly.denote_combine_mul_k (ctx : Context) (a b : Int) (p₁ p₂ : Poly) :
                                                      denote ctx (combine_mul_k a b p₁ p₂) = a * denote ctx p₁ + b * denote ctx p₂
                                                      theorem Int.Internal.Linear.sub_fold (a b : Int) :
                                                      a.sub b = a - b
                                                      theorem Int.Internal.Linear.Poly.denote_div_eq_of_divAll (ctx : Context) (p : Poly) (k : Int) :
                                                      divAll k p = truedenote ctx (div k p) * k = denote ctx p
                                                      theorem Int.Internal.Linear.Expr.denote_toPoly'_go {k : Int} {p : Poly} (ctx : Context) (e : Expr) :
                                                      Poly.denote ctx (toPoly'.go k e p) = k * denote ctx e + Poly.denote ctx p
                                                      theorem Int.Internal.Linear.Expr.eq_of_norm_eq (ctx : Context) (e : Expr) (p : Poly) (h : e.norm.beq' p = true) :
                                                      denote ctx e = Poly.denote' ctx p
                                                      noncomputable def Int.Internal.Linear.norm_eq_cert (lhs rhs : Expr) (p : Poly) :
                                                      Equations
                                                      Instances For
                                                        theorem Int.Internal.Linear.norm_eq (ctx : Context) (lhs rhs : Expr) (p : Poly) (h : norm_eq_cert lhs rhs p = true) :
                                                        (Expr.denote ctx lhs = Expr.denote ctx rhs) = (Poly.denote' ctx p = 0)
                                                        theorem Int.Internal.Linear.norm_le (ctx : Context) (lhs rhs : Expr) (p : Poly) (h : norm_eq_cert lhs rhs p = true) :
                                                        (Expr.denote ctx lhs Expr.denote ctx rhs) = (Poly.denote' ctx p 0)
                                                        theorem Int.Internal.Linear.norm_eq_var (ctx : Context) (lhs rhs : Expr) (x y : Var) (h : norm_eq_var_cert lhs rhs x y = true) :
                                                        (Expr.denote ctx lhs = Expr.denote ctx rhs) = (Var.denote ctx x = Var.denote ctx y)
                                                        theorem Int.Internal.Linear.norm_eq_var_const (ctx : Context) (lhs rhs : Expr) (x : Var) (k : Int) (h : norm_eq_var_const_cert lhs rhs x k = true) :
                                                        (Expr.denote ctx lhs = Expr.denote ctx rhs) = (Var.denote ctx x = k)
                                                        theorem Int.Internal.Linear.norm_eq_coeff' (ctx : Context) (p p' : Poly) (k : Int) :
                                                        p = p'.mul kk > 0 → (Poly.denote ctx p = 0 Poly.denote ctx p' = 0)
                                                        noncomputable def Int.Internal.Linear.norm_eq_coeff_cert (lhs rhs : Expr) (p : Poly) (k : Int) :
                                                        Equations
                                                        Instances For
                                                          theorem Int.Internal.Linear.norm_eq_coeff (ctx : Context) (lhs rhs : Expr) (p : Poly) (k : Int) :
                                                          norm_eq_coeff_cert lhs rhs p k = true → (Expr.denote ctx lhs = Expr.denote ctx rhs) = (Poly.denote' ctx p = 0)
                                                          theorem Int.Internal.Linear.norm_le_coeff (ctx : Context) (lhs rhs : Expr) (p : Poly) (k : Int) :
                                                          norm_eq_coeff_cert lhs rhs p k = true → (Expr.denote ctx lhs Expr.denote ctx rhs) = (Poly.denote' ctx p 0)
                                                          noncomputable def Int.Internal.Linear.norm_le_coeff_tight_cert (lhs rhs : Expr) (p : Poly) (k : Int) :
                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            theorem Int.Internal.Linear.norm_le_coeff_tight (ctx : Context) (lhs rhs : Expr) (p : Poly) (k : Int) :
                                                            norm_le_coeff_tight_cert lhs rhs p k = true → (Expr.denote ctx lhs Expr.denote ctx rhs) = (Poly.denote' ctx p 0)
                                                            Equations
                                                            Instances For
                                                              theorem Int.Internal.Linear.eq_eq_false (ctx : Context) (lhs rhs : Expr) :
                                                              (lhs.sub rhs).norm.isUnsatEq_k = true → (Expr.denote ctx lhs = Expr.denote ctx rhs) = False
                                                              theorem Int.Internal.Linear.eq_eq_true (ctx : Context) (lhs rhs : Expr) :
                                                              (lhs.sub rhs).norm.isValidEq = true → (Expr.denote ctx lhs = Expr.denote ctx rhs) = True
                                                              theorem Int.Internal.Linear.le_eq_false (ctx : Context) (lhs rhs : Expr) :
                                                              (lhs.sub rhs).norm.isUnsatLe = true → (Expr.denote ctx lhs Expr.denote ctx rhs) = False
                                                              theorem Int.Internal.Linear.le_eq_true (ctx : Context) (lhs rhs : Expr) :
                                                              (lhs.sub rhs).norm.isValidLe = true → (Expr.denote ctx lhs Expr.denote ctx rhs) = True
                                                              noncomputable def Int.Internal.Linear.unsatEqDivCoeffCert (lhs rhs : Expr) (k : Int) :
                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                theorem Int.Internal.Linear.eq_eq_false_of_divCoeff (ctx : Context) (lhs rhs : Expr) (k : Int) :
                                                                unsatEqDivCoeffCert lhs rhs k = true → (Expr.denote ctx lhs = Expr.denote ctx rhs) = False
                                                                theorem Int.Internal.Linear.norm_dvd (ctx : Context) (k : Int) (e : Expr) (p : Poly) :
                                                                e.norm.beq' p = true → (k Expr.denote ctx e) = (k Poly.denote' ctx p)
                                                                noncomputable def Int.Internal.Linear.dvd_coeff_cert (k₁ : Int) (p₁ : Poly) (k₂ : Int) (p₂ : Poly) (k : Int) :
                                                                Equations
                                                                Instances For
                                                                  noncomputable def Int.Internal.Linear.norm_dvd_gcd_cert (k₁ : Int) (e₁ : Expr) (k₂ : Int) (p₂ : Poly) (k : Int) :
                                                                  Equations
                                                                  Instances For
                                                                    theorem Int.Internal.Linear.norm_dvd_gcd (ctx : Context) (k₁ : Int) (e₁ : Expr) (k₂ : Int) (p₂ : Poly) (g : Int) :
                                                                    norm_dvd_gcd_cert k₁ e₁ k₂ p₂ g = true → (k₁ Expr.denote ctx e₁) = (k₂ Poly.denote' ctx p₂)
                                                                    theorem Int.Internal.Linear.dvd_coeff (ctx : Context) (k₁ : Int) (p₁ : Poly) (k₂ : Int) (p₂ : Poly) (g : Int) :
                                                                    dvd_coeff_cert k₁ p₁ k₂ p₂ g = truek₁ Poly.denote' ctx p₁k₂ Poly.denote' ctx p₂
                                                                    noncomputable def Int.Internal.Linear.dvd_elim_cert (k₁ : Int) (p₁ : Poly) (k₂ : Int) (p₂ : Poly) :
                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      theorem Int.Internal.Linear.dvd_elim (ctx : Context) (k₁ : Int) (p₁ : Poly) (k₂ : Int) (p₂ : Poly) :
                                                                      dvd_elim_cert k₁ p₁ k₂ p₂ = truek₁ Poly.denote' ctx p₁k₂ Poly.denote' ctx p₂
                                                                      noncomputable def Int.Internal.Linear.dvd_solve_combine_cert (d₁ : Int) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d : Int) (p : Poly) (g α β : Int) :
                                                                      Equations
                                                                      • One or more equations did not get rendered due to their size.
                                                                      Instances For
                                                                        theorem Int.Internal.Linear.dvd_solve_combine (ctx : Context) (d₁ : Int) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d : Int) (p : Poly) (g α β : Int) :
                                                                        dvd_solve_combine_cert d₁ p₁ d₂ p₂ d p g α β = trued₁ Poly.denote' ctx p₁d₂ Poly.denote' ctx p₂d Poly.denote' ctx p
                                                                        noncomputable def Int.Internal.Linear.dvd_solve_elim_cert (d₁ : Int) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d : Int) (p : Poly) :
                                                                        Equations
                                                                        Instances For
                                                                          theorem Int.Internal.Linear.dvd_solve_elim (ctx : Context) (d₁ : Int) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d : Int) (p : Poly) :
                                                                          dvd_solve_elim_cert d₁ p₁ d₂ p₂ d p = trued₁ Poly.denote' ctx p₁d₂ Poly.denote' ctx p₂d Poly.denote' ctx p
                                                                          theorem Int.Internal.Linear.dvd_norm (ctx : Context) (d : Int) (p₁ p₂ : Poly) :
                                                                          p₁.norm.beq' p₂ = trued Poly.denote' ctx p₁d Poly.denote' ctx p₂
                                                                          theorem Int.Internal.Linear.le_norm (ctx : Context) (p₁ p₂ : Poly) (h : p₁.norm.beq' p₂ = true) :
                                                                          Poly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0
                                                                          noncomputable def Int.Internal.Linear.le_coeff_cert (p₁ p₂ : Poly) (k : Int) :
                                                                          Equations
                                                                          Instances For
                                                                            theorem Int.Internal.Linear.le_coeff (ctx : Context) (p₁ p₂ : Poly) (k : Int) :
                                                                            le_coeff_cert p₁ p₂ k = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0
                                                                            noncomputable def Int.Internal.Linear.le_neg_cert (p₁ p₂ : Poly) :
                                                                            Equations
                                                                            Instances For
                                                                              theorem Int.Internal.Linear.le_neg (ctx : Context) (p₁ p₂ : Poly) :
                                                                              le_neg_cert p₁ p₂ = true¬Poly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0
                                                                              noncomputable def Int.Internal.Linear.le_combine_cert (p₁ p₂ p₃ : Poly) :
                                                                              Equations
                                                                              Instances For
                                                                                theorem Int.Internal.Linear.le_combine (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                le_combine_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                noncomputable def Int.Internal.Linear.le_combine_coeff_cert (p₁ p₂ p₃ : Poly) (k : Int) :
                                                                                Equations
                                                                                • One or more equations did not get rendered due to their size.
                                                                                Instances For
                                                                                  theorem Int.Internal.Linear.le_combine_coeff (ctx : Context) (p₁ p₂ p₃ : Poly) (k : Int) :
                                                                                  le_combine_coeff_cert p₁ p₂ p₃ k = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                  theorem Int.Internal.Linear.eq_norm (ctx : Context) (p₁ p₂ : Poly) (h : p₁.norm.beq' p₂ = true) :
                                                                                  Poly.denote' ctx p₁ = 0Poly.denote' ctx p₂ = 0
                                                                                  noncomputable def Int.Internal.Linear.eq_coeff_cert (p p' : Poly) (k : Int) :
                                                                                  Equations
                                                                                  Instances For
                                                                                    theorem Int.Internal.Linear.eq_coeff (ctx : Context) (p p' : Poly) (k : Int) :
                                                                                    eq_coeff_cert p p' k = truePoly.denote' ctx p = 0Poly.denote' ctx p' = 0
                                                                                    Equations
                                                                                    Instances For
                                                                                      noncomputable def Int.Internal.Linear.Poly.coeff_k (p : Poly) (x : Var) :
                                                                                      Equations
                                                                                      • One or more equations did not get rendered due to their size.
                                                                                      Instances For
                                                                                        noncomputable def Int.Internal.Linear.dvd_of_eq_cert (x : Var) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) :
                                                                                        Equations
                                                                                        Instances For
                                                                                          theorem Int.Internal.Linear.dvd_of_eq (ctx : Context) (x : Var) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) :
                                                                                          dvd_of_eq_cert x p₁ d₂ p₂ = truePoly.denote' ctx p₁ = 0d₂ Poly.denote' ctx p₂
                                                                                          noncomputable def Int.Internal.Linear.eq_dvd_subst_cert (x : Var) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d₃ : Int) (p₃ : Poly) :
                                                                                          Equations
                                                                                          • One or more equations did not get rendered due to their size.
                                                                                          Instances For
                                                                                            theorem Int.Internal.Linear.eq_dvd_subst (ctx : Context) (x : Var) (p₁ : Poly) (d₂ : Int) (p₂ : Poly) (d₃ : Int) (p₃ : Poly) :
                                                                                            eq_dvd_subst_cert x p₁ d₂ p₂ d₃ p₃ = truePoly.denote' ctx p₁ = 0d₂ Poly.denote' ctx p₂d₃ Poly.denote' ctx p₃
                                                                                            noncomputable def Int.Internal.Linear.eq_eq_subst_cert (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                            Equations
                                                                                            Instances For
                                                                                              theorem Int.Internal.Linear.eq_eq_subst (ctx : Context) (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                              eq_eq_subst_cert x p₁ p₂ p₃ = truePoly.denote' ctx p₁ = 0Poly.denote' ctx p₂ = 0Poly.denote' ctx p₃ = 0
                                                                                              noncomputable def Int.Internal.Linear.eq_eq_subst'_cert (a b : Int) (p₁ p₂ p₃ : Poly) :
                                                                                              Equations
                                                                                              Instances For
                                                                                                theorem Int.Internal.Linear.eq_eq_subst' (ctx : Context) (a b : Int) (p₁ p₂ p₃ : Poly) :
                                                                                                eq_eq_subst'_cert a b p₁ p₂ p₃ = truePoly.denote' ctx p₁ = 0Poly.denote' ctx p₂ = 0Poly.denote' ctx p₃ = 0
                                                                                                noncomputable def Int.Internal.Linear.eq_le_subst_nonneg_cert (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                Equations
                                                                                                Instances For
                                                                                                  theorem Int.Internal.Linear.eq_le_subst_nonneg (ctx : Context) (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                  eq_le_subst_nonneg_cert x p₁ p₂ p₃ = truePoly.denote' ctx p₁ = 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                  noncomputable def Int.Internal.Linear.eq_le_subst_nonpos_cert (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                  Equations
                                                                                                  Instances For
                                                                                                    theorem Int.Internal.Linear.eq_le_subst_nonpos (ctx : Context) (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                    eq_le_subst_nonpos_cert x p₁ p₂ p₃ = truePoly.denote' ctx p₁ = 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                    noncomputable def Int.Internal.Linear.eq_of_core_cert (p₁ p₂ p₃ : Poly) :
                                                                                                    Equations
                                                                                                    Instances For
                                                                                                      theorem Int.Internal.Linear.eq_of_core (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                                      eq_of_core_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ = Poly.denote' ctx p₂Poly.denote' ctx p₃ = 0
                                                                                                      Equations
                                                                                                      Instances For
                                                                                                        theorem Int.Internal.Linear.diseq_norm (ctx : Context) (p₁ p₂ : Poly) (h : p₁.norm.beq' p₂ = true) :
                                                                                                        Poly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0
                                                                                                        theorem Int.Internal.Linear.diseq_coeff (ctx : Context) (p p' : Poly) (k : Int) :
                                                                                                        eq_coeff_cert p p' k = truePoly.denote' ctx p 0Poly.denote' ctx p' 0
                                                                                                        theorem Int.Internal.Linear.diseq_neg (ctx : Context) (p p' : Poly) :
                                                                                                        p'.beq' (p.mul (-1)) = truePoly.denote' ctx p 0Poly.denote' ctx p' 0
                                                                                                        noncomputable def Int.Internal.Linear.diseq_eq_subst_cert (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                        Equations
                                                                                                        Instances For
                                                                                                          theorem Int.Internal.Linear.eq_diseq_subst (ctx : Context) (x : Var) (p₁ p₂ p₃ : Poly) :
                                                                                                          diseq_eq_subst_cert x p₁ p₂ p₃ = truePoly.denote' ctx p₁ = 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                          theorem Int.Internal.Linear.diseq_of_core (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                                          eq_of_core_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ Poly.denote' ctx p₂Poly.denote' ctx p₃ 0
                                                                                                          noncomputable def Int.Internal.Linear.eq_of_le_ge_cert (p₁ p₂ : Poly) :
                                                                                                          Equations
                                                                                                          Instances For
                                                                                                            theorem Int.Internal.Linear.eq_of_le_ge (ctx : Context) (p₁ p₂ : Poly) :
                                                                                                            eq_of_le_ge_cert p₁ p₂ = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₁ = 0
                                                                                                            noncomputable def Int.Internal.Linear.le_of_le_diseq_cert (p₁ p₂ p₃ : Poly) :
                                                                                                            Equations
                                                                                                            Instances For
                                                                                                              theorem Int.Internal.Linear.le_of_le_diseq (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                                              le_of_le_diseq_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                              noncomputable def Int.Internal.Linear.diseq_split_cert (p₁ p₂ p₃ : Poly) :
                                                                                                              Equations
                                                                                                              Instances For
                                                                                                                theorem Int.Internal.Linear.diseq_split (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                                                diseq_split_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0 Poly.denote' ctx p₃ 0
                                                                                                                theorem Int.Internal.Linear.diseq_split_resolve (ctx : Context) (p₁ p₂ p₃ : Poly) :
                                                                                                                diseq_split_cert p₁ p₂ p₃ = truePoly.denote' ctx p₁ 0¬Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                                theorem Int.Internal.Linear.orOver_one {p : NatProp} :
                                                                                                                OrOver 1 pp 0
                                                                                                                theorem Int.Internal.Linear.orOver_resolve {n : Nat} {p : NatProp} :
                                                                                                                OrOver (n + 1) p¬p nOrOver n p
                                                                                                                noncomputable def Int.Internal.Linear.cooper_dvd_left_cert (p₁ p₂ p₃ : Poly) (d : Int) (n : Nat) :
                                                                                                                Equations
                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                Instances For
                                                                                                                  Equations
                                                                                                                  Instances For
                                                                                                                    def Int.Internal.Linear.cooper_dvd_left_split (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) :
                                                                                                                    Equations
                                                                                                                    • One or more equations did not get rendered due to their size.
                                                                                                                    Instances For
                                                                                                                      theorem Int.Internal.Linear.cooper_dvd_left (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (n : Nat) :
                                                                                                                      cooper_dvd_left_cert p₁ p₂ p₃ d n = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0d Poly.denote' ctx p₃OrOver n (cooper_dvd_left_split ctx p₁ p₂ p₃ d)
                                                                                                                      noncomputable def Int.Internal.Linear.cooper_dvd_left_split_ineq_cert (p₁ p₂ : Poly) (k b : Int) (p' : Poly) :
                                                                                                                      Equations
                                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                                      Instances For
                                                                                                                        theorem Int.Internal.Linear.cooper_dvd_left_split_ineq (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (b : Int) (p' : Poly) :
                                                                                                                        cooper_dvd_left_split ctx p₁ p₂ p₃ d kcooper_dvd_left_split_ineq_cert p₁ p₂ (↑k) b p' = truePoly.denote' ctx p' 0
                                                                                                                        noncomputable def Int.Internal.Linear.cooper_dvd_left_split_dvd1_cert (p₁ p' : Poly) (a k : Int) :
                                                                                                                        Equations
                                                                                                                        Instances For
                                                                                                                          theorem Int.Internal.Linear.cooper_dvd_left_split_dvd1 (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (a : Int) (p' : Poly) :
                                                                                                                          cooper_dvd_left_split ctx p₁ p₂ p₃ d kcooper_dvd_left_split_dvd1_cert p₁ p' a k = truea Poly.denote' ctx p'
                                                                                                                          noncomputable def Int.Internal.Linear.cooper_dvd_left_split_dvd2_cert (p₁ p₃ : Poly) (d : Int) (k : Nat) (d' : Int) (p' : Poly) :
                                                                                                                          Equations
                                                                                                                          • One or more equations did not get rendered due to their size.
                                                                                                                          Instances For
                                                                                                                            theorem Int.Internal.Linear.cooper_dvd_left_split_dvd2 (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (d' : Int) (p' : Poly) :
                                                                                                                            cooper_dvd_left_split ctx p₁ p₂ p₃ d kcooper_dvd_left_split_dvd2_cert p₁ p₃ d k d' p' = trued' Poly.denote' ctx p'
                                                                                                                            noncomputable def Int.Internal.Linear.cooper_left_cert (p₁ p₂ : Poly) (n : Nat) :
                                                                                                                            Equations
                                                                                                                            • One or more equations did not get rendered due to their size.
                                                                                                                            Instances For
                                                                                                                              def Int.Internal.Linear.cooper_left_split (ctx : Context) (p₁ p₂ : Poly) (k : Nat) :
                                                                                                                              Equations
                                                                                                                              • One or more equations did not get rendered due to their size.
                                                                                                                              Instances For
                                                                                                                                theorem Int.Internal.Linear.cooper_left (ctx : Context) (p₁ p₂ : Poly) (n : Nat) :
                                                                                                                                cooper_left_cert p₁ p₂ n = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0OrOver n (cooper_left_split ctx p₁ p₂)
                                                                                                                                noncomputable def Int.Internal.Linear.cooper_left_split_ineq_cert (p₁ p₂ : Poly) (k b : Int) (p' : Poly) :
                                                                                                                                Equations
                                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                                Instances For
                                                                                                                                  theorem Int.Internal.Linear.cooper_left_split_ineq (ctx : Context) (p₁ p₂ : Poly) (k : Nat) (b : Int) (p' : Poly) :
                                                                                                                                  cooper_left_split ctx p₁ p₂ kcooper_left_split_ineq_cert p₁ p₂ (↑k) b p' = truePoly.denote' ctx p' 0
                                                                                                                                  noncomputable def Int.Internal.Linear.cooper_left_split_dvd_cert (p₁ p' : Poly) (a k : Int) :
                                                                                                                                  Equations
                                                                                                                                  Instances For
                                                                                                                                    theorem Int.Internal.Linear.cooper_left_split_dvd (ctx : Context) (p₁ p₂ : Poly) (k : Nat) (a : Int) (p' : Poly) :
                                                                                                                                    cooper_left_split ctx p₁ p₂ kcooper_left_split_dvd_cert p₁ p' a k = truea Poly.denote' ctx p'
                                                                                                                                    noncomputable def Int.Internal.Linear.cooper_dvd_right_cert (p₁ p₂ p₃ : Poly) (d : Int) (n : Nat) :
                                                                                                                                    Equations
                                                                                                                                    • One or more equations did not get rendered due to their size.
                                                                                                                                    Instances For
                                                                                                                                      def Int.Internal.Linear.cooper_dvd_right_split (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) :
                                                                                                                                      Equations
                                                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                                                      Instances For
                                                                                                                                        theorem Int.Internal.Linear.cooper_dvd_right (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (n : Nat) :
                                                                                                                                        cooper_dvd_right_cert p₁ p₂ p₃ d n = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0d Poly.denote' ctx p₃OrOver n (cooper_dvd_right_split ctx p₁ p₂ p₃ d)
                                                                                                                                        noncomputable def Int.Internal.Linear.cooper_dvd_right_split_ineq_cert (p₁ p₂ : Poly) (k a : Int) (p' : Poly) :
                                                                                                                                        Equations
                                                                                                                                        • One or more equations did not get rendered due to their size.
                                                                                                                                        Instances For
                                                                                                                                          theorem Int.Internal.Linear.cooper_dvd_right_split_ineq (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (a : Int) (p' : Poly) :
                                                                                                                                          cooper_dvd_right_split ctx p₁ p₂ p₃ d kcooper_dvd_right_split_ineq_cert p₁ p₂ (↑k) a p' = truePoly.denote' ctx p' 0
                                                                                                                                          noncomputable def Int.Internal.Linear.cooper_dvd_right_split_dvd1_cert (p₂ p' : Poly) (b k : Int) :
                                                                                                                                          Equations
                                                                                                                                          Instances For
                                                                                                                                            theorem Int.Internal.Linear.cooper_dvd_right_split_dvd1 (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (b : Int) (p' : Poly) :
                                                                                                                                            cooper_dvd_right_split ctx p₁ p₂ p₃ d kcooper_dvd_right_split_dvd1_cert p₂ p' b k = trueb Poly.denote' ctx p'
                                                                                                                                            noncomputable def Int.Internal.Linear.cooper_dvd_right_split_dvd2_cert (p₂ p₃ : Poly) (d : Int) (k : Nat) (d' : Int) (p' : Poly) :
                                                                                                                                            Equations
                                                                                                                                            • One or more equations did not get rendered due to their size.
                                                                                                                                            Instances For
                                                                                                                                              theorem Int.Internal.Linear.cooper_dvd_right_split_dvd2 (ctx : Context) (p₁ p₂ p₃ : Poly) (d : Int) (k : Nat) (d' : Int) (p' : Poly) :
                                                                                                                                              cooper_dvd_right_split ctx p₁ p₂ p₃ d kcooper_dvd_right_split_dvd2_cert p₂ p₃ d k d' p' = trued' Poly.denote' ctx p'
                                                                                                                                              noncomputable def Int.Internal.Linear.cooper_right_cert (p₁ p₂ : Poly) (n : Nat) :
                                                                                                                                              Equations
                                                                                                                                              • One or more equations did not get rendered due to their size.
                                                                                                                                              Instances For
                                                                                                                                                Equations
                                                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                                                Instances For
                                                                                                                                                  theorem Int.Internal.Linear.cooper_right (ctx : Context) (p₁ p₂ : Poly) (n : Nat) :
                                                                                                                                                  cooper_right_cert p₁ p₂ n = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0OrOver n (cooper_right_split ctx p₁ p₂)
                                                                                                                                                  noncomputable def Int.Internal.Linear.cooper_right_split_ineq_cert (p₁ p₂ : Poly) (k a : Int) (p' : Poly) :
                                                                                                                                                  Equations
                                                                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                                                                  Instances For
                                                                                                                                                    theorem Int.Internal.Linear.cooper_right_split_ineq (ctx : Context) (p₁ p₂ : Poly) (k : Nat) (a : Int) (p' : Poly) :
                                                                                                                                                    cooper_right_split ctx p₁ p₂ kcooper_right_split_ineq_cert p₁ p₂ (↑k) a p' = truePoly.denote' ctx p' 0
                                                                                                                                                    noncomputable def Int.Internal.Linear.cooper_right_split_dvd_cert (p₂ p' : Poly) (b k : Int) :
                                                                                                                                                    Equations
                                                                                                                                                    Instances For
                                                                                                                                                      theorem Int.Internal.Linear.cooper_right_split_dvd (ctx : Context) (p₁ p₂ : Poly) (k : Nat) (b : Int) (p' : Poly) :
                                                                                                                                                      cooper_right_split ctx p₁ p₂ kcooper_right_split_dvd_cert p₂ p' b k = trueb Poly.denote' ctx p'
                                                                                                                                                      @[reducible, inline]
                                                                                                                                                      abbrev Int.Internal.Linear.Poly.casesOnAdd (p : Poly) (k : IntVarPolyBool) :
                                                                                                                                                      Equations
                                                                                                                                                      Instances For
                                                                                                                                                        @[reducible, inline]
                                                                                                                                                        Equations
                                                                                                                                                        Instances For
                                                                                                                                                          noncomputable def Int.Internal.Linear.cooper_unsat_cert (p₁ p₂ p₃ : Poly) (d α β : Int) :
                                                                                                                                                          Equations
                                                                                                                                                          • One or more equations did not get rendered due to their size.
                                                                                                                                                          Instances For
                                                                                                                                                            theorem Int.Internal.Linear.cooper_unsat (ctx : Context) (p₁ p₂ p₃ : Poly) (d α β : Int) :
                                                                                                                                                            cooper_unsat_cert p₁ p₂ p₃ d α β = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0d Poly.denote' ctx p₃False
                                                                                                                                                            theorem Int.Internal.Linear.ediv_emod (x y : Int) :
                                                                                                                                                            -1 * x + y * (x / y) + x % y = 0
                                                                                                                                                            theorem Int.Internal.Linear.emod_nonneg (x y : Int) :
                                                                                                                                                            (y != 0) = true-1 * (x % y) 0
                                                                                                                                                            Equations
                                                                                                                                                            Instances For
                                                                                                                                                              theorem Int.Internal.Linear.emod_le (x y n : Int) :
                                                                                                                                                              emod_le_cert y n = truex % y + n 0
                                                                                                                                                              noncomputable def Int.Internal.Linear.dvd_le_tight_cert (d : Int) (p₁ p₂ p₃ : Poly) :
                                                                                                                                                              Equations
                                                                                                                                                              • One or more equations did not get rendered due to their size.
                                                                                                                                                              Instances For
                                                                                                                                                                theorem Int.Internal.Linear.dvd_le_tight (ctx : Context) (d : Int) (p₁ p₂ p₃ : Poly) :
                                                                                                                                                                dvd_le_tight_cert d p₁ p₂ p₃ = trued Poly.denote' ctx p₁Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                                                                                noncomputable def Int.Internal.Linear.dvd_neg_le_tight_cert (d : Int) (p₁ p₂ p₃ : Poly) :
                                                                                                                                                                Equations
                                                                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                                                                Instances For
                                                                                                                                                                  theorem Int.Internal.Linear.dvd_neg_le_tight (ctx : Context) (d : Int) (p₁ p₂ p₃ : Poly) :
                                                                                                                                                                  dvd_neg_le_tight_cert d p₁ p₂ p₃ = trued Poly.denote' ctx p₁Poly.denote' ctx p₂ 0Poly.denote' ctx p₃ 0
                                                                                                                                                                  theorem Int.Internal.Linear.le_norm_expr (ctx : Context) (lhs rhs : Expr) (p : Poly) :
                                                                                                                                                                  norm_eq_cert lhs rhs p = trueExpr.denote ctx lhs Expr.denote ctx rhsPoly.denote' ctx p 0
                                                                                                                                                                  noncomputable def Int.Internal.Linear.not_le_norm_expr_cert (lhs rhs : Expr) (p : Poly) :
                                                                                                                                                                  Equations
                                                                                                                                                                  Instances For
                                                                                                                                                                    theorem Int.Internal.Linear.not_le_norm_expr (ctx : Context) (lhs rhs : Expr) (p : Poly) :
                                                                                                                                                                    not_le_norm_expr_cert lhs rhs p = true¬Expr.denote ctx lhs Expr.denote ctx rhsPoly.denote' ctx p 0
                                                                                                                                                                    theorem Int.Internal.Linear.dvd_norm_expr (ctx : Context) (d : Int) (e : Expr) (p : Poly) :
                                                                                                                                                                    (p == e.norm) = trued Expr.denote ctx ed Poly.denote' ctx p
                                                                                                                                                                    theorem Int.Internal.Linear.eq_norm_expr (ctx : Context) (lhs rhs : Expr) (p : Poly) :
                                                                                                                                                                    norm_eq_cert lhs rhs p = trueExpr.denote ctx lhs = Expr.denote ctx rhsPoly.denote' ctx p = 0
                                                                                                                                                                    theorem Int.Internal.Linear.not_eq_norm_expr (ctx : Context) (lhs rhs : Expr) (p : Poly) :
                                                                                                                                                                    norm_eq_cert lhs rhs p = true¬Expr.denote ctx lhs = Expr.denote ctx rhs¬Poly.denote' ctx p = 0
                                                                                                                                                                    theorem Int.Internal.Linear.of_not_dvd (a b : Int) :
                                                                                                                                                                    (a != 0) = true¬a bb % a > 0
                                                                                                                                                                    noncomputable def Int.Internal.Linear.eq_def_cert (x : Var) (xPoly p : Poly) :
                                                                                                                                                                    Equations
                                                                                                                                                                    Instances For
                                                                                                                                                                      theorem Int.Internal.Linear.eq_def (ctx : Context) (x : Var) (xPoly p : Poly) :
                                                                                                                                                                      eq_def_cert x xPoly p = trueVar.denote ctx x = Poly.denote' ctx xPolyPoly.denote' ctx p = 0
                                                                                                                                                                      theorem Int.Internal.Linear.eq_def_norm (ctx : Context) (x : Var) (xPoly xPoly' p : Poly) :
                                                                                                                                                                      eq_def_cert x xPoly' p = trueVar.denote ctx x = Poly.denote' ctx xPolyPoly.denote' ctx xPoly = Poly.denote' ctx xPoly'Poly.denote' ctx p = 0
                                                                                                                                                                      noncomputable def Int.Internal.Linear.eq_def'_cert (x : Var) (e : Expr) (p : Poly) :
                                                                                                                                                                      Equations
                                                                                                                                                                      Instances For
                                                                                                                                                                        theorem Int.Internal.Linear.eq_def' (ctx : Context) (x : Var) (e : Expr) (p : Poly) :
                                                                                                                                                                        eq_def'_cert x e p = trueVar.denote ctx x = Expr.denote ctx ePoly.denote' ctx p = 0
                                                                                                                                                                        noncomputable def Int.Internal.Linear.eq_def'_norm_cert (x : Var) (e : Expr) (ePoly ePoly' p : Poly) :
                                                                                                                                                                        Equations
                                                                                                                                                                        Instances For
                                                                                                                                                                          theorem Int.Internal.Linear.eq_def'_norm (ctx : Context) (x : Var) (e : Expr) (ePoly ePoly' p : Poly) :
                                                                                                                                                                          eq_def'_norm_cert x e ePoly ePoly' p = trueVar.denote ctx x = Expr.denote ctx ePoly.denote' ctx ePoly = Poly.denote' ctx ePoly'Poly.denote' ctx p = 0
                                                                                                                                                                          theorem Int.Internal.Linear.eq_norm_poly (ctx : Context) (p p' : Poly) :
                                                                                                                                                                          Poly.denote' ctx p = Poly.denote' ctx p'Poly.denote' ctx p = 0Poly.denote' ctx p' = 0
                                                                                                                                                                          theorem Int.Internal.Linear.le_norm_poly (ctx : Context) (p p' : Poly) :
                                                                                                                                                                          Poly.denote' ctx p = Poly.denote' ctx p'Poly.denote' ctx p 0Poly.denote' ctx p' 0
                                                                                                                                                                          theorem Int.Internal.Linear.diseq_norm_poly (ctx : Context) (p p' : Poly) :
                                                                                                                                                                          Poly.denote' ctx p = Poly.denote' ctx p'Poly.denote' ctx p 0Poly.denote' ctx p' 0
                                                                                                                                                                          theorem Int.Internal.Linear.dvd_norm_poly (ctx : Context) (d : Int) (p p' : Poly) :
                                                                                                                                                                          Poly.denote' ctx p = Poly.denote' ctx p'd Poly.denote' ctx pd Poly.denote' ctx p'

                                                                                                                                                                          Constraint propagation helper theorems.

                                                                                                                                                                          theorem Int.Internal.Linear.le_of_le' (ctx : Context) (p₁ p₂ : Poly) :
                                                                                                                                                                          le_of_le_cert p₁ p₂ = true∀ (k : Int), Poly.denote' ctx p₁ kPoly.denote' ctx p₂ k
                                                                                                                                                                          theorem Int.Internal.Linear.le_of_le (ctx : Context) (p₁ p₂ : Poly) :
                                                                                                                                                                          le_of_le_cert p₁ p₂ = truePoly.denote' ctx p₁ 0Poly.denote' ctx p₂ 0
                                                                                                                                                                          theorem Int.Internal.Linear.not_le_of_le' (ctx : Context) (p₁ p₂ : Poly) :
                                                                                                                                                                          not_le_of_le_cert p₁ p₂ = true∀ (k : Int), Poly.denote' ctx p₁ k¬Poly.denote' ctx p₂ -k
                                                                                                                                                                          theorem Int.Internal.Linear.not_le_of_le (ctx : Context) (p₁ p₂ : Poly) :
                                                                                                                                                                          not_le_of_le_cert p₁ p₂ = truePoly.denote' ctx p₁ 0¬Poly.denote' ctx p₂ 0
                                                                                                                                                                          theorem Int.Internal.Linear.natCast_sub (x y : Nat) :
                                                                                                                                                                          (x - y) = if y + -1 * x 0 then x + -1 * y else 0

                                                                                                                                                                          Helper theorem for linearizing nonlinear terms

                                                                                                                                                                          noncomputable def Int.Internal.Linear.var_eq_cert (x : Var) (k : Int) (p : Poly) :
                                                                                                                                                                          Equations
                                                                                                                                                                          • One or more equations did not get rendered due to their size.
                                                                                                                                                                          Instances For
                                                                                                                                                                            theorem Int.Internal.Linear.var_eq (ctx : Context) (x : Var) (k : Int) (p : Poly) :
                                                                                                                                                                            var_eq_cert x k p = truePoly.denote' ctx p = 0Var.denote ctx x = k
                                                                                                                                                                            theorem Int.Internal.Linear.of_var_eq_mul (ctx : Context) (x : Var) (k : Int) (y : Var) (p : Poly) :
                                                                                                                                                                            of_var_eq_mul_cert x k y p = trueVar.denote ctx x = k * Var.denote ctx yPoly.denote' ctx p = 0
                                                                                                                                                                            theorem Int.Internal.Linear.of_var_eq_var (ctx : Context) (x y : Var) (p : Poly) :
                                                                                                                                                                            of_var_eq_var_cert x y p = trueVar.denote ctx x = Var.denote ctx yPoly.denote' ctx p = 0
                                                                                                                                                                            theorem Int.Internal.Linear.of_var_eq (ctx : Context) (x : Var) (k : Int) (p : Poly) :
                                                                                                                                                                            of_var_eq_cert x k p = trueVar.denote ctx x = kPoly.denote' ctx p = 0
                                                                                                                                                                            theorem Int.Internal.Linear.mul_eq_kk (a b k₁ k₂ k : Int) (h₁ : a = k₁) (h₂ : b = k₂) (h₃ : (k₁ * k₂ == k) = true) :
                                                                                                                                                                            a * b = k
                                                                                                                                                                            theorem Int.Internal.Linear.mul_eq_kkx (a b k₁ k₂ c k : Int) (h₁ : a = k₁) (h₂ : b = k₂ * c) (h₃ : (k₁ * k₂ == k) = true) :
                                                                                                                                                                            a * b = k * c
                                                                                                                                                                            theorem Int.Internal.Linear.mul_eq_kxk (a b k₁ c k₂ k : Int) (h₁ : a = k₁ * c) (h₂ : b = k₂) (h₃ : (k₁ * k₂ == k) = true) :
                                                                                                                                                                            a * b = k * c
                                                                                                                                                                            theorem Int.Internal.Linear.mul_eq_zero_left (a b : Int) (h : a = 0) :
                                                                                                                                                                            a * b = 0
                                                                                                                                                                            theorem Int.Internal.Linear.mul_eq_zero_right (a b : Int) (h : b = 0) :
                                                                                                                                                                            a * b = 0
                                                                                                                                                                            theorem Int.Internal.Linear.div_eq (a b k : Int) (h : b = k) :
                                                                                                                                                                            a / b = a / k
                                                                                                                                                                            theorem Int.Internal.Linear.mod_eq (a b k : Int) (h : b = k) :
                                                                                                                                                                            a % b = a % k
                                                                                                                                                                            theorem Int.Internal.Linear.div_eq' (a b b' k : Int) (h₁ : b = b') (h₂ : (k == a / b') = true) :
                                                                                                                                                                            a / b = k
                                                                                                                                                                            theorem Int.Internal.Linear.mod_eq' (a b b' k : Int) (h₁ : b = b') (h₂ : (k == a % b') = true) :
                                                                                                                                                                            a % b = k
                                                                                                                                                                            theorem Int.Internal.Linear.pow_eq (a : Int) (b : Nat) (a' b' k : Int) (h₁ : a = a') (h₂ : b = b') (h₃ : (k == a' ^ b'.toNat) = true) :
                                                                                                                                                                            a ^ b = k
                                                                                                                                                                            theorem Int.not_le_eq (a b : Int) :
                                                                                                                                                                            (¬a b) = (b + 1 a)
                                                                                                                                                                            theorem Int.not_ge_eq (a b : Int) :
                                                                                                                                                                            (¬a b) = (a + 1 b)
                                                                                                                                                                            theorem Int.not_lt_eq (a b : Int) :
                                                                                                                                                                            (¬a < b) = (b a)
                                                                                                                                                                            theorem Int.not_gt_eq (a b : Int) :
                                                                                                                                                                            (¬a > b) = (a b)