Documentation

Foundation.FirstOrder.Basic.Operator

Equations
  • LO.FirstOrder.Semiterm.Operator.equiv = { toFun := LO.FirstOrder.Semiterm.Operator.term, invFun := LO.FirstOrder.Semiterm.Operator.mk, left_inv := , right_inv := }
Instances For
    Equations
    Instances For
      Equations
      • LO.FirstOrder.Semiterm.Operator.instCoeConst = { coe := LO.FirstOrder.Semiterm.Operator.const }
      Equations
      • o.comp w = { term := o.operator fun (x : Fin k) => (w x).term }
      Instances For
        @[simp]
        theorem LO.FirstOrder.Semiterm.Operator.operator_comp {L : LO.FirstOrder.Language} {k : } {l : } {ξ : Type u_1} {n : } (o : LO.FirstOrder.Semiterm.Operator L k) (w : Fin kLO.FirstOrder.Semiterm.Operator L l) (v : Fin lLO.FirstOrder.Semiterm L ξ n) :
        (o.comp w).operator v = o.operator fun (x : Fin k) => (w x).operator v
        theorem LO.FirstOrder.Semiterm.Operator.bv_operator {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } {k : } (o : LO.FirstOrder.Semiterm.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ (n + 1)) :
        (o.operator v).bv = o.term.bv.biUnion fun (i : Fin k) => (v i).bv
        theorem LO.FirstOrder.Semiterm.Operator.positive_operator_iff {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } {k : } {o : LO.FirstOrder.Semiterm.Operator L k} {v : Fin kLO.FirstOrder.Semiterm L ξ (n + 1)} :
        (o.operator v).Positive io.term.bv, (v i).Positive
        Equations
        • f.foldr z [] = z
        • f.foldr z (o :: os) = f.comp ![f.foldr z os, o]
        Instances For
          @[simp]
          theorem LO.FirstOrder.Semiterm.Operator.operator_foldr_cons {L : LO.FirstOrder.Language} {k : } {ξ : Type u_1} {n : } (f : LO.FirstOrder.Semiterm.Operator L 2) (z : LO.FirstOrder.Semiterm.Operator L k) (o : LO.FirstOrder.Semiterm.Operator L k) (os : List (LO.FirstOrder.Semiterm.Operator L k)) (v : Fin kLO.FirstOrder.Semiterm L ξ n) :
          (f.foldr z (o :: os)).operator v = f.operator ![(f.foldr z os).operator v, o.operator v]
          Instances
            Equations
            Equations
            Equations
            • LO.FirstOrder.Semiterm.Operator.instAddOfAdd = { add := { term := LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Add.add LO.FirstOrder.Semiterm.bvar } }
            Equations
            • LO.FirstOrder.Semiterm.Operator.instMulOfMul = { mul := { term := LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Mul.mul LO.FirstOrder.Semiterm.bvar } }
            Equations
            • LO.FirstOrder.Semiterm.Operator.instExpOfExp = { exp := { term := LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Exp.exp LO.FirstOrder.Semiterm.bvar } }
            Equations
            theorem LO.FirstOrder.Semiterm.Operator.Zero.term_eq {L : LO.FirstOrder.Language} [L.Zero] :
            op(0).term = LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Zero.zero ![]
            theorem LO.FirstOrder.Semiterm.Operator.Add.term_eq {L : LO.FirstOrder.Language} [L.Add] :
            op(+).term = LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Add.add LO.FirstOrder.Semiterm.bvar
            theorem LO.FirstOrder.Semiterm.Operator.Mul.term_eq {L : LO.FirstOrder.Language} [L.Mul] :
            op(*).term = LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Mul.mul LO.FirstOrder.Semiterm.bvar
            theorem LO.FirstOrder.Semiterm.Operator.Exp.term_eq {L : LO.FirstOrder.Language} [L.Exp] :
            LO.FirstOrder.Semiterm.Operator.Exp.exp.term = LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Exp.exp LO.FirstOrder.Semiterm.bvar
            theorem LO.FirstOrder.Semiterm.Operator.Star.term_eq {L : LO.FirstOrder.Language} [L.Star] :
            LO.FirstOrder.Semiterm.Operator.Star.star.term = LO.FirstOrder.Semiterm.func LO.FirstOrder.Language.Star.star ![]
            @[simp]
            theorem LO.FirstOrder.Semiterm.Operator.Add.positive_iff {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.Add] (t : LO.FirstOrder.Semiterm L ξ (n + 1)) (u : LO.FirstOrder.Semiterm L ξ (n + 1)) :
            (op(+).operator ![t, u]).Positive t.Positive u.Positive
            @[simp]
            theorem LO.FirstOrder.Semiterm.Operator.Mul.positive_iff {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.Mul] (t : LO.FirstOrder.Semiterm L ξ (n + 1)) (u : LO.FirstOrder.Semiterm L ξ (n + 1)) :
            (op(*).operator ![t, u]).Positive t.Positive u.Positive
            @[simp]
            theorem LO.FirstOrder.Semiterm.Operator.Exp.positive_iff {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.Exp] (t : LO.FirstOrder.Semiterm L ξ (n + 1)) :
            (LO.FirstOrder.Semiterm.Operator.Exp.exp.operator ![t]).Positive t.Positive
            @[simp]
            theorem LO.FirstOrder.Semiterm.Operator.npow_positive_iff {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [LO.FirstOrder.Semiterm.Operator.One L] [L.Mul] (t : LO.FirstOrder.Semiterm L ξ (n + 1)) (k : ) :
            ((LO.FirstOrder.Semiterm.Operator.npow L k).operator ![t]).Positive k = 0 t.Positive
            Equations
            • LO.FirstOrder.Semiterm.Operator.GoedelNumber.instGoedelQuote = { quote := LO.FirstOrder.Semiterm.Operator.GoedelNumber.goedelNumber' }
            @[simp]
            theorem LO.FirstOrder.Semiterm.complexity_add {L : LO.FirstOrder.Language} [L.Add] {ξ : Type u_1} {n : } (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
            (op(+).operator ![t, u]).complexity = max t.complexity u.complexity + 1
            @[simp]
            theorem LO.FirstOrder.Semiterm.complexity_mul {L : LO.FirstOrder.Language} [L.Mul] {ξ : Type u_1} {n : } (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
            (op(*).operator ![t, u]).complexity = max t.complexity u.complexity + 1
            Equations
            Instances For
              theorem LO.FirstOrder.Semiterm.val_operator {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} :
              ∀ {n : } {e : Fin nM} {ξ : Type u_1} {ε : ξM} {k : } (o : LO.FirstOrder.Semiterm.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ n), LO.FirstOrder.Semiterm.val s e ε (o.operator v) = o.val fun (x : Fin k) => LO.FirstOrder.Semiterm.val s e ε (v x)
              @[simp]
              theorem LO.FirstOrder.Semiterm.val_operator₁ {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} :
              ∀ {n : } {e : Fin nM} {ξ : Type u_1} {ε : ξM} {t : LO.FirstOrder.Semiterm L ξ n} (o : LO.FirstOrder.Semiterm.Operator L 1), LO.FirstOrder.Semiterm.val s e ε (o.operator ![t]) = o.val ![LO.FirstOrder.Semiterm.val s e ε t]
              @[simp]
              theorem LO.FirstOrder.Semiterm.val_operator₂ {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} :
              ∀ {n : } {e : Fin nM} {ξ : Type u_1} {ε : ξM} (o : LO.FirstOrder.Semiterm.Operator L 2) (t u : LO.FirstOrder.Semiterm L ξ n), LO.FirstOrder.Semiterm.val s e ε (o.operator ![t, u]) = o.val ![LO.FirstOrder.Semiterm.val s e ε t, LO.FirstOrder.Semiterm.val s e ε u]
              theorem LO.FirstOrder.Semiterm.Operator.val_comp {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {k : } {m : } (o₁ : LO.FirstOrder.Semiterm.Operator L k) (o₂ : Fin kLO.FirstOrder.Semiterm.Operator L m) (v : Fin mM) :
              (o₁.comp o₂).val v = o₁.val fun (i : Fin k) => (o₂ i).val v
              Equations
              Instances For
                Equations
                • LO.FirstOrder.Semiformula.Operator.instCoeConst = { coe := LO.FirstOrder.Semiformula.Operator.const }
                Equations
                • o.comp w = { sentence := o.operator fun (x : Fin k) => (w x).term }
                Instances For
                  theorem LO.FirstOrder.Semiformula.Operator.operator_comp {L : LO.FirstOrder.Language} {k : } {l : } {ξ : Type u_1} {n : } (o : LO.FirstOrder.Semiformula.Operator L k) (w : Fin kLO.FirstOrder.Semiterm.Operator L l) (v : Fin lLO.FirstOrder.Semiterm L ξ n) :
                  (o.comp w).operator v = o.operator fun (x : Fin k) => (w x).operator v
                  Equations
                  • o₁.and o₂ = { sentence := o₁.sentence o₂.sentence }
                  Instances For
                    Equations
                    • o₁.or o₂ = { sentence := o₁.sentence o₂.sentence }
                    Instances For
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.operator_and {L : LO.FirstOrder.Language} {k : } {ξ : Type u_1} {n : } (o₁ : LO.FirstOrder.Semiformula.Operator L k) (o₂ : LO.FirstOrder.Semiformula.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ n) :
                      (o₁.and o₂).operator v = o₁.operator v o₂.operator v
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.operator_or {L : LO.FirstOrder.Language} {k : } {ξ : Type u_1} {n : } (o₁ : LO.FirstOrder.Semiformula.Operator L k) (o₂ : LO.FirstOrder.Semiformula.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ n) :
                      (o₁.or o₂).operator v = o₁.operator v o₂.operator v
                      Equations
                      • LO.FirstOrder.Semiformula.Operator.instEqOfEq = { eq := { sentence := LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.Eq.eq LO.FirstOrder.Semiterm.bvar } }
                      Equations
                      • LO.FirstOrder.Semiformula.Operator.instLTOfLT = { lt := { sentence := LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.LT.lt LO.FirstOrder.Semiterm.bvar } }
                      theorem LO.FirstOrder.Semiformula.Operator.Eq.sentence_eq {L : LO.FirstOrder.Language} [L.Eq] :
                      op(=).sentence = LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.Eq.eq LO.FirstOrder.Semiterm.bvar
                      theorem LO.FirstOrder.Semiformula.Operator.LT.sentence_eq {L : LO.FirstOrder.Language} [L.LT] :
                      op(<).sentence = LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.LT.lt LO.FirstOrder.Semiterm.bvar
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.Eq.equal_inj {L : LO.FirstOrder.Language} {ξ₂ : Type u_1} {n₂ : } [L.Eq] {t₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {t₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} :
                      op(=).operator ![t₁, u₁] = op(=).operator ![t₂, u₂] t₁ = t₂ u₁ = u₂
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.LT.lt_inj {L : LO.FirstOrder.Language} {ξ₂ : Type u_1} {n₂ : } [L.LT] {t₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {t₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} :
                      op(<).operator ![t₁, u₁] = op(<).operator ![t₂, u₂] t₁ = t₂ u₁ = u₂
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.LE.le_inj {L : LO.FirstOrder.Language} {ξ₂ : Type u_1} {n₂ : } [L.Eq] [L.LT] {t₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {t₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₁ : LO.FirstOrder.Semiterm L ξ₂ n₂} {u₂ : LO.FirstOrder.Semiterm L ξ₂ n₂} :
                      op(≤).operator ![t₁, u₁] = op(≤).operator ![t₂, u₂] t₁ = t₂ u₁ = u₂
                      theorem LO.FirstOrder.Semiformula.Operator.lt_def {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.LT] (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      op(<).operator ![t, u] = LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.LT.lt ![t, u]
                      theorem LO.FirstOrder.Semiformula.Operator.eq_def {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.Eq] (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      op(=).operator ![t, u] = LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.Eq.eq ![t, u]
                      theorem LO.FirstOrder.Semiformula.Operator.le_def {L : LO.FirstOrder.Language} {ξ : Type u_1} {n : } [L.Eq] [L.LT] (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      op(≤).operator ![t, u] = LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.Eq.eq ![t, u] LO.FirstOrder.Semiformula.rel LO.FirstOrder.Language.LT.lt ![t, u]
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.Eq.open {L : LO.FirstOrder.Language} [L.Eq] {ξ : Type u_1} {n : } (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      (op(=).operator ![t, u]).Open
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.LT.open {L : LO.FirstOrder.Language} [L.LT] {ξ : Type u_1} {n : } (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      (op(<).operator ![t, u]).Open
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.Operator.LE.open {L : LO.FirstOrder.Language} [L.Eq] [L.LT] {ξ : Type u_1} {n : } (t : LO.FirstOrder.Semiterm L ξ n) (u : LO.FirstOrder.Semiterm L ξ n) :
                      (op(≤).operator ![t, u]).Open
                      Equations
                      Instances For
                        @[simp]
                        theorem LO.FirstOrder.Semiformula.val_operator_and {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {k : } {o₁ : LO.FirstOrder.Semiformula.Operator L k} {o₂ : LO.FirstOrder.Semiformula.Operator L k} {v : Fin kM} :
                        (o₁.and o₂).val v o₁.val v o₂.val v
                        @[simp]
                        theorem LO.FirstOrder.Semiformula.val_operator_or {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {k : } {o₁ : LO.FirstOrder.Semiformula.Operator L k} {o₂ : LO.FirstOrder.Semiformula.Operator L k} {v : Fin kM} :
                        (o₁.or o₂).val v o₁.val v o₂.val v
                        theorem LO.FirstOrder.Semiformula.eval_operator {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {ξ : Type u_1} {n : } {e : Fin nM} {ε : ξM} {k : } {o : LO.FirstOrder.Semiformula.Operator L k} {v : Fin kLO.FirstOrder.Semiterm L ξ n} :
                        (LO.FirstOrder.Semiformula.Eval s e ε) (o.operator v) o.val fun (i : Fin k) => LO.FirstOrder.Semiterm.val s e ε (v i)
                        @[simp]
                        theorem LO.FirstOrder.Semiformula.eval_operator₁ {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {ξ : Type u_1} {n : } {e : Fin nM} {ε : ξM} {o : LO.FirstOrder.Semiformula.Operator L 1} {t : LO.FirstOrder.Semiterm L ξ n} :
                        (LO.FirstOrder.Semiformula.Eval s e ε) (o.operator ![t]) o.val ![LO.FirstOrder.Semiterm.val s e ε t]
                        @[simp]
                        theorem LO.FirstOrder.Semiformula.eval_operator₂ {L : LO.FirstOrder.Language} {M : Type w} {s : LO.FirstOrder.Structure L M} {ξ : Type u_1} {n : } {e : Fin nM} {ε : ξM} {o : LO.FirstOrder.Semiformula.Operator L 2} {t₁ : LO.FirstOrder.Semiterm L ξ n} {t₂ : LO.FirstOrder.Semiterm L ξ n} :
                        (LO.FirstOrder.Semiformula.Eval s e ε) (o.operator ![t₁, t₂]) o.val ![LO.FirstOrder.Semiterm.val s e ε t₁, LO.FirstOrder.Semiterm.val s e ε t₂]
                        theorem LO.FirstOrder.Rew.operator {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (o : LO.FirstOrder.Semiterm.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator v) = o.operator fun (i : Fin k) => ω (v i)
                        theorem LO.FirstOrder.Rew.operator' {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (o : LO.FirstOrder.Semiterm.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator v) = o.operator (ω v)
                        @[simp]
                        theorem LO.FirstOrder.Rew.finitary0 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiterm.Operator L 0) (v : Fin 0LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator v) = o.operator ![]
                        @[simp]
                        theorem LO.FirstOrder.Rew.finitary1 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiterm.Operator L 1) (t : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator ![t]) = o.operator ![ω t]
                        @[simp]
                        theorem LO.FirstOrder.Rew.finitary2 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiterm.Operator L 2) (t₁ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator ![t₁, t₂]) = o.operator ![ω t₁, ω t₂]
                        @[simp]
                        theorem LO.FirstOrder.Rew.finitary3 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiterm.Operator L 3) (t₁ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₃ : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω (o.operator ![t₁, t₂, t₃]) = o.operator ![ω t₁, ω t₂, ω t₃]
                        @[simp]
                        theorem LO.FirstOrder.Rew.const {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (c : LO.FirstOrder.Semiterm.Const L) :
                        theorem LO.FirstOrder.Rew.hom_operator {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (o : LO.FirstOrder.Semiformula.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator v) = o.operator fun (i : Fin k) => ω (v i)
                        theorem LO.FirstOrder.Rew.hom_operator' {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) {k : } (o : LO.FirstOrder.Semiformula.Operator L k) (v : Fin kLO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator v) = o.operator (ω v)
                        @[simp]
                        theorem LO.FirstOrder.Rew.hom_finitary0 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiformula.Operator L 0) (v : Fin 0LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator v) = o.operator ![]
                        @[simp]
                        theorem LO.FirstOrder.Rew.hom_finitary1 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiformula.Operator L 1) (t : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator ![t]) = o.operator ![ω t]
                        @[simp]
                        theorem LO.FirstOrder.Rew.hom_finitary2 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiformula.Operator L 2) (t₁ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator ![t₁, t₂]) = o.operator ![ω t₁, ω t₂]
                        @[simp]
                        theorem LO.FirstOrder.Rew.hom_finitary3 {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) (o : LO.FirstOrder.Semiformula.Operator L 3) (t₁ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₂ : LO.FirstOrder.Semiterm L ξ₁ n₁) (t₃ : LO.FirstOrder.Semiterm L ξ₁ n₁) :
                        ω.hom (o.operator ![t₁, t₂, t₃]) = o.operator ![ω t₁, ω t₂, ω t₃]
                        @[simp]
                        theorem LO.FirstOrder.Rew.eq_equal_iff {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) [L.Eq] {p : LO.FirstOrder.Semiformula L ξ₁ n₁} {t : LO.FirstOrder.Semiterm L ξ₂ n₂} {u : LO.FirstOrder.Semiterm L ξ₂ n₂} :
                        ω.hom p = op(=).operator ![t, u] ∃ (t' : LO.FirstOrder.Semiterm L ξ₁ n₁) (u' : LO.FirstOrder.Semiterm L ξ₁ n₁), ω t' = t ω u' = u p = op(=).operator ![t', u']
                        theorem LO.FirstOrder.Rew.eq_lt_iff {L : LO.FirstOrder.Language} {ξ₁ : Type v₁} {ξ₂ : Type v₂} {n₁ : } {n₂ : } (ω : LO.FirstOrder.Rew L ξ₁ n₁ ξ₂ n₂) [L.LT] {p : LO.FirstOrder.Semiformula L ξ₁ n₁} {t : LO.FirstOrder.Semiterm L ξ₂ n₂} {u : LO.FirstOrder.Semiterm L ξ₂ n₂} :
                        ω.hom p = op(<).operator ![t, u] ∃ (t' : LO.FirstOrder.Semiterm L ξ₁ n₁) (u' : LO.FirstOrder.Semiterm L ξ₁ n₁), ω t' = t ω u' = u p = op(<).operator ![t', u']
                        • add : ∀ (a b : M), op(+).val ![a, b] = a + b
                        Instances
                          • mul : ∀ (a b : M), op(*).val ![a, b] = a * b
                          Instances
                            • exp : ∀ (a : M), LO.FirstOrder.Semiterm.Operator.Exp.exp.val ![a] = exp a
                            Instances
                              @[simp]
                              theorem LO.FirstOrder.Structure.Exp.exp {L : LO.FirstOrder.Language} {M : Type u_1} [LO.FirstOrder.Structure L M] [LO.FirstOrder.Semiterm.Operator.Exp L] [Exp M] [self : LO.FirstOrder.Structure.Exp L M] (a : M) :
                              LO.FirstOrder.Semiterm.Operator.Exp.exp.val ![a] = exp a
                              • lt : ∀ (a b : M), op(<).val ![a, b] a < b
                              Instances
                                @[simp]
                                @[simp]
                                theorem LO.FirstOrder.Structure.add_eq_of_lang {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] [L.Add] [Add M] [LO.FirstOrder.Structure.Add L M] {v : Fin 2M} :
                                LO.FirstOrder.Structure.func LO.FirstOrder.Language.Add.add v = v 0 + v 1
                                @[simp]
                                theorem LO.FirstOrder.Structure.mul_eq_of_lang {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] [L.Mul] [Mul M] [LO.FirstOrder.Structure.Mul L M] {v : Fin 2M} :
                                LO.FirstOrder.Structure.func LO.FirstOrder.Language.Mul.mul v = v 0 * v 1
                                @[simp]
                                theorem LO.FirstOrder.Structure.exp_eq_of_lang {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] [L.Exp] [Exp M] [LO.FirstOrder.Structure.Exp L M] {v : Fin 1M} :
                                LO.FirstOrder.Structure.func LO.FirstOrder.Language.Exp.exp v = exp (v 0)
                                @[simp]
                                theorem LO.FirstOrder.Structure.eq_lang {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] [L.Eq] [LO.FirstOrder.Structure.Eq L M] {v : Fin 2M} :
                                LO.FirstOrder.Structure.rel LO.FirstOrder.Language.Eq.eq v v 0 = v 1
                                @[simp]
                                theorem LO.FirstOrder.Structure.lt_lang {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] [L.LT] [LT M] [LO.FirstOrder.Structure.LT L M] {v : Fin 2M} :
                                LO.FirstOrder.Structure.rel LO.FirstOrder.Language.LT.lt v v 0 < v 1
                                theorem LO.FirstOrder.Structure.operator_val_ofEquiv_iff {L : LO.FirstOrder.Language} (M : Type u_1) [LO.FirstOrder.Structure L M] {N : Type u_2} (φ : M N) {k : } {o : LO.FirstOrder.Semiformula.Operator L k} {v : Fin kN} :
                                o.val v o.val (φ.symm v)