Semantics of first-order logic #
This file defines the structure and the evaluation of terms and formulas by Tarski's truth definition.
@[reducible, inline]
Equations
Instances For
Equations
def
LO.FirstOrder.Structure.lMap
{L₁ : Language}
{L₂ : Language}
(φ : L₁.Hom L₂)
{M : Type w}
(S : Structure L₂ M)
:
Structure L₁ M
Equations
- LO.FirstOrder.Structure.lMap φ S = { func := fun (x : ℕ) (f : L₁.Func x) => LO.FirstOrder.Structure.func (φ.func f), rel := fun (x : ℕ) (r : L₁.Rel x) => LO.FirstOrder.Structure.rel (φ.rel r) }
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Structure.Decidable
(L : Language)
(M : Type w)
[s : Structure L M]
:
Type (max w u)
Equations
- LO.FirstOrder.Structure.Decidable L M = ({k : ℕ} → (r : L.Rel k) → (v : Fin k → M) → Decidable (LO.FirstOrder.Structure.rel r v))
Instances For
noncomputable instance
LO.FirstOrder.Structure.instDecidable
{L : Language}
{M : Type w}
[Structure L M]
:
Equations
def
LO.FirstOrder.Semiterm.val
{n : ℕ}
{ξ : Type u_1}
{L : Language}
{M : Type w}
(s : Structure L M)
(e : Fin n → M)
(ε : ξ → M)
:
Semiterm L ξ n → M
Equations
- LO.FirstOrder.Semiterm.val s e ε (LO.FirstOrder.Semiterm.bvar x_1) = e x_1
- LO.FirstOrder.Semiterm.val s e ε (LO.FirstOrder.Semiterm.fvar x_1) = ε x_1
- LO.FirstOrder.Semiterm.val s e ε (LO.FirstOrder.Semiterm.func f v) = LO.FirstOrder.Structure.func f fun (i : Fin arity) => LO.FirstOrder.Semiterm.val s e ε (v i)
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiterm.valm
{ξ : Type u_1}
{L : Language}
(M : Type w)
[s : Structure L M]
{n : ℕ}
(e : Fin n → M)
(ε : ξ → M)
:
Semiterm L ξ n → M
Equations
- LO.FirstOrder.Semiterm.valm M e ε = LO.FirstOrder.Semiterm.val s e ε
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiterm.realize
{L : Language}
{M : Type w}
(s : Structure L M)
(t : Term L M)
:
M
Equations
- LO.FirstOrder.Semiterm.realize s t = LO.FirstOrder.Semiterm.val s ![] id t
Instances For
theorem
LO.FirstOrder.Semiterm.val_eq_of_funEqOn
{n : ℕ}
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{e : Fin n → M}
{ε ε' : ξ → M}
[DecidableEq ξ]
(t : Semiterm L ξ n)
(h : Function.funEqOn t.FVar? ε ε')
:
def
LO.FirstOrder.Semiformula.EvalAux
{ξ : Type u_1}
{L : Language}
{M : Type w}
(s : Structure L M)
(ε : ξ → M)
{n : ℕ}
:
(Fin n → M) → Semiformula L ξ n → Prop
Equations
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ LO.FirstOrder.Semiformula.verum = True
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ LO.FirstOrder.Semiformula.falsum = False
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ (LO.FirstOrder.Semiformula.rel φ v) = LO.FirstOrder.Structure.rel φ fun (i : Fin arity) => LO.FirstOrder.Semiterm.val s x✝ ε (v i)
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ (LO.FirstOrder.Semiformula.nrel φ v) = ¬LO.FirstOrder.Structure.rel φ fun (i : Fin arity) => LO.FirstOrder.Semiterm.val s x✝ ε (v i)
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ (φ.and ψ) = (LO.FirstOrder.Semiformula.EvalAux s ε x✝ φ ∧ LO.FirstOrder.Semiformula.EvalAux s ε x✝ ψ)
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ (φ.or ψ) = (LO.FirstOrder.Semiformula.EvalAux s ε x✝ φ ∨ LO.FirstOrder.Semiformula.EvalAux s ε x✝ ψ)
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ φ.all = ∀ (x : M), LO.FirstOrder.Semiformula.EvalAux s ε (x :> x✝) φ
- LO.FirstOrder.Semiformula.EvalAux s ε x✝ φ.ex = ∃ (x : M), LO.FirstOrder.Semiformula.EvalAux s ε (x :> x✝) φ
Instances For
def
LO.FirstOrder.Semiformula.Eval
{ξ : Type u_1}
{L : Language}
{M : Type w}
{n : ℕ}
(s : Structure L M)
(e : Fin n → M)
(ε : ξ → M)
:
Semiformula L ξ n →ˡᶜ Prop
Equations
- LO.FirstOrder.Semiformula.Eval s e ε = { toTr := LO.FirstOrder.Semiformula.EvalAux s ε e, map_top' := ⋯, map_bot' := ⋯, map_neg' := ⋯, map_imply' := ⋯, map_and' := ⋯, map_or' := ⋯ }
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiformula.Evalm
{ξ : Type u_1}
{L : Language}
(M : Type w)
[s : Structure L M]
{n : ℕ}
(e : Fin n → M)
(ε : ξ → M)
:
Semiformula L ξ n →ˡᶜ Prop
Equations
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiformula.Evalf
{ξ : Type u_1}
{L : Language}
{M : Type w}
(s : Structure L M)
(ε : ξ → M)
:
Equations
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiformula.Evalb
{L : Language}
{M : Type w}
{n : ℕ}
(s : Structure L M)
(e : Fin n → M)
:
Semisentence L n →ˡᶜ Prop
Equations
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiformula.Evalfm
{ξ : Type u_1}
{L : Language}
(M : Type w)
[s : Structure L M]
(ε : ξ → M)
:
Equations
Instances For
@[reducible, inline]
abbrev
LO.FirstOrder.Semiformula.Evalbm
{L : Language}
{n : ℕ}
(M : Type w)
[s : Structure L M]
(e : Fin n → M)
:
Semiformula L Empty n →ˡᶜ Prop
Equations
- M ⊧/e = LO.FirstOrder.Semiformula.Evalb s e
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[reducible, inline]
Equations
Instances For
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_rel₁
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
{r : L.Rel 1}
(t : Semiterm L ξ n)
:
(Eval s e ε) (rel r ![t]) ↔ Structure.rel r ![Semiterm.val s e ε t]
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_rel₂
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
{r : L.Rel 2}
(t₁ t₂ : Semiterm L ξ n)
:
(Eval s e ε) (rel r ![t₁, t₂]) ↔ Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_nrel₁
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
{r : L.Rel 1}
(t : Semiterm L ξ n)
:
(Eval s e ε) (nrel r ![t]) ↔ ¬Structure.rel r ![Semiterm.val s e ε t]
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_nrel₂
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
{r : L.Rel 2}
(t₁ t₂ : Semiterm L ξ n)
:
(Eval s e ε) (nrel r ![t₁, t₂]) ↔ ¬Structure.rel r ![Semiterm.val s e ε t₁, Semiterm.val s e ε t₂]
theorem
LO.FirstOrder.Semiformula.eval_rew
{n₂ : ℕ}
{ξ₂ : Type u_2}
{L : Language}
{M : Type w}
{s : Structure L M}
{e₂ : Fin n₂ → M}
{ε₂ : ξ₂ → M}
{ξ₁ : Type u_1}
{n₁ : ℕ}
(ω : Rew L ξ₁ n₁ ξ₂ n₂)
(φ : Semiformula L ξ₁ n₁)
:
(Eval s e₂ ε₂) ((Rewriting.app ω) φ) ↔ (Eval s (Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.bvar) (Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.fvar)) φ
theorem
LO.FirstOrder.Semiformula.eval_rew_q
{n₂ : ℕ}
{ξ₂ : Type u_2}
{L : Language}
{M : Type w}
{s : Structure L M}
{e₂ : Fin n₂ → M}
{ξ₁ : Type u_1}
{n₁ : ℕ}
{x : M}
{ε₂ : ξ₂ → M}
(ω : Rew L ξ₁ n₁ ξ₂ n₂)
(φ : Semiformula L ξ₁ (n₁ + 1))
:
(Eval s (x :> e₂) ε₂) ((Rewriting.app ω.q) φ) ↔ (Eval s (x :> Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.bvar) (Semiterm.val s e₂ ε₂ ∘ ⇑ω ∘ Semiterm.fvar)) φ
theorem
LO.FirstOrder.Semiformula.eval_rewrite
{ξ₂ : Type u_2}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε₂ : ξ₂ → M}
{ξ₁ : Type u_1}
(f : ξ₁ → Semiterm L ξ₂ n)
(φ : Semiformula L ξ₁ n)
:
(Eval s e ε₂) ((Rewriting.app (Rew.rewrite f)) φ) ↔ (Eval s e fun (x : ξ₁) => Semiterm.val s e ε₂ (f x)) φ
theorem
LO.FirstOrder.Semiformula.eval_rewriteMap
{ξ₂ : Type u_2}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε₂ : ξ₂ → M}
{ξ₁ : Type u_1}
(f : ξ₁ → ξ₂)
(φ : Semiformula L ξ₁ n)
:
(Eval s e ε₂) ((Rewriting.app (Rew.rewriteMap f)) φ) ↔ (Eval s e fun (x : ξ₁) => ε₂ (f x)) φ
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_castLE
{n₂ : ℕ}
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{e₂ : Fin n₂ → M}
{ε : ξ → M}
{n₁ : ℕ}
(h : n₁ ≤ n₂)
(φ : Semiformula L ξ n₁)
:
(Eval s e₂ ε) ((Rewriting.app (Rew.castLE h)) φ) ↔ (Eval s (fun (x : Fin n₁) => e₂ (Fin.castLE h x)) ε) φ
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_bShift
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
{x : M}
(φ : Semiformula L ξ n)
:
(Eval s (x :> e) ε) ((Rewriting.app Rew.bShift) φ) ↔ (Eval s e ε) φ
theorem
LO.FirstOrder.Semiformula.eval_bShift'
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{ε : ξ → M}
{e' : Fin (n + 1) → M}
(φ : Semiformula L ξ n)
:
(Eval s e' ε) ((Rewriting.app Rew.bShift) φ) ↔ (Eval s (fun (x : Fin n) => e' x.succ) ε) φ
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_emb
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε : ξ → M}
(φ : Semiformula L Empty n)
:
(Eval s e ε) ↑φ ↔ (Eval s e Empty.elim) φ
theorem
LO.FirstOrder.Semiformula.eval_embSubsts
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ξ : Type u_1}
{ε : ξ → M}
{k : ℕ}
(w : Fin k → Semiterm L ξ n)
(σ : Semisentence L k)
:
(Eval s e ε) ((Rewriting.app (Rew.embSubsts w)) σ) ↔ (Evalb s fun (x : Fin k) => Semiterm.val s e ε (w x)) σ
@[simp]
theorem
LO.FirstOrder.Semiformula.eval_shift
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
(ε : ℕ → M)
{a : M}
(φ : SyntacticSemiformula L n)
:
theorem
LO.FirstOrder.Semiformula.eval_iff_of_funEqOn
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{ε ε' : ξ → M}
[DecidableEq ξ]
(φ : Semiformula L ξ n)
(h : Function.funEqOn φ.FVar? ε ε')
:
theorem
LO.FirstOrder.Semiformula.eval_toEmpty
{ξ : Type u_1}
{L : Language}
{M : Type w}
{s : Structure L M}
{n : ℕ}
{e : Fin n → M}
{f : ξ → M}
[DecidableEq ξ]
{φ : Semiformula L ξ n}
(hp : φ.freeVariables = ∅)
:
theorem
LO.FirstOrder.Structure.eval_ofEquiv_iff
{M : Type u_3}
{N : Type u_2}
{L : Language}
[s : Structure L M]
(Θ : M ≃ N)
{ξ : Type u_1}
{n : ℕ}
{e : Fin n → N}
{ε : ξ → N}
{φ : Semiformula L ξ n}
:
(Semiformula.Eval (ofEquiv Θ) e ε) φ ↔ (Semiformula.Eval s (⇑Θ.symm ∘ e) (⇑Θ.symm ∘ ε)) φ
theorem
LO.FirstOrder.Structure.evalf_ofEquiv_iff
{M : Type u_3}
{N : Type u_2}
{L : Language}
[s : Structure L M]
(Θ : M ≃ N)
{ξ : Type u_1}
{ε : ξ → N}
{φ : Formula L ξ}
:
(Semiformula.Evalf (ofEquiv Θ) ε) φ ↔ (Semiformula.Evalf s (⇑Θ.symm ∘ ε)) φ
instance
LO.FirstOrder.instSemanticsSyntacticFormulaStruc
{L : Language}
:
Semantics (SyntacticFormula L) (Struc L)
Equations
- One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev
LO.FirstOrder.Models
{L : Language}
(M : Type u_1)
[Nonempty M]
[s : Structure L M]
:
SyntacticFormula L → Prop
Equations
- LO.FirstOrder.Models M = LO.Semantics.Realize s.toStruc
Instances For
Equations
- LO.FirstOrder.«term_⊧ₘ_» = Lean.ParserDescr.trailingNode `LO.FirstOrder.«term_⊧ₘ_» 45 46 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊧ₘ ") (Lean.ParserDescr.cat `term 46))
Instances For
Equations
- LO.FirstOrder.«term_⊧ₘ₀_» = Lean.ParserDescr.trailingNode `LO.FirstOrder.«term_⊧ₘ₀_» 45 46 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊧ₘ₀ ") (Lean.ParserDescr.cat `term 46))
Instances For
Equations
- LO.FirstOrder.«term_⊧ₘ*_» = Lean.ParserDescr.trailingNode `LO.FirstOrder.«term_⊧ₘ*_» 45 46 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊧ₘ* ") (Lean.ParserDescr.cat `term 46))
Instances For
@[reducible, inline]
Equations
Instances For
Equations
- LO.FirstOrder.«term_⊧ₘᵣ_» = Lean.ParserDescr.trailingNode `LO.FirstOrder.«term_⊧ₘᵣ_» 45 46 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊧ₘᵣ ") (Lean.ParserDescr.cat `term 46))
Instances For
Equations
- LO.FirstOrder.«term_⊨_» = Lean.ParserDescr.trailingNode `LO.FirstOrder.«term_⊨_» 45 46 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊨ ") (Lean.ParserDescr.cat `term 46))
Instances For
@[reducible, inline]
Equations
Instances For
theorem
LO.FirstOrder.models_def
{L : Language}
{M : Type u_1}
[Nonempty M]
[s : Structure L M]
{φ : SyntacticFormula L}
:
(M ⊧ₘ φ) = ∀ (f : ℕ → M), (Semiformula.Evalf s f) φ
theorem
LO.FirstOrder.models_iff
{L : Language}
{M : Type u_1}
[Nonempty M]
[s : Structure L M]
{φ : SyntacticFormula L}
:
M ⊧ₘ φ ↔ ∀ (f : ℕ → M), (Semiformula.Evalf s f) φ
theorem
LO.FirstOrder.models₀_iff
{L : Language}
{M : Type u_1}
[Nonempty M]
[s : Structure L M]
{σ : Sentence L}
:
M ⊧ₘ₀ σ ↔ (Semiformula.Evalb s ![]) σ
theorem
LO.FirstOrder.models_iff₀
{L : Language}
{M : Type u_1}
[Nonempty M]
[s : Structure L M]
{φ : SyntacticFormula L}
:
M ⊧ₘ φ ↔ (Semiformula.Evalb s ![]) (Semiformula.close₀ φ)
theorem
LO.FirstOrder.models_iff_models
{L : Language}
{M : Type u_1}
[Nonempty M]
[s : Structure L M]
{φ : SyntacticFormula L}
:
theorem
LO.FirstOrder.satisfiable_intro
{L : Language}
{T : Theory L}
(M : Type v)
[Nonempty M]
[s : Structure L M]
(h : M ⊧ₘ* T)
:
Semantics.Satisfiable (Struc L) T
noncomputable def
LO.FirstOrder.ModelOfSat
{L : Language}
{T : Theory L}
(h : Semantics.Satisfiable (Struc L) T)
:
Type v
Equations
Instances For
instance
LO.FirstOrder.nonemptyModelOfSat
{L : Language}
{T : Theory L}
(h : Semantics.Satisfiable (Struc L) T)
:
Nonempty (ModelOfSat h)
noncomputable def
LO.FirstOrder.StructureModelOfSatAux
{L : Language}
{T : Theory L}
(h : Semantics.Satisfiable (Struc L) T)
:
{ s : Structure L (ModelOfSat h) // ModelOfSat h ⊧ₘ* T }
Equations
- One or more equations did not get rendered due to their size.
Instances For
noncomputable instance
LO.FirstOrder.StructureModelOfSat
{L : Language}
{T : Theory L}
(h : Semantics.Satisfiable (Struc L) T)
:
Structure L (ModelOfSat h)
Equations
theorem
LO.FirstOrder.ModelOfSat.models
{L : Language}
{T : Theory L}
(h : Semantics.Satisfiable (Struc L) T)
:
ModelOfSat h ⊧ₘ* T
theorem
LO.FirstOrder.consequence_iff_unsatisfiable
{L : Language}
{T : Theory L}
{φ : SyntacticFormula L}
:
T ⊨[Struc L] φ ↔ ¬Semantics.Satisfiable (Struc L) (insert (∼Semiformula.close φ) T)
theorem
LO.FirstOrder.Semiformula.models_lMap
{L₁ : Language}
{L₂ : Language}
{Φ : L₁.Hom L₂}
{M : Type u}
{s₂ : Structure L₂ M}
[Nonempty M]
{φ : SyntacticFormula L₁}
:
s₂.toStruc ⊧ (lMap Φ) φ ↔ (Structure.lMap Φ s₂).toStruc ⊧ φ
theorem
LO.FirstOrder.lMap_models_lMap
{L₁ L₂ : Language}
{Φ : L₁.Hom L₂}
{T : Theory L₁}
{φ : SyntacticFormula L₁}
(h : T ⊨[Struc L₁] φ)
:
Theory.lMap Φ T ⊨[Struc L₂] (Semiformula.lMap Φ) φ
@[reducible, inline]
abbrev
LO.FirstOrder.Structure.theory
(L : Language)
(M : Type u)
[Nonempty M]
[s : Structure L M]
:
Theory L
Equations
- LO.FirstOrder.Structure.theory L M = LO.Semantics.theory s.toStruc