Documentation

Foundation.IntFO.Basic.Formula

Formulas of intuitionistic 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]
          abbrev LO.FirstOrder.Semiformulaᵢ.neg {L : Language} {ξ : Type u_2} {n : } (φ : Semiformulaᵢ L ξ n) :
          Equations
          Instances For
            theorem LO.FirstOrder.Semiformulaᵢ.neg_def {L : Language} {ξ : Type u_1} {n : } (φ : Semiformulaᵢ L ξ n) :
            φ = φ
            def LO.FirstOrder.Semiformulaᵢ.toStr {ξ : Type u_1} {L : Language} [(k : ) → ToString (L.Func k)] [(k : ) → ToString (L.Rel k)] [ToString ξ] {n : } :
            Equations
            Instances For
              instance LO.FirstOrder.Semiformulaᵢ.instRepr {ξ : Type u_1} {L : Language} [(k : ) → ToString (L.Func k)] [(k : ) → ToString (L.Rel k)] [ToString ξ] {n : } :
              Equations
              instance LO.FirstOrder.Semiformulaᵢ.instToString {ξ : Type u_1} {L : Language} [(k : ) → ToString (L.Func k)] [(k : ) → ToString (L.Rel k)] [ToString ξ] {n : } :
              Equations
              @[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ᵢ.imp_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] ψ φ = ψ
              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 kSemiterm L ξ n) :
                (rel 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_imp {L : Language} {ξ : Type u_1} {n : } (φ ψ : Semiformulaᵢ L ξ n) :
                (φ ψ).complexity = φ.complexity ψ.complexity + 1
                @[simp]
                theorem LO.FirstOrder.Semiformulaᵢ.complexity_imp' {L : Language} {ξ : Type u_1} {n : } (φ ψ : Semiformulaᵢ L ξ n) :
                (φ.imp ψ).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
                @[simp]
                theorem LO.FirstOrder.Semiformulaᵢ.complexity_neg {L : Language} {ξ : Type u_1} {n : } (φ : Semiformulaᵢ L ξ n) :
                (φ).complexity = φ.complexity + 1
                def LO.FirstOrder.Semiformulaᵢ.cases' {L : Language} {ξ : Type u_2} {C : (n : ) → Semiformulaᵢ L ξ nSort w} (hRel : {n k : } → (r : L.Rel k) → (v : Fin kSemiterm L ξ n) → C n (rel r v)) (hVerum : {n : } → C n ) (hFalsum : {n : } → C n ) (hAnd : {n : } → (φ ψ : Semiformulaᵢ L ξ n) → C n (φ ψ)) (hOr : {n : } → (φ ψ : Semiformulaᵢ L ξ n) → C n (φ ψ)) (hImp : {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_2} {C : (n : ) → Semiformulaᵢ L ξ nSort w} (hRel : {n k : } → (r : L.Rel k) → (v : Fin kSemiterm L ξ n) → C n (rel r v)) (hVerum : {n : } → C n ) (hFalsum : {n : } → C n ) (hAnd : {n : } → (φ ψ : Semiformulaᵢ L ξ n) → C n φC n ψC n (φ ψ)) (hOr : {n : } → (φ ψ : Semiformulaᵢ L ξ n) → C n φC n ψC n (φ ψ)) (hImp : {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
                    def LO.FirstOrder.Semiformulaᵢ.hasDecEq {ξ : Type u_1} {L : Language} [L.DecidableEq] [DecidableEq ξ] {n : } (φ ψ : Semiformulaᵢ L ξ n) :
                    Decidable (φ = ψ)
                    Instances For
                      @[reducible, inline]
                      Equations
                      Instances For
                        @[reducible, inline]
                        Equations
                        Instances For

                          (Weak) Negative Formula

                          inductive LO.FirstOrder.Semiformulaᵢ.IsNegative {L : Language} {ξ : Type u_2} {n : } :
                          Semiformulaᵢ L ξ nProp
                          Instances For
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.and_iff {L : Language} {ξ : Type u_1} {n : } {φ ψ : Semiformulaᵢ L ξ n} :
                            (φ ψ).IsNegative φ.IsNegative ψ.IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.imp_iff {L : Language} {ξ : Type u_1} {n : } {φ ψ : Semiformulaᵢ L ξ n} :
                            (φ ψ).IsNegative ψ.IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.all_iff {L : Language} {ξ : Type u_1} {n : } {φ : Semiformulaᵢ L ξ (n + 1)} :
                            (∀' φ).IsNegative φ.IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.not_verum {L : Language} {ξ : Type u_1} {n : } :
                            ¬.IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.not_or {L : Language} {ξ : Type u_1} {n : } {φ ψ : Semiformulaᵢ L ξ n} :
                            ¬(φ ψ).IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.not_ex {L : Language} {ξ : Type u_1} {n : } {φ : Semiformulaᵢ L ξ (n + 1)} :
                            ¬(∃' φ).IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.not_rel {L : Language} {ξ : Type u_1} {n k : } (r : L.Rel k) (v : Fin kSemiterm L ξ n) :
                            ¬(rel r v).IsNegative
                            @[simp]
                            theorem LO.FirstOrder.Semiformulaᵢ.IsNegative.neg {L : Language} {ξ : Type u_1} {n : } (φ : Semiformulaᵢ L ξ n) :
                            (φ).IsNegative