Documentation

Mathlib.ModelTheory.Arithmetic.Presburger.Basic

Presburger arithmetic #

This file defines the first-order language of Presburger arithmetic as (0,1,+).

Main Definitions #

TODO #

The type of Presburger arithmetic functions, defined as (0, 1, +).

Instances For
    def FirstOrder.instDecidableEqPresburgerFunc.decEq {a✝ : } (x✝ x✝¹ : presburgerFunc a✝) :
    Decidable (x✝ = x✝¹)
    Equations
      Instances For

        The language of Presburger arithmetic, defined as (0, 1, +).

        Equations
          Instances For
            @[simp]
            theorem FirstOrder.Language.presburger.natCast_succ {α : Type u_1} (n : ) :
            ↑(n + 1) = n + 1
            @[simp]
            theorem FirstOrder.Language.presburger.succ_nsmul {α : Type u_1} {t : presburger.Term α} {n : } :
            (n + 1) t = n t + t
            noncomputable def FirstOrder.Language.presburger.sum {α : Type u_1} {β : Type u_2} (s : Finset β) (f : βpresburger.Term α) :

            Summation over a finite set of terms in Presburger arithmetic.

            It is defined via choice, so the result only makes sense when the structure satisfies commutativity (see realize_sum).

            Equations
              Instances For
                @[simp]
                theorem FirstOrder.Language.presburger.realize_zero {α : Type u_1} {M : Type u_2} {v : αM} [Zero M] [One M] [Add M] :
                @[simp]
                theorem FirstOrder.Language.presburger.realize_one {α : Type u_1} {M : Type u_2} {v : αM} [Zero M] [One M] [Add M] :
                @[simp]
                theorem FirstOrder.Language.presburger.realize_add {α : Type u_1} {t₁ t₂ : presburger.Term α} {M : Type u_2} {v : αM} [Zero M] [One M] [Add M] :
                Term.realize v (t₁ + t₂) = Term.realize v t₁ + Term.realize v t₂
                @[simp]
                theorem FirstOrder.Language.presburger.realize_natCast {α : Type u_1} {M : Type u_2} {v : αM} [AddMonoidWithOne M] {n : } :
                Term.realize v n = n
                @[simp]
                theorem FirstOrder.Language.presburger.realize_nsmul {α : Type u_1} {t : presburger.Term α} {M : Type u_2} {v : αM} [AddMonoidWithOne M] {n : } :
                @[simp]
                theorem FirstOrder.Language.presburger.realize_sum {α : Type u_1} {M : Type u_2} {v : αM} [AddCommMonoidWithOne M] {β : Type u_3} {s : Finset β} {f : βpresburger.Term α} :
                Term.realize v (sum s f) = is, Term.realize v (f i)