Documentation

Foundation.FirstOrder.Basic.Syntax.Formula

Formulas of first-order logic #

This file defines the formulas of first-order logic.

φ : Semiformula L ξ n is a (semi-)formula of language L with bounded variables of Fin n and free variables of ξ. The quantification is represented by de Bruijn index.

inductive LO.FirstOrder.Semiformula (L : Language) (ξ : Type u_1) :
ℕ → Type (max u_1 u_2)
Instances For
    @[reducible, inline]
    abbrev LO.FirstOrder.Formula (L : Language) (ξ : Type u_1) :
    Type (max u_1 u_2)
    Equations
    Instances For
      @[reducible, inline]
      Equations
      Instances For
        @[reducible, inline]
        Equations
        Instances For
          @[reducible, inline]
          Equations
          Instances For
            def LO.FirstOrder.Semiformula.neg {L : Language} {ξ : Type u_1} {n : ℕ} :
            Semiformula L ξ n → Semiformula L ξ n
            Equations
            Instances For
              theorem LO.FirstOrder.Semiformula.neg_neg {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
              φ.neg.neg = φ
              def LO.FirstOrder.Semiformula.toStr {L : Language} {ξ : Type u_1} [(k : ℕ) → ToString (L.Func k)] [(k : ℕ) → ToString (L.Rel k)] [ToString ξ] {n : ℕ} :
              Semiformula L ξ n → String
              Equations
              Instances For
                instance LO.FirstOrder.Semiformula.instRepr {L : Language} {ξ : Type u_1} {n : ℕ} [(k : ℕ) → ToString (L.Func k)] [(k : ℕ) → ToString (L.Rel k)] [ToString ξ] :
                Repr (Semiformula L ξ n)
                Equations
                instance LO.FirstOrder.Semiformula.instToString {L : Language} {ξ : Type u_1} {n : ℕ} [(k : ℕ) → ToString (L.Func k)] [(k : ℕ) → ToString (L.Rel k)] [ToString ξ] :
                Equations
                @[simp]
                @[simp]
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_rel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                ∼rel r v = nrel r v
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_nrel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                ∼nrel r v = rel r v
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_and {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                ∼(φ ⋏ ψ) = ∼φ ⋎ ∼ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_or {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                ∼(φ ⋎ ψ) = ∼φ ⋏ ∼ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_all {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                ∼(∀' φ) = ∃' ∼φ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_ex {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                ∼(∃' φ) = ∀' ∼φ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_neg' {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                ∼∼φ = φ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                ∼φ = ∼ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_univClosure {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                ∼(∀* φ) = ∃* ∼φ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_exClosure {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                ∼(∃* φ) = ∀* ∼φ
                theorem LO.FirstOrder.Semiformula.neg_eq {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                ∼φ = φ.neg
                theorem LO.FirstOrder.Semiformula.imp_eq {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                φ ➝ ψ = ∼φ ⋎ ψ
                theorem LO.FirstOrder.Semiformula.iff_eq {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                φ ⭤ ψ = (∼φ ⋎ ψ) ⋏ (∼ψ ⋎ φ)
                theorem LO.FirstOrder.Semiformula.ball_eq {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                (∀[φ] ψ) = ∀' (φ ➝ ψ)
                theorem LO.FirstOrder.Semiformula.bex_eq {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                (∃[φ] ψ) = ∃' φ ⋏ ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_ball {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                ∼(∀[φ] ψ) = ∃[φ] ∼ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.neg_bex {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                ∼(∃[φ] ψ) = ∀[φ] ∼ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.and_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ₁ ψ₁ φ₂ ψ₂ : Semiformula L ξ n) :
                φ₁ ⋏ φ₂ = ψ₁ ⋏ ψ₂ ↔ φ₁ = ψ₁ ∧ φ₂ = ψ₂
                @[simp]
                theorem LO.FirstOrder.Semiformula.or_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ₁ ψ₁ φ₂ ψ₂ : Semiformula L ξ n) :
                φ₁ ⋎ φ₂ = ψ₁ ⋎ ψ₂ ↔ φ₁ = ψ₁ ∧ φ₂ = ψ₂
                @[simp]
                theorem LO.FirstOrder.Semiformula.all_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                ∀' φ = ∀' ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.ex_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ (n + 1)) :
                ∃' φ = ∃' ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.univClosure_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                ∀* φ = ∀* ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.exClosure_inj {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                ∃* φ = ∃* ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.univItr_inj {L : Language} {ξ : Type u_1} {n k : ℕ} (φ ψ : Semiformula L ξ (n + k)) :
                ∀^[k] φ = ∀^[k] ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.exItr_inj {L : Language} {ξ : Type u_1} {n k : ℕ} (φ ψ : Semiformula L ξ (n + k)) :
                ∃^[k] φ = ∃^[k] ψ ↔ φ = ψ
                @[simp]
                theorem LO.FirstOrder.Semiformula.imp_inj {L : Language} {ξ : Type u_1} {n : ℕ} {φ₁ φ₂ ψ₁ ψ₂ : Semiformula L ξ n} :
                φ₁ ➝ φ₂ = ψ₁ ➝ ψ₂ ↔ φ₁ = ψ₁ ∧ φ₂ = ψ₂
                @[reducible, inline]
                abbrev LO.FirstOrder.Semiformula.rel! {ξ : Type u_1} {n : ℕ} (L : Language) (k : ℕ) (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                Equations
                Instances For
                  @[reducible, inline]
                  abbrev LO.FirstOrder.Semiformula.nrel! {ξ : Type u_1} {n : ℕ} (L : Language) (k : ℕ) (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                  Equations
                  Instances For
                    def LO.FirstOrder.Semiformula.complexity {L : Language} {ξ : Type u_1} {n : ℕ} :
                    Semiformula L ξ n → ℕ
                    Equations
                    Instances For
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_top {L : Language} {ξ : Type u_1} {n : ℕ} :
                      ⊤.complexity = 0
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_bot {L : Language} {ξ : Type u_1} {n : ℕ} :
                      ⊥.complexity = 0
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_rel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                      (rel r v).complexity = 0
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_nrel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                      (nrel r v).complexity = 0
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_and {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                      (φ ⋏ ψ).complexity = φ.complexity ⊔ ψ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_and' {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                      (φ.and ψ).complexity = φ.complexity ⊔ ψ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_or {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                      (φ ⋎ ψ).complexity = φ.complexity ⊔ ψ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_or' {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                      (φ.or ψ).complexity = φ.complexity ⊔ ψ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_all {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                      (∀' φ).complexity = φ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_all' {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                      φ.all.complexity = φ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_ex {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                      (∃' φ).complexity = φ.complexity + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiformula.complexity_ex' {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                      φ.ex.complexity = φ.complexity + 1
                      def LO.FirstOrder.Semiformula.cases' {L : Language} {ξ : Type u_1} {C : (n : ℕ) → Semiformula L ξ n → Sort w} (hverum : {n : ℕ} → C n ⊤) (hfalsum : {n : ℕ} → C n ⊥) (hrel : {n k : ℕ} → (r : L.Rel k) → (v : Fin k → Semiterm L ξ n) → C n (rel r v)) (hnrel : {n k : ℕ} → (r : L.Rel k) → (v : Fin k → Semiterm L ξ n) → C n (nrel r v)) (hand : {n : ℕ} → (φ ψ : Semiformula L ξ n) → C n (φ ⋏ ψ)) (hor : {n : ℕ} → (φ ψ : Semiformula L ξ n) → C n (φ ⋎ ψ)) (hall : {n : ℕ} → (φ : Semiformula L ξ (n + 1)) → C n (∀' φ)) (hex : {n : ℕ} → (φ : Semiformula L ξ (n + 1)) → C n (∃' φ)) {n : ℕ} (φ : Semiformula L ξ n) :
                      C n φ
                      Equations
                      Instances For
                        def LO.FirstOrder.Semiformula.rec' {L : Language} {ξ : Type u_1} {C : (n : ℕ) → Semiformula L ξ n → Sort w} (hverum : {n : ℕ} → C n ⊤) (hfalsum : {n : ℕ} → C n ⊥) (hrel : {n k : ℕ} → (r : L.Rel k) → (v : Fin k → Semiterm L ξ n) → C n (rel r v)) (hnrel : {n k : ℕ} → (r : L.Rel k) → (v : Fin k → Semiterm L ξ n) → C n (nrel r v)) (hand : {n : ℕ} → (φ ψ : Semiformula L ξ n) → C n φ → C n ψ → C n (φ ⋏ ψ)) (hor : {n : ℕ} → (φ ψ : Semiformula L ξ n) → C n φ → C n ψ → C n (φ ⋎ ψ)) (hall : {n : ℕ} → (φ : Semiformula L ξ (n + 1)) → C (n + 1) φ → C n (∀' φ)) (hex : {n : ℕ} → (φ : Semiformula L ξ (n + 1)) → C (n + 1) φ → C n (∃' φ)) {n : ℕ} (φ : Semiformula L ξ n) :
                        C n φ
                        Equations
                        Instances For
                          @[simp]
                          theorem LO.FirstOrder.Semiformula.complexity_neg {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                          (∼φ).complexity = φ.complexity
                          def LO.FirstOrder.Semiformula.hasDecEq {L : Language} {ξ : Type u_1} [(k : ℕ) → DecidableEq (L.Func k)] [(k : ℕ) → DecidableEq (L.Rel k)] [DecidableEq ξ] {n : ℕ} (φ ψ : Semiformula L ξ n) :
                          Decidable (φ = ψ)
                          Instances For

                            Quantifier Rank

                            def LO.FirstOrder.Semiformula.qr {L : Language} {ξ : Type u_1} {n : ℕ} :
                            Semiformula L ξ n → ℕ
                            Equations
                            Instances For
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_top {L : Language} {ξ : Type u_1} {n : ℕ} :
                              ⊤.qr = 0
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_bot {L : Language} {ξ : Type u_1} {n : ℕ} :
                              ⊥.qr = 0
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_rel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                              (rel r v).qr = 0
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_nrel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                              (nrel r v).qr = 0
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_and {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                              (φ ⋏ ψ).qr = φ.qr ⊔ ψ.qr
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_or {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                              (φ ⋎ ψ).qr = φ.qr ⊔ ψ.qr
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_all {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                              (∀' φ).qr = φ.qr + 1
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_ex {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ (n + 1)) :
                              (∃' φ).qr = φ.qr + 1
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_neg {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                              (∼φ).qr = φ.qr
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_imply {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                              (φ ➝ ψ).qr = φ.qr ⊔ ψ.qr
                              @[simp]
                              theorem LO.FirstOrder.Semiformula.qr_iff {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                              (φ ⭤ ψ).qr = φ.qr ⊔ ψ.qr

                              Open (Semi-)Formula

                              def LO.FirstOrder.Semiformula.Open {L : Language} {ξ : Type u_1} {n : ℕ} (φ : Semiformula L ξ n) :
                              Equations
                              • φ.Open = (φ.qr = 0)
                              Instances For
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_top {L : Language} {ξ : Type u_1} {n : ℕ} :
                                ⊤.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_bot {L : Language} {ξ : Type u_1} {n : ℕ} :
                                ⊥.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_rel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                                (rel r v).Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_nrel {L : Language} {ξ : Type u_1} {n k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                                (nrel r v).Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_and {L : Language} {ξ : Type u_1} {n : ℕ} {φ ψ : Semiformula L ξ n} :
                                (φ ⋏ ψ).Open ↔ φ.Open ∧ ψ.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_or {L : Language} {ξ : Type u_1} {n : ℕ} {φ ψ : Semiformula L ξ n} :
                                (φ ⋎ ψ).Open ↔ φ.Open ∧ ψ.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.not_open_all {L : Language} {ξ : Type u_1} {n : ℕ} {φ : Semiformula L ξ (n + 1)} :
                                ¬(∀' φ).Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.not_open_ex {L : Language} {ξ : Type u_1} {n : ℕ} {φ : Semiformula L ξ (n + 1)} :
                                ¬(∃' φ).Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_neg {L : Language} {ξ : Type u_1} {n : ℕ} {φ : Semiformula L ξ n} :
                                (∼φ).Open ↔ φ.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_imply {L : Language} {ξ : Type u_1} {n : ℕ} {φ ψ : Semiformula L ξ n} :
                                (φ ➝ ψ).Open ↔ φ.Open ∧ ψ.Open
                                @[simp]
                                theorem LO.FirstOrder.Semiformula.open_iff {L : Language} {ξ : Type u_1} {n : ℕ} {φ ψ : Semiformula L ξ n} :
                                (φ ⭤ ψ).Open ↔ φ.Open ∧ ψ.Open

                                Free Variables

                                Equations
                                Instances For
                                  theorem LO.FirstOrder.Semiformula.freeVariables_rel {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] {k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                                  (rel r v).freeVariables = Finset.univ.biUnion fun (i : Fin k) => (v i).freeVariables
                                  theorem LO.FirstOrder.Semiformula.freeVariables_nrel {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] {k : ℕ} (r : L.Rel k) (v : Fin k → Semiterm L ξ n) :
                                  (nrel r v).freeVariables = Finset.univ.biUnion fun (i : Fin k) => (v i).freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_verum {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] :
                                  ⊤.freeVariables = ∅
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_falsum {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] :
                                  ⊥.freeVariables = ∅
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_and {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ ψ : Semiformula L ξ n) :
                                  (φ ⋏ ψ).freeVariables = φ.freeVariables ∪ ψ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_or {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ ψ : Semiformula L ξ n) :
                                  (φ ⋎ ψ).freeVariables = φ.freeVariables ∪ ψ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_all {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ : Semiformula L ξ (n + 1)) :
                                  (∀' φ).freeVariables = φ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_ex {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ : Semiformula L ξ (n + 1)) :
                                  (∃' φ).freeVariables = φ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_not {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ : Semiformula L ξ n) :
                                  (∼φ).freeVariables = φ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_imp {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ ψ : Semiformula L ξ n) :
                                  (φ ➝ ψ).freeVariables = φ.freeVariables ∪ ψ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_univClosure {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ : Semiformula L ξ n) :
                                  (∀* φ).freeVariables = φ.freeVariables
                                  @[simp]
                                  theorem LO.FirstOrder.Semiformula.freeVariables_sentence {L : Language} {n : ℕ} {ο : Type u_5} [IsEmpty ο] (φ : Semiformula L ο n) :
                                  φ.freeVariables = ∅
                                  @[reducible, inline]
                                  abbrev LO.FirstOrder.Semiformula.FVar? {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (φ : Semiformula L ξ n) (x : ξ) :
                                  Equations
                                  • φ.FVar? x = (x ∈ φ.freeVariables)
                                  Instances For
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_rel {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] {x : ξ} {k : ℕ} {R : L.Rel k} {v : Fin k → Semiterm L ξ n} :
                                    (rel R v).FVar? x ↔ ∃ (i : Fin k), (v i).FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_nrel {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] {x : ξ} {k : ℕ} {R : L.Rel k} {v : Fin k → Semiterm L ξ n} :
                                    (nrel R v).FVar? x ↔ ∃ (i : Fin k), (v i).FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_top {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) :
                                    ¬⊤.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_falsum {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) :
                                    ¬⊥.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_and {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) (φ ψ : Semiformula L ξ n) :
                                    (φ ⋏ ψ).FVar? x ↔ φ.FVar? x ∨ ψ.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_or {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) (φ ψ : Semiformula L ξ n) :
                                    (φ ⋎ ψ).FVar? x ↔ φ.FVar? x ∨ ψ.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_all {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) (φ : Semiformula L ξ (n + 1)) :
                                    (∀' φ).FVar? x ↔ φ.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_ex {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) (φ : Semiformula L ξ (n + 1)) :
                                    (∃' φ).FVar? x ↔ φ.FVar? x
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.fvar?_univClosure {L : Language} {ξ : Type u_1} {n : ℕ} [DecidableEq ξ] (x : ξ) (φ : Semiformula L ξ n) :
                                    (∀* φ).FVar? x ↔ φ.FVar? x
                                    theorem LO.FirstOrder.Semiformula.List.maximam?_some_of_not_nil {α : Type u_5} [LinearOrder α] {l : List α} (h : l ≠ []) :
                                    l.max?.isSome = true
                                    theorem LO.FirstOrder.Semiformula.List.maximam?_eq_some {α : Type u_5} [LinearOrder α] {l : List α} {a : α} (h : l.max? = some a) (x : α) :
                                    x ∈ l → x ≤ a
                                    theorem LO.FirstOrder.Semiformula.ne_of_ne_complexity {L : Language} {ξ : Type u_1} {n : ℕ} {φ ψ : Semiformula L ξ n} (h : φ.complexity ≠ ψ.complexity) :
                                    φ ≠ ψ
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.ne_or_left {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                                    φ ≠ φ ⋎ ψ
                                    @[simp]
                                    theorem LO.FirstOrder.Semiformula.ne_or_right {L : Language} {ξ : Type u_1} {n : ℕ} (φ ψ : Semiformula L ξ n) :
                                    ψ ≠ φ ⋎ ψ
                                    theorem LO.FirstOrder.Semiformula.lMapAux_neg {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} {n : ℕ} (φ : Semiformula L₁ ξ n) :
                                    lMapAux Φ (∼φ) = ∼lMapAux Φ φ
                                    def LO.FirstOrder.Semiformula.lMap {L₁ : Language} {L₂ : Language} {ξ : Type u_5} (Φ : L₁.Hom L₂) {n : ℕ} :
                                    Semiformula L₁ ξ n →ˡᶜ Semiformula L₂ ξ n
                                    Equations
                                    Instances For
                                      theorem LO.FirstOrder.Semiformula.lMap_rel {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} {k : ℕ} (r : L₁.Rel k) (v : Fin k → Semiterm L₁ ξ n) :
                                      (lMap Φ) (rel r v) = rel (Φ.rel r) fun (i : Fin k) => Semiterm.lMap Φ (v i)
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_rel₀ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 0) (v : Fin 0 → Semiterm L₁ ξ n) :
                                      (lMap Φ) (rel r v) = rel (Φ.rel r) ![]
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_rel₁ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 1) (t : Semiterm L₁ ξ n) :
                                      (lMap Φ) (rel r ![t]) = rel (Φ.rel r) ![Semiterm.lMap Φ t]
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_rel₂ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 2) (t₁ t₂ : Semiterm L₁ ξ n) :
                                      (lMap Φ) (rel r ![t₁, t₂]) = rel (Φ.rel r) ![Semiterm.lMap Φ t₁, Semiterm.lMap Φ t₂]
                                      theorem LO.FirstOrder.Semiformula.lMap_nrel {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} {k : ℕ} (r : L₁.Rel k) (v : Fin k → Semiterm L₁ ξ n) :
                                      (lMap Φ) (nrel r v) = nrel (Φ.rel r) fun (i : Fin k) => Semiterm.lMap Φ (v i)
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_nrel₀ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 0) (v : Fin 0 → Semiterm L₁ ξ n) :
                                      (lMap Φ) (nrel r v) = nrel (Φ.rel r) ![]
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_nrel₁ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 1) (t : Semiterm L₁ ξ n) :
                                      (lMap Φ) (nrel r ![t]) = nrel (Φ.rel r) ![Semiterm.lMap Φ t]
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_nrel₂ {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (r : L₁.Rel 2) (t₁ t₂ : Semiterm L₁ ξ n) :
                                      (lMap Φ) (nrel r ![t₁, t₂]) = nrel (Φ.rel r) ![Semiterm.lMap Φ t₁, Semiterm.lMap Φ t₂]
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_all {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ : Semiformula L₁ ξ (n + 1)) :
                                      (lMap Φ) (∀' φ) = ∀' (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_ex {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ : Semiformula L₁ ξ (n + 1)) :
                                      (lMap Φ) (∃' φ) = ∃' (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_ball {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ ψ : Semiformula L₁ ξ (n + 1)) :
                                      (lMap Φ) (∀[φ] ψ) = ∀[(lMap Φ) φ] (lMap Φ) ψ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_bex {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ ψ : Semiformula L₁ ξ (n + 1)) :
                                      (lMap Φ) (∃[φ] ψ) = ∃[(lMap Φ) φ] (lMap Φ) ψ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_univClosure {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ : Semiformula L₁ ξ n) :
                                      (lMap Φ) (∀* φ) = ∀* (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_exClosure {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} (φ : Semiformula L₁ ξ n) :
                                      (lMap Φ) (∃* φ) = ∃* (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_univItr {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} {k : ℕ} (φ : Semiformula L₁ ξ (n + k)) :
                                      (lMap Φ) (∀^[k] φ) = ∀^[k] (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.lMap_exItr {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} {Φ : L₁.Hom L₂} {k : ℕ} (φ : Semiformula L₁ ξ (n + k)) :
                                      (lMap Φ) (∃^[k] φ) = ∃^[k] (lMap Φ) φ
                                      @[simp]
                                      theorem LO.FirstOrder.Semiformula.freeVariables_lMap {n : ℕ} {L₁ : Language} {L₂ : Language} {ξ : Type u_5} [DecidableEq ξ] (Φ : L₁.Hom L₂) (φ : Semiformula L₁ ξ n) :
                                      ((lMap Φ) φ).freeVariables = φ.freeVariables
                                      @[reducible, inline]
                                      Equations
                                      Instances For
                                        @[reducible, inline]
                                        Equations
                                        Instances For
                                          def LO.FirstOrder.Theory.lMap {L₁ : Language} {L₂ : Language} (Φ : L₁.Hom L₂) (T : Theory L₁) :
                                          Theory L₂
                                          Equations
                                          Instances For
                                            Equations
                                            theorem LO.FirstOrder.Theory.add_def {L : Language} (T U : Theory L) :
                                            T + U = T ∪ U