Documentation

Foundation.Syntax.Predicate.Term

Terms of first-order logic #

This file defines the terms of first-order logic.

The bounded variables are denoted by #x for x : Fin n, and free variables are denoted by &x for x : ξ. t : Semiterm L ξ n is a (semi-)term of language L with bounded variables of Fin n and free variables of ξ.

inductive LO.FirstOrder.Semiterm (L : Language) (ξ : Type u_1) (n : ) :
Type (max u_1 u_2)

A semiterm of language L, with bound variables indexed by Fin n and free variables indexed by ξ. In LO.FirstOrder.Semiformula, bound variables are de Bruijn indices with a separate type from free variables.

Instances For

    &x is the free variable indexed by the element x : ξ.

    Equations
    Instances For

      #x is the bound variable with de Bruijn index x.

      Equations
      Instances For
        @[reducible, inline]
        abbrev LO.FirstOrder.Term (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
                @[reducible, inline]
                Equations
                Instances For
                  def LO.FirstOrder.Semiterm.toStr {L : Language} {ξ : Type u_1} {n : } [(k : ) → ToString (L.Func k)] [ToString ξ] :
                  Semiterm L ξ nString
                  Equations
                  Instances For
                    @[implicit_reducible]
                    instance LO.FirstOrder.Semiterm.instRepr {L : Language} {ξ : Type u_1} {n : } [(k : ) → ToString (L.Func k)] [ToString ξ] :
                    Repr (Semiterm L ξ n)
                    Equations
                    @[implicit_reducible]
                    instance LO.FirstOrder.Semiterm.instToString {L : Language} {ξ : Type u_1} {n : } [(k : ) → ToString (L.Func k)] [ToString ξ] :
                    Equations
                    def LO.FirstOrder.Semiterm.complexity {L : Language} {ξ : Type u_1} {n : } :
                    Semiterm L ξ n

                    The complexity of a semiterm, taking suprema at function symbols.

                    Equations
                    Instances For
                      @[simp]
                      theorem LO.FirstOrder.Semiterm.complexity_bvar {L : Language} {ξ : Type u_1} {n : } (x : Fin n) :
                      @[simp]
                      theorem LO.FirstOrder.Semiterm.complexity_fvar {L : Language} {ξ : Type u_1} {n : } (x : ξ) :
                      theorem LO.FirstOrder.Semiterm.complexity_func {L : Language} {ξ : Type u_1} {n k : } (f : L.Func k) (v : Fin kSemiterm L ξ n) :
                      (func f v).complexity = (Finset.univ.sup fun (i : Fin k) => (v i).complexity) + 1
                      @[simp]
                      theorem LO.FirstOrder.Semiterm.complexity_func_lt {L : Language} {ξ : Type u_1} {n k : } (f : L.Func k) (v : Fin kSemiterm L ξ n) (i : Fin k) :
                      @[reducible, inline]
                      abbrev LO.FirstOrder.Semiterm.func! {L : Language} {ξ : Type u_1} {n : } (k : ) (f : L.Func k) (v : Fin kSemiterm L ξ n) :
                      Semiterm L ξ n
                      Equations
                      Instances For
                        def LO.FirstOrder.Semiterm.bv {L : Language} {ξ : Type u_1} {n : } :
                        Semiterm L ξ nFinset (Fin n)

                        The set of bound variables occurring in a semiterm.

                        Equations
                        Instances For
                          @[simp]
                          theorem LO.FirstOrder.Semiterm.bv_bvar {L : Language} {ξ : Type u_1} {n : } {x : Fin n} :
                          (bvar x).bv = {x}
                          @[simp]
                          theorem LO.FirstOrder.Semiterm.bv_fvar {L : Language} {ξ : Type u_1} {n : } {x : ξ} :
                          (fvar x).bv =
                          theorem LO.FirstOrder.Semiterm.bv_func {L : Language} {ξ : Type u_1} {n k : } (f : L.Func k) (v : Fin kSemiterm L ξ n) :
                          (func f v).bv = Finset.univ.biUnion fun (i : Fin k) => (v i).bv
                          @[simp]
                          theorem LO.FirstOrder.Semiterm.bv_constant {L : Language} {ξ : Type u_1} {n : } (f : L.Func 0) (v : Fin 0Semiterm L ξ n) :
                          (func f v).bv =
                          def LO.FirstOrder.Semiterm.Positive {L : Language} {ξ : Type u_1} {n : } (t : Semiterm L ξ (n + 1)) :
                          Equations
                          Instances For
                            @[simp]
                            theorem LO.FirstOrder.Semiterm.Positive.bvar {L : Language} {ξ : Type u_1} {n : } {x : Fin (n + 1)} :
                            (bvar x).Positive 0 < x
                            @[simp]
                            theorem LO.FirstOrder.Semiterm.Positive.fvar {L : Language} {ξ : Type u_1} {n : } {x : ξ} :
                            @[simp]
                            theorem LO.FirstOrder.Semiterm.Positive.func {L : Language} {ξ : Type u_1} {n k : } (f : L.Func k) (v : Fin kSemiterm L ξ (n + 1)) :
                            (func f v).Positive ∀ (i : Fin k), (v i).Positive
                            def LO.FirstOrder.Semiterm.freeVariables {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] :
                            Semiterm L ξ nFinset ξ

                            The set of free variables occuring in a semiterm.

                            Equations
                            Instances For
                              @[simp]
                              @[simp]
                              theorem LO.FirstOrder.Semiterm.freeVariables_fvar {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] {x : ξ} :
                              theorem LO.FirstOrder.Semiterm.freeVariables_func {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] {k : } (f : L.Func k) (v : Fin kSemiterm L ξ n) :
                              @[simp]
                              theorem LO.FirstOrder.Semiterm.freeVariables_constant {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (f : L.Func 0) (v : Fin 0Semiterm L ξ n) :
                              @[simp]
                              theorem LO.FirstOrder.Semiterm.freeVariables_empty {L : Language} {n : } {ο : Type u_6} [IsEmpty ο] {t : Semiterm L ο n} :
                              @[reducible, inline]
                              abbrev LO.FirstOrder.Semiterm.FVar? {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (t : Semiterm L ξ n) (x : ξ) :
                              Equations
                              Instances For
                                @[simp]
                                theorem LO.FirstOrder.Semiterm.fvar?_bvar {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (x : Fin n) (z : ξ) :
                                @[simp]
                                theorem LO.FirstOrder.Semiterm.fvar?_fvar {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (x z : ξ) :
                                (fvar x).FVar? z x = z
                                @[simp]
                                theorem LO.FirstOrder.Semiterm.fvar?_func {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (x : ξ) {k : } (f : L.Func k) (v : Fin kSemiterm L ξ n) :
                                (func f v).FVar? x ∃ (i : Fin k), (v i).FVar? x
                                def LO.FirstOrder.Semiterm.lMap {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) :
                                Semiterm L₁ ξ nSemiterm L₂ ξ n

                                The map on terms induced from a homomorphism between languages.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem LO.FirstOrder.Semiterm.lMap_bvar {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) (x : Fin n) :
                                  lMap Φ (bvar x) = bvar x
                                  @[simp]
                                  theorem LO.FirstOrder.Semiterm.lMap_fvar {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) (x : ξ) :
                                  lMap Φ (fvar x) = fvar x
                                  @[simp]
                                  theorem LO.FirstOrder.Semiterm.lMap_func {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) {k : } (f : L₁.Func k) (v : Fin kSemiterm L₁ ξ n) :
                                  lMap Φ (func f v) = func (Φ.func f) (lMap Φ v)
                                  theorem LO.FirstOrder.Semiterm.lMap_func' {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) {k : } (f : L₁.Func k) (v : Fin kSemiterm L₁ ξ n) :
                                  lMap Φ (func f v) = func (Φ.func f) fun (i : Fin k) => lMap Φ (v i)
                                  @[simp]
                                  theorem LO.FirstOrder.Semiterm.lMap_positive {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } (Φ : L₁.Hom L₂) (t : Semiterm L₁ ξ (n + 1)) :
                                  @[simp]
                                  theorem LO.FirstOrder.Semiterm.freeVariables_lMap {L₁ : Language} {L₂ : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (Φ : L₁.Hom L₂) (t : Semiterm L₁ ξ n) :
                                  def LO.FirstOrder.Semiterm.idxOfFVar {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] (t : Semiterm L ξ n) :
                                  ξ
                                  Equations
                                  Instances For
                                    def LO.FirstOrder.Semiterm.enumarateFVar {L : Language} {ξ : Type u_1} {n : } [Inhabited ξ] (t : Semiterm L ξ n) :
                                    ξ
                                    Equations
                                    Instances For
                                      theorem LO.FirstOrder.Semiterm.enumarateFVar_idxOfFVar {L : Language} {ξ : Type u_1} {n : } [DecidableEq ξ] [Inhabited ξ] {t : Semiterm L ξ n} {x : ξ} (hx : x t.fvarList) :
                                      theorem LO.FirstOrder.Semiterm.mem_fvarList_iff_fvar? {L : Language} {ξ : Type u_1} {n : } {x : ξ} [DecidableEq ξ] {t : Semiterm L ξ n} :