Basics on First-Order Structures #
This file defines first-order languages and structures in the style of the Flypitch project.
Main Definitions #
- A
first_order.language.term
is defined so thatL.term α
is the type ofL
-terms with free variables indexed byα
. - A
first_order.language.formula
is defined so thatL.formula α
is the type ofL
-formulas with free variables indexed byα
. - A
first_order.language.sentence
is a formula with no free variables. - A
first_order.language.theory
is a set of sentences.
References #
For the Flypitch project:
- var : Π {L : first_order.language} {α : Type}, α → L.term α
- func : Π {L : first_order.language} {α : Type} {l : ℕ}, L.functions l → (fin l → L.term α) → L.term α
A term on α
is either a variable indexed by an element of α
or a function symbol applied to simpler terms.
Relabels a term's variables along a particular function.
Equations
- first_order.language.term.relabel g (first_order.language.term.func f ts) = first_order.language.term.func f (λ (i : fin a_2), first_order.language.term.relabel g (ts i))
- first_order.language.term.relabel g (first_order.language.term.var i) = first_order.language.term.var (g i)
Equations
- first_order.language.term.has_coe = {coe := λ (c : L.const), first_order.language.term.func c fin_zero_elim}
A term t
with variables indexed by α
can be evaluated by giving a value to each variable.
Equations
- first_order.language.realize_term v (first_order.language.term.func f ts) = first_order.language.Structure.fun_map f (λ (i : fin a_5), first_order.language.realize_term v (ts i))
- first_order.language.realize_term v (first_order.language.term.var k) = v k
- bd_falsum : Π {L : first_order.language} {α : Type} {n : ℕ}, L.bounded_formula α n
- bd_equal : Π {L : first_order.language} {α : Type} {n : ℕ}, L.term (α ⊕ fin n) → L.term (α ⊕ fin n) → L.bounded_formula α n
- bd_rel : Π {L : first_order.language} {α : Type} {n l : ℕ}, L.relations l → (fin l → L.term (α ⊕ fin n)) → L.bounded_formula α n
- bd_imp : Π {L : first_order.language} {α : Type} {n : ℕ}, L.bounded_formula α n → L.bounded_formula α n → L.bounded_formula α n
- bd_all : Π {L : first_order.language} {α : Type} {n : ℕ}, L.bounded_formula α (n + 1) → L.bounded_formula α n
bounded_formula α n
is the type of formulas with free variables indexed by α
and up to n
additional free variables.
formula α
is the type of formulas with all free variables indexed by α
.
Equations
- L.formula α = L.bounded_formula α 0
A sentence is a formula with no free variables.
A theory is a set of sentences.
The negation of a bounded formula is also a bounded formula.
Equations
Equations
- first_order.language.bounded_formula.has_inf = {inf := λ (f g : L.bounded_formula α n), first_order.language.bd_not (f.bd_imp (first_order.language.bd_not g))}
Equations
- first_order.language.bounded_formula.has_sup = {sup := λ (f g : L.bounded_formula α n), (first_order.language.bd_not f).bd_imp g}
Relabels a bounded formula's variables along a particular function.
Equations
- first_order.language.bounded_formula.relabel g f.bd_all = (first_order.language.bounded_formula.relabel g f).bd_all
- first_order.language.bounded_formula.relabel g (f₁.bd_imp f₂) = (first_order.language.bounded_formula.relabel g f₁).bd_imp (first_order.language.bounded_formula.relabel g f₂)
- first_order.language.bounded_formula.relabel g (first_order.language.bounded_formula.bd_rel R ts) = first_order.language.bounded_formula.bd_rel R (first_order.language.term.relabel (sum.elim (sum.inl ∘ g) sum.inr) ∘ ts)
- first_order.language.bounded_formula.relabel g (first_order.language.bounded_formula.bd_equal t₁ t₂) = first_order.language.bounded_formula.bd_equal (first_order.language.term.relabel (sum.elim (sum.inl ∘ g) sum.inr) t₁) (first_order.language.term.relabel (sum.elim (sum.inl ∘ g) sum.inr) t₂)
- first_order.language.bounded_formula.relabel g first_order.language.bounded_formula.bd_falsum = first_order.language.bounded_formula.bd_falsum
The equality of two terms as a first-order formula.
The graph of a function as a first-order formula.
Equations
A bounded formula can be evaluated as true or false by giving values to each free variable.
Equations
- first_order.language.realize_bounded_formula M f.bd_all v xs = ∀ (x : M), first_order.language.realize_bounded_formula M f v (fin.cons x xs)
- first_order.language.realize_bounded_formula M (f₁.bd_imp f₂) v xs = (first_order.language.realize_bounded_formula M f₁ v xs → first_order.language.realize_bounded_formula M f₂ v xs)
- first_order.language.realize_bounded_formula M (first_order.language.bounded_formula.bd_rel R ts) v xs = first_order.language.Structure.rel_map R (λ (i : fin a_11), first_order.language.realize_term (sum.elim v xs) (ts i))
- first_order.language.realize_bounded_formula M (first_order.language.bounded_formula.bd_equal t₁ t₂) v xs = (first_order.language.realize_term (sum.elim v xs) t₁ = first_order.language.realize_term (sum.elim v xs) t₂)
- first_order.language.realize_bounded_formula M first_order.language.bounded_formula.bd_falsum v xs = false
A bounded formula can be evaluated as true or false by giving values to each free variable.
Equations
A sentence can be evaluated as true or false in a structure.