Documentation

Mathlib.ModelTheory.Semantics

Basics on First-Order Semantics #

This file defines the interpretations of first-order terms, formulas, sentences, and theories in a style inspired by the Flypitch project.

Main Definitions #

Main Results #

Implementation Notes #

References #

For the Flypitch project:

def FirstOrder.Language.Term.realize {L : Language} {M : Type w} [L.Structure M] {α : Type u'} (v : αM) (_t : L.Term α) :
M

A term t with variables indexed by α can be evaluated by giving a value to each variable.

Equations
    Instances For
      @[simp]
      theorem FirstOrder.Language.Term.realize_var {L : Language} {M : Type w} [L.Structure M] {α : Type u'} (v : αM) (k : α) :
      realize v (var k) = v k
      @[simp]
      theorem FirstOrder.Language.Term.realize_func {L : Language} {M : Type w} [L.Structure M] {α : Type u'} (v : αM) {n : } (f : L.Functions n) (ts : Fin nL.Term α) :
      realize v (func f ts) = Structure.funMap f fun (i : Fin n) => realize v (ts i)
      @[simp]
      theorem FirstOrder.Language.Term.realize_function_term {L : Language} {M : Type w} [L.Structure M] {n : } (v : Fin nM) (f : L.Functions n) :
      @[simp]
      theorem FirstOrder.Language.Term.realize_relabel {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {t : L.Term α} {g : αβ} {v : βM} :
      realize v (relabel g t) = realize (v g) t
      @[simp]
      theorem FirstOrder.Language.Term.realize_liftAt {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n n' m : } {t : L.Term (α Fin n)} {v : α Fin (n + n')M} :
      realize v (liftAt n' m t) = realize (v Sum.map id fun (i : Fin n) => if i < m then Fin.castAdd n' i else i.addNat n') t
      @[simp]
      theorem FirstOrder.Language.Term.realize_constants {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {c : L.Constants} {v : αM} :
      realize v c.term = c
      @[simp]
      theorem FirstOrder.Language.Term.realize_functions_apply₁ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {f : L.Functions 1} {t : L.Term α} {v : αM} :
      @[simp]
      theorem FirstOrder.Language.Term.realize_functions_apply₂ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {f : L.Functions 2} {t₁ t₂ : L.Term α} {v : αM} :
      realize v (f.apply₂ t₁ t₂) = Structure.funMap f ![realize v t₁, realize v t₂]
      theorem FirstOrder.Language.Term.realize_con {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {A : Set M} {a : A} {v : αM} :
      realize v (L.con a).term = a
      @[simp]
      theorem FirstOrder.Language.Term.realize_subst {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {t : L.Term α} {tf : αL.Term β} {v : βM} :
      realize v (t.subst tf) = realize (fun (a : α) => realize v (tf a)) t
      theorem FirstOrder.Language.Term.realize_restrictVar {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [DecidableEq α] {t : L.Term α} {f : { x : α // x t.varFinset }β} {v : βM} (v' : αM) (hv' : ∀ (a : { x : α // x t.varFinset }), v (f a) = v' a) :
      @[simp]
      theorem FirstOrder.Language.Term.realize_restrictVar' {L : Language} {M : Type w} [L.Structure M] {α : Type u'} [DecidableEq α] {t : L.Term α} {s : Set α} (h : t.varFinset s) {v : αM} :

      A special case of realize_restrictVar, included because we can add the simp attribute to it

      theorem FirstOrder.Language.Term.realize_restrictVarLeft {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [DecidableEq α] {γ : Type u_4} {t : L.Term (α γ)} {f : { x : α // x t.varFinsetLeft }β} {xs : β γM} (xs' : αM) (hxs' : ∀ (a : { x : α // x t.varFinsetLeft }), xs (Sum.inl (f a)) = xs' a) :
      @[simp]
      theorem FirstOrder.Language.Term.realize_restrictVarLeft' {L : Language} {M : Type w} [L.Structure M] {α : Type u'} [DecidableEq α] {γ : Type u_4} {t : L.Term (α γ)} {s : Set α} (h : t.varFinsetLeft s) {v : αM} {xs : γM} :

      A special case of realize_restrictVarLeft, included because we can add the simp attribute to it

      @[simp]
      theorem FirstOrder.Language.Term.realize_constantsToVars {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] {t : (L.withConstants α).Term β} {v : βM} :
      realize (Sum.elim (fun (a : α) => (L.con a)) v) t.constantsToVars = realize v t
      @[simp]
      theorem FirstOrder.Language.Term.realize_varsToConstants {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] {t : L.Term (α β)} {v : βM} :
      realize v t.varsToConstants = realize (Sum.elim (fun (a : α) => (L.con a)) v) t
      theorem FirstOrder.Language.Term.realize_constantsVarsEquivLeft {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] {n : } {t : (L.withConstants α).Term (β Fin n)} {v : βM} {xs : Fin nM} :
      realize (Sum.elim (Sum.elim (fun (a : α) => (L.con a)) v) xs) (constantsVarsEquivLeft t) = realize (Sum.elim v xs) t
      @[simp]
      theorem FirstOrder.Language.LHom.realize_onTerm {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] (t : L.Term α) (v : αM) :
      @[simp]
      theorem FirstOrder.Language.HomClass.realize_term {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {α : Type u'} {F : Type u_4} [FunLike F M N] [L.HomClass F M N] (g : F) {t : L.Term α} {v : αM} :
      Term.realize (g v) t = g (Term.realize v t)
      def FirstOrder.Language.BoundedFormula.Realize {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } (_f : L.BoundedFormula α l) (_v : αM) (_xs : Fin lM) :

      A bounded formula can be evaluated as true or false by giving values to each free variable.

      Equations
        Instances For
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_bot {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} :
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_not {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {φ : L.BoundedFormula α l} {v : αM} {xs : Fin lM} :
          φ.not.Realize v xs ¬φ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_bdEqual {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} (t₁ t₂ : L.Term (α Fin l)) :
          (t₁.bdEqual t₂).Realize v xs Term.realize (Sum.elim v xs) t₁ = Term.realize (Sum.elim v xs) t₂
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_top {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} :
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_inf {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {φ ψ : L.BoundedFormula α l} {v : αM} {xs : Fin lM} :
          (φψ).Realize v xs φ.Realize v xs ψ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_foldr_inf {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } (l : List (L.BoundedFormula α n)) (v : αM) (xs : Fin nM) :
          (List.foldr (fun (x1 x2 : L.BoundedFormula α n) => x1x2) l).Realize v xs φl, φ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_imp {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {φ ψ : L.BoundedFormula α l} {v : αM} {xs : Fin lM} :
          (φ.imp ψ).Realize v xs φ.Realize v xsψ.Realize v xs
          theorem FirstOrder.Language.BoundedFormula.realize_foldr_imp {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {k : } (l : List (L.BoundedFormula α k)) (f : L.BoundedFormula α k) (v : αM) (xs : Fin kM) :
          (List.foldr imp f l).Realize v xs = ((∀ il, i.Realize v xs)f.Realize v xs)

          List.foldr on BoundedFormula.imp gives a big "And" of input conditions.

          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_rel {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} {k : } {R : L.Relations k} {ts : Fin kL.Term (α Fin l)} :
          (R.boundedFormula ts).Realize v xs Structure.RelMap R fun (i : Fin k) => Term.realize (Sum.elim v xs) (ts i)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_rel₁ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} {R : L.Relations 1} {t : L.Term (α Fin l)} :
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_rel₂ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {v : αM} {xs : Fin lM} {R : L.Relations 2} {t₁ t₂ : L.Term (α Fin l)} :
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_sup {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {φ ψ : L.BoundedFormula α l} {v : αM} {xs : Fin lM} :
          (φψ).Realize v xs φ.Realize v xs ψ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_foldr_sup {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } (l : List (L.BoundedFormula α n)) (v : αM) (xs : Fin nM) :
          (List.foldr (fun (x1 x2 : L.BoundedFormula α n) => x1x2) l).Realize v xs φl, φ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_all {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {θ : L.BoundedFormula α l.succ} {v : αM} {xs : Fin lM} :
          θ.all.Realize v xs ∀ (a : M), θ.Realize v (Fin.snoc xs a)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_ex {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {θ : L.BoundedFormula α l.succ} {v : αM} {xs : Fin lM} :
          θ.ex.Realize v xs ∃ (a : M), θ.Realize v (Fin.snoc xs a)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_iff {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {l : } {φ ψ : L.BoundedFormula α l} {v : αM} {xs : Fin lM} :
          (φ.iff ψ).Realize v xs (φ.Realize v xs ψ.Realize v xs)
          theorem FirstOrder.Language.BoundedFormula.realize_castLE_of_eq {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {m n : } (h : m = n) {h' : m n} {φ : L.BoundedFormula α m} {v : αM} {xs : Fin nM} :
          (castLE h' φ).Realize v xs φ.Realize v (xs Fin.cast h)
          theorem FirstOrder.Language.BoundedFormula.realize_mapTermRel_id {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [L'.Structure M] {ft : (n : ) → L.Term (α Fin n)L'.Term (β Fin n)} {fr : (n : ) → L.Relations nL'.Relations n} {n : } {φ : L.BoundedFormula α n} {v : αM} {v' : βM} {xs : Fin nM} (h1 : ∀ (n : ) (t : L.Term (α Fin n)) (xs : Fin nM), Term.realize (Sum.elim v' xs) (ft n t) = Term.realize (Sum.elim v xs) t) (h2 : ∀ (n : ) (R : L.Relations n) (x : Fin nM), Structure.RelMap (fr n R) x = Structure.RelMap R x) :
          (mapTermRel ft fr (fun (x : ) => id) φ).Realize v' xs φ.Realize v xs
          theorem FirstOrder.Language.BoundedFormula.realize_mapTermRel_add_castLe {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [L'.Structure M] {k : } {ft : (n : ) → L.Term (α Fin n)L'.Term (β Fin (k + n))} {fr : (n : ) → L.Relations nL'.Relations n} {n : } {φ : L.BoundedFormula α n} (v : {n : } → (Fin (k + n)M)αM) {v' : βM} (xs : Fin (k + n)M) (h1 : ∀ (n : ) (t : L.Term (α Fin n)) (xs' : Fin (k + n)M), Term.realize (Sum.elim v' xs') (ft n t) = Term.realize (Sum.elim (v xs') (xs' Fin.natAdd k)) t) (h2 : ∀ (n : ) (R : L.Relations n) (x : Fin nM), Structure.RelMap (fr n R) x = Structure.RelMap R x) (hv : ∀ (n : ) (xs : Fin (k + n)M) (x : M), v (Fin.snoc xs x) = v xs) :
          (mapTermRel ft fr (fun (x : ) => castLE ) φ).Realize v' xs φ.Realize (v xs) (xs Fin.natAdd k)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_relabel {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {m n : } {φ : L.BoundedFormula α n} {g : αβ Fin m} {v : βM} {xs : Fin (m + n)M} :
          (relabel g φ).Realize v xs φ.Realize (Sum.elim v (xs Fin.castAdd n) g) (xs Fin.natAdd m)
          theorem FirstOrder.Language.BoundedFormula.realize_liftAt {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n n' m : } {φ : L.BoundedFormula α n} {v : αM} {xs : Fin (n + n')M} (hmn : m + n' n + 1) :
          (liftAt n' m φ).Realize v xs φ.Realize v (xs fun (i : Fin n) => if i < m then Fin.castAdd n' i else i.addNat n')
          theorem FirstOrder.Language.BoundedFormula.realize_liftAt_one {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n m : } {φ : L.BoundedFormula α n} {v : αM} {xs : Fin (n + 1)M} (hmn : m n) :
          (liftAt 1 m φ).Realize v xs φ.Realize v (xs fun (i : Fin n) => if i < m then i.castSucc else i.succ)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_liftAt_one_self {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } {φ : L.BoundedFormula α n} {v : αM} {xs : Fin (n + 1)M} :
          (liftAt 1 n φ).Realize v xs φ.Realize v (xs Fin.castSucc)
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_subst {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {n : } {φ : L.BoundedFormula α n} {tf : αL.Term β} {v : βM} {xs : Fin nM} :
          (φ.subst tf).Realize v xs φ.Realize (fun (a : α) => Term.realize v (tf a)) xs
          theorem FirstOrder.Language.BoundedFormula.realize_restrictFreeVar {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [DecidableEq α] {n : } {φ : L.BoundedFormula α n} {f : { x : α // x φ.freeVarFinset }β} {v : βM} {xs : Fin nM} (v' : αM) (hv' : ∀ (a : { x : α // x φ.freeVarFinset }), v (f a) = v' a) :
          (φ.restrictFreeVar f).Realize v xs φ.Realize v' xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_restrictFreeVar' {L : Language} {M : Type w} [L.Structure M] {α : Type u'} [DecidableEq α] {n : } {φ : L.BoundedFormula α n} {s : Set α} (h : φ.freeVarFinset s) {v : αM} {xs : Fin nM} :

          A special case of realize_restrictFreeVar, included because we can add the simp attribute to it

          theorem FirstOrder.Language.BoundedFormula.realize_constantsVarsEquiv {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] {n : } {φ : (L.withConstants α).BoundedFormula β n} {v : βM} {xs : Fin nM} :
          (constantsVarsEquiv φ).Realize (Sum.elim (fun (a : α) => (L.con a)) v) xs φ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.BoundedFormula.realize_relabelEquiv {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {g : α β} {k : } {φ : L.BoundedFormula α k} {v : βM} {xs : Fin kM} :
          ((relabelEquiv g) φ).Realize v xs φ.Realize (v g) xs
          theorem FirstOrder.Language.BoundedFormula.realize_all_liftAt_one_self {L : Language} {M : Type w} [L.Structure M] {α : Type u'} [Nonempty M] {n : } {φ : L.BoundedFormula α n} {v : αM} {xs : Fin nM} :
          (liftAt 1 n φ).all.Realize v xs φ.Realize v xs
          @[simp]
          theorem FirstOrder.Language.LHom.realize_onBoundedFormula {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] {n : } (ψ : L.BoundedFormula α n) {v : αM} {xs : Fin nM} :
          (φ.onBoundedFormula ψ).Realize v xs ψ.Realize v xs
          def FirstOrder.Language.Formula.Realize {L : Language} {M : Type w} [L.Structure M] {α : Type u'} (φ : L.Formula α) (v : αM) :

          A formula can be evaluated as true or false by giving values to each free variable.

          Equations
            Instances For
              @[simp]
              theorem FirstOrder.Language.Formula.realize_not {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {φ : L.Formula α} {v : αM} :
              @[simp]
              theorem FirstOrder.Language.Formula.realize_bot {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {v : αM} :
              @[simp]
              theorem FirstOrder.Language.Formula.realize_top {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {v : αM} :
              @[simp]
              theorem FirstOrder.Language.Formula.realize_inf {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {φ ψ : L.Formula α} {v : αM} :
              (φψ).Realize v φ.Realize v ψ.Realize v
              @[simp]
              theorem FirstOrder.Language.Formula.realize_imp {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {φ ψ : L.Formula α} {v : αM} :
              (φ.imp ψ).Realize v φ.Realize vψ.Realize v
              @[simp]
              theorem FirstOrder.Language.Formula.realize_rel {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {v : αM} {k : } {R : L.Relations k} {ts : Fin kL.Term α} :
              (R.formula ts).Realize v Structure.RelMap R fun (i : Fin k) => Term.realize v (ts i)
              @[simp]
              theorem FirstOrder.Language.Formula.realize_rel₁ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {v : αM} {R : L.Relations 1} {t : L.Term α} :
              @[simp]
              theorem FirstOrder.Language.Formula.realize_rel₂ {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {v : αM} {R : L.Relations 2} {t₁ t₂ : L.Term α} :
              @[simp]
              theorem FirstOrder.Language.Formula.realize_sup {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {φ ψ : L.Formula α} {v : αM} :
              (φψ).Realize v φ.Realize v ψ.Realize v
              @[simp]
              theorem FirstOrder.Language.Formula.realize_iff {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {φ ψ : L.Formula α} {v : αM} :
              (φ.iff ψ).Realize v (φ.Realize v ψ.Realize v)
              @[simp]
              theorem FirstOrder.Language.Formula.realize_relabel {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {φ : L.Formula α} {g : αβ} {v : βM} :
              (relabel g φ).Realize v φ.Realize (v g)
              theorem FirstOrder.Language.Formula.realize_relabel_sumInr {L : Language} {M : Type w} [L.Structure M] {n : } (φ : L.Formula (Fin n)) {v : EmptyM} {x : Fin nM} :
              @[deprecated FirstOrder.Language.Formula.realize_relabel_sumInr (since := "2025-02-21")]
              theorem FirstOrder.Language.Formula.realize_relabel_sum_inr {L : Language} {M : Type w} [L.Structure M] {n : } (φ : L.Formula (Fin n)) {v : EmptyM} {x : Fin nM} :

              Alias of FirstOrder.Language.Formula.realize_relabel_sumInr.

              @[simp]
              theorem FirstOrder.Language.Formula.realize_equal {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {t₁ t₂ : L.Term α} {x : αM} :
              (t₁.equal t₂).Realize x Term.realize x t₁ = Term.realize x t₂
              @[simp]
              theorem FirstOrder.Language.Formula.realize_graph {L : Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {x : Fin nM} {y : M} :
              theorem FirstOrder.Language.Formula.boundedFormula_realize_eq_realize {L : Language} {M : Type w} [L.Structure M] {α : Type u'} (φ : L.Formula α) (x : αM) (y : Fin 0M) :
              @[simp]
              theorem FirstOrder.Language.LHom.realize_onFormula {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] (ψ : L.Formula α) {v : αM} :
              (φ.onFormula ψ).Realize v ψ.Realize v
              @[simp]
              theorem FirstOrder.Language.LHom.setOf_realize_onFormula {L : Language} {L' : Language} {M : Type w} [L.Structure M] {α : Type u'} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] (ψ : L.Formula α) :

              A sentence can be evaluated as true or false in a structure.

              Equations
                Instances For

                  A sentence can be evaluated as true or false in a structure.

                  Equations
                    Instances For
                      @[simp]
                      theorem FirstOrder.Language.Formula.realize_equivSentence_symm_con {L : Language} (M : Type w) [L.Structure M] {α : Type u'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] (φ : (L.withConstants α).Sentence) :
                      ((equivSentence.symm φ).Realize fun (a : α) => (L.con a)) M φ
                      @[simp]
                      theorem FirstOrder.Language.Formula.realize_equivSentence {L : Language} (M : Type w) [L.Structure M] {α : Type u'} [(L.withConstants α).Structure M] [(L.lhomWithConstants α).IsExpansionOn M] (φ : L.Formula α) :
                      M equivSentence φ φ.Realize fun (a : α) => (L.con a)
                      theorem FirstOrder.Language.Formula.realize_equivSentence_symm {L : Language} (M : Type w) [L.Structure M] {α : Type u'} (φ : (L.withConstants α).Sentence) (v : αM) :
                      @[simp]
                      theorem FirstOrder.Language.LHom.realize_onSentence {L : Language} {L' : Language} (M : Type w) [L.Structure M] [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] (ψ : L.Sentence) :
                      M φ.onSentence ψ M ψ

                      The complete theory of a structure M is the set of all sentences M satisfies.

                      Equations
                        Instances For

                          Two structures are elementarily equivalent when they satisfy the same sentences.

                          Equations
                            Instances For

                              Two structures are elementarily equivalent when they satisfy the same sentences.

                              Equations
                                Instances For
                                  @[simp]
                                  theorem FirstOrder.Language.elementarilyEquivalent_iff {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] :
                                  L.ElementarilyEquivalent M N ∀ (φ : L.Sentence), M φ N φ

                                  A model of a theory is a structure in which every sentence is realized as true.

                                  Instances

                                    A model of a theory is a structure in which every sentence is realized as true.

                                    Equations
                                      Instances For
                                        @[simp]
                                        theorem FirstOrder.Language.Theory.model_iff {L : Language} {M : Type w} [L.Structure M] (T : L.Theory) :
                                        M T φT, M φ
                                        theorem FirstOrder.Language.Theory.realize_sentence_of_mem {L : Language} {M : Type w} [L.Structure M] (T : L.Theory) [M T] {φ : L.Sentence} (h : φ T) :
                                        M φ
                                        @[simp]
                                        theorem FirstOrder.Language.LHom.onTheory_model {L : Language} {L' : Language} {M : Type w} [L.Structure M] [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] (T : L.Theory) :
                                        M φ.onTheory T M T
                                        theorem FirstOrder.Language.Theory.Model.mono {L : Language} {M : Type w} [L.Structure M] {T T' : L.Theory} (_h : M T') (hs : T T') :
                                        M T
                                        theorem FirstOrder.Language.Theory.Model.union {L : Language} {M : Type w} [L.Structure M] {T T' : L.Theory} (h : M T) (h' : M T') :
                                        M T T'
                                        @[simp]
                                        theorem FirstOrder.Language.Theory.model_union_iff {L : Language} {M : Type w} [L.Structure M] {T T' : L.Theory} :
                                        M T T' M T M T'
                                        @[simp]
                                        theorem FirstOrder.Language.Theory.model_insert_iff {L : Language} {M : Type w} [L.Structure M] {T : L.Theory} {φ : L.Sentence} :
                                        M insert φ T M φ M T
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_alls {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } {φ : L.BoundedFormula α n} {v : αM} :
                                        φ.alls.Realize v ∀ (xs : Fin nM), φ.Realize v xs
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_exs {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } {φ : L.BoundedFormula α n} {v : αM} :
                                        φ.exs.Realize v ∃ (xs : Fin nM), φ.Realize v xs
                                        @[simp]
                                        theorem FirstOrder.Language.Formula.realize_iAlls {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [Finite β] {φ : L.Formula (α β)} {v : αM} :
                                        (iAlls β φ).Realize v ∀ (i : βM), φ.Realize fun (a : α β) => Sum.elim v i a
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_iAlls {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [Finite β] {φ : L.Formula (α β)} {v : αM} {v' : Fin 0M} :
                                        Realize (Formula.iAlls β φ) v v' ∀ (i : βM), φ.Realize fun (a : α β) => Sum.elim v i a
                                        @[simp]
                                        theorem FirstOrder.Language.Formula.realize_iExs {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {γ : Type u_3} [Finite γ] {φ : L.Formula (α γ)} {v : αM} :
                                        (iExs γ φ).Realize v ∃ (i : γM), φ.Realize (Sum.elim v i)
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_iExs {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {γ : Type u_3} [Finite γ] {φ : L.Formula (α γ)} {v : αM} {v' : Fin 0M} :
                                        Realize (Formula.iExs γ φ) v v' ∃ (i : γM), φ.Realize (Sum.elim v i)
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_toFormula {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {n : } (φ : L.BoundedFormula α n) (v : α Fin nM) :
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_iSup {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {n : } [Finite β] {f : βL.BoundedFormula α n} {v : αM} {v' : Fin nM} :
                                        (iSup f).Realize v v' ∃ (b : β), (f b).Realize v v'
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_iInf {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} {n : } [Finite β] {f : βL.BoundedFormula α n} {v : αM} {v' : Fin nM} :
                                        (iInf f).Realize v v' ∀ (b : β), (f b).Realize v v'
                                        @[simp]
                                        theorem FirstOrder.Language.Formula.realize_iSup {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [Finite β] {f : βL.Formula α} {v : αM} :
                                        (iSup f).Realize v ∃ (b : β), (f b).Realize v
                                        @[simp]
                                        theorem FirstOrder.Language.Formula.realize_iInf {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {β : Type v'} [Finite β] {f : βL.Formula α} {v : αM} :
                                        (iInf f).Realize v ∀ (b : β), (f b).Realize v
                                        theorem FirstOrder.Language.Formula.realize_iExsUnique {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {γ : Type u_3} [Finite γ] {φ : L.Formula (α γ)} {v : αM} :
                                        (iExsUnique γ φ).Realize v ∃! i : γM, φ.Realize (Sum.elim v i)
                                        @[simp]
                                        theorem FirstOrder.Language.BoundedFormula.realize_iExsUnique {L : Language} {M : Type w} [L.Structure M] {α : Type u'} {γ : Type u_3} [Finite γ] {φ : L.Formula (α γ)} {v : αM} {v' : Fin 0M} :
                                        Realize (Formula.iExsUnique γ φ) v v' ∃! i : γM, φ.Realize (Sum.elim v i)
                                        @[simp]
                                        theorem FirstOrder.Language.StrongHomClass.realize_boundedFormula {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {α : Type u'} {n : } {F : Type u_4} [EquivLike F M N] [L.StrongHomClass F M N] (g : F) (φ : L.BoundedFormula α n) {v : αM} {xs : Fin nM} :
                                        φ.Realize (g v) (g xs) φ.Realize v xs
                                        @[simp]
                                        theorem FirstOrder.Language.StrongHomClass.realize_formula {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {α : Type u'} {F : Type u_4} [EquivLike F M N] [L.StrongHomClass F M N] (g : F) (φ : L.Formula α) {v : αM} :
                                        φ.Realize (g v) φ.Realize v
                                        theorem FirstOrder.Language.StrongHomClass.realize_sentence {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {F : Type u_4} [EquivLike F M N] [L.StrongHomClass F M N] (g : F) (φ : L.Sentence) :
                                        M φ N φ
                                        theorem FirstOrder.Language.StrongHomClass.theory_model {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {T : L.Theory} {F : Type u_4} [EquivLike F M N] [L.StrongHomClass F M N] (g : F) [M T] :
                                        N T
                                        @[simp]
                                        theorem FirstOrder.Language.Relations.realize_total {L : Language} {M : Type w} [L.Structure M] {r : L.Relations 2} :
                                        M r.total Total fun (x y : M) => Structure.RelMap r ![x, y]
                                        theorem FirstOrder.Language.model_distinctConstantsTheory (L : Language) {α : Type u'} {M : Type w} [(L.withConstants α).Structure M] (s : Set α) :
                                        M L.distinctConstantsTheory s Set.InjOn (fun (i : α) => (L.con i)) s
                                        theorem FirstOrder.Language.ElementarilyEquivalent.theory_model {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {T : L.Theory} [MT : M T] (h : L.ElementarilyEquivalent M N) :
                                        N T