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 ξ
.
- bvar {L : Language} {ξ : Type u_1} {n : ℕ} : Fin n → Semiterm L ξ n
- fvar {L : Language} {ξ : Type u_1} {n : ℕ} : ξ → Semiterm L ξ n
- func {L : Language} {ξ : Type u_1} {n arity : ℕ} : L.Func arity → (Fin arity → Semiterm L ξ n) → Semiterm L ξ n
Instances For
- LO.FirstOrder.Arith.instReprSemitermORing_arithmetization
- LO.FirstOrder.Arith.instToStringSemitermORing_arithmetization
- LO.FirstOrder.Rew.instFunLikeSemiterm
- LO.FirstOrder.Semiterm.Operator.GoedelNumber.instGoedelQuote
- LO.FirstOrder.Semiterm.Operator.instCoeConst
- LO.FirstOrder.Semiterm.encodable
- LO.FirstOrder.Semiterm.instCoeEmptySyntacticSemiterm
- LO.FirstOrder.Semiterm.instCoeNat
- LO.FirstOrder.Semiterm.instCoeORing
- LO.FirstOrder.Semiterm.instInhabited
- LO.FirstOrder.Semiterm.instInhabited_1
- LO.FirstOrder.Semiterm.instRepr
- LO.FirstOrder.Semiterm.instToString
Equations
- LO.FirstOrder.«term&_» = Lean.ParserDescr.node `LO.FirstOrder.«term&_» 1024 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "&") (Lean.ParserDescr.cat `term 1024))
Equations
- LO.FirstOrder.«term#_» = Lean.ParserDescr.node `LO.FirstOrder.«term#_» 1024 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "#") (Lean.ParserDescr.cat `term 1024))
@[reducible, inline]
Equations
- LO.FirstOrder.Term L ξ = LO.FirstOrder.Semiterm L ξ 0
@[reducible, inline]
Equations
@[reducible, inline]
Equations
Equations
- LO.FirstOrder.Semiterm.instInhabited = { default := LO.FirstOrder.Semiterm.fvar default }
def
LO.FirstOrder.Semiterm.toStr
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[(k : ℕ) → ToString (L.Func k)]
[ToString ξ]
:
Equations
- (LO.FirstOrder.Semiterm.bvar x_1).toStr = "x_{" ++ toString (n - 1 - ↑x_1) ++ "}"
- (LO.FirstOrder.Semiterm.fvar x_1).toStr = "z_{" ++ toString x_1 ++ "}"
- (LO.FirstOrder.Semiterm.func c a).toStr = toString c
- (LO.FirstOrder.Semiterm.func f v).toStr = ("{" ++ toString f ++ "} \left(" ++ String.vecToStr fun (i : Fin (n_1 + 1)) => (v i).toStr) ++ "\right)"
instance
LO.FirstOrder.Semiterm.instRepr
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[(k : ℕ) → ToString (L.Func k)]
[ToString ξ]
:
Equations
- LO.FirstOrder.Semiterm.instRepr = { reprPrec := fun (t : LO.FirstOrder.Semiterm L ξ n) (x : ℕ) => Std.Format.text t.toStr }
instance
LO.FirstOrder.Semiterm.instToString
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[(k : ℕ) → ToString (L.Func k)]
[ToString ξ]
:
Equations
- LO.FirstOrder.Semiterm.instToString = { toString := LO.FirstOrder.Semiterm.toStr }
def
LO.FirstOrder.Semiterm.hasDecEq
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[(k : ℕ) → DecidableEq (L.Func k)]
[DecidableEq ξ]
(t u : Semiterm L ξ n)
:
Equations
- One or more equations did not get rendered due to their size.
- (LO.FirstOrder.Semiterm.bvar x_2).hasDecEq (LO.FirstOrder.Semiterm.bvar y) = ⋯.mpr (decEq x_2 y)
- (LO.FirstOrder.Semiterm.bvar a).hasDecEq (LO.FirstOrder.Semiterm.fvar a_1) = isFalse ⋯
- (LO.FirstOrder.Semiterm.bvar a).hasDecEq (LO.FirstOrder.Semiterm.func a_1 a_2) = isFalse ⋯
- (LO.FirstOrder.Semiterm.fvar a).hasDecEq (LO.FirstOrder.Semiterm.bvar a_1) = isFalse ⋯
- (LO.FirstOrder.Semiterm.fvar x_2).hasDecEq (LO.FirstOrder.Semiterm.fvar y) = ⋯.mpr (decEq x_2 y)
- (LO.FirstOrder.Semiterm.fvar a).hasDecEq (LO.FirstOrder.Semiterm.func a_1 a_2) = isFalse ⋯
- (LO.FirstOrder.Semiterm.func a a_1).hasDecEq (LO.FirstOrder.Semiterm.bvar a_2) = isFalse ⋯
- (LO.FirstOrder.Semiterm.func a a_1).hasDecEq (LO.FirstOrder.Semiterm.fvar a_2) = isFalse ⋯
instance
LO.FirstOrder.Semiterm.instDecidableEq
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[(k : ℕ) → DecidableEq (L.Func k)]
[DecidableEq ξ]
:
DecidableEq (Semiterm L ξ n)
Equations
- (LO.FirstOrder.Semiterm.bvar a).complexity = 0
- (LO.FirstOrder.Semiterm.fvar a).complexity = 0
- (LO.FirstOrder.Semiterm.func a v).complexity = (Finset.univ.sup fun (i : Fin arity) => (v i).complexity) + 1
Equations
- (LO.FirstOrder.Semiterm.bvar a).bv = {a}
- (LO.FirstOrder.Semiterm.fvar a).bv = ∅
- (LO.FirstOrder.Semiterm.func a v).bv = Finset.univ.biUnion fun (i : Fin arity) => (v i).bv
Equations
- (LO.FirstOrder.Semiterm.bvar a).freeVariables = ∅
- (LO.FirstOrder.Semiterm.fvar a).freeVariables = {a}
- (LO.FirstOrder.Semiterm.func a v).freeVariables = Finset.univ.biUnion fun (i : Fin arity) => (v i).freeVariables
@[simp]
theorem
LO.FirstOrder.Semiterm.freeVariables_bvar
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[DecidableEq ξ]
{x : Fin n}
:
@[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 k → Semiterm L ξ n)
:
(func f v).freeVariables = Finset.univ.biUnion fun (i : Fin k) => (v i).freeVariables
@[reducible, inline]
abbrev
LO.FirstOrder.Semiterm.FVar?
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[DecidableEq ξ]
(t : Semiterm L ξ n)
(x : ξ)
:
@[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 : ξ)
:
def
LO.FirstOrder.Semiterm.lMap
{L₁ : Language}
{L₂ : Language}
{ξ : Type u_1}
{n : ℕ}
(Φ : L₁.Hom L₂)
:
Equations
- LO.FirstOrder.Semiterm.lMap Φ (LO.FirstOrder.Semiterm.bvar a) = LO.FirstOrder.Semiterm.bvar a
- LO.FirstOrder.Semiterm.lMap Φ (LO.FirstOrder.Semiterm.fvar a) = LO.FirstOrder.Semiterm.fvar a
- LO.FirstOrder.Semiterm.lMap Φ (LO.FirstOrder.Semiterm.func a v) = LO.FirstOrder.Semiterm.func (Φ.func a) fun (i : Fin arity) => LO.FirstOrder.Semiterm.lMap Φ (v i)
@[simp]
theorem
LO.FirstOrder.Semiterm.freeVariables_lMap
{L₁ : Language}
{L₂ : Language}
{ξ : Type u_1}
{n : ℕ}
[DecidableEq ξ]
(Φ : L₁.Hom L₂)
(t : Semiterm L₁ ξ n)
:
instance
LO.FirstOrder.Semiterm.instInhabited_1
{L : Language}
{ξ : Type u_1}
{n : ℕ}
[L.ConstantInhabited]
:
Equations
- LO.FirstOrder.Semiterm.instInhabited_1 = { default := LO.FirstOrder.Semiterm.func default ![] }