Definable Sets #
This file defines what it means for a set over a first-order structure to be definable.
Main Definitions #
- A
first_order.language.definable_set
is defined so thatL.definable_set M α
is the boolean algebra of subsets ofα → M
defined by formulas.
Main Results #
L.definable_set M α
forms a `boolean_algebra.
Definability #
structure
first_order.language.is_definable
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
(s : set (α → M)) :
Prop
- exists_formula : ∃ (φ : L.formula α), s = set_of (first_order.language.realize_formula M φ)
A subset of a finite Cartesian product of a structure is definable when membership in the set is given by a first-order formula.
@[simp]
theorem
first_order.language.is_definable_empty
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
@[simp]
theorem
first_order.language.is_definable_univ
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
@[simp]
theorem
first_order.language.is_definable.inter
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{f g : set (α → M)}
(hf : L.is_definable f)
(hg : L.is_definable g) :
L.is_definable (f ∩ g)
@[simp]
theorem
first_order.language.is_definable.union
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{f g : set (α → M)}
(hf : L.is_definable f)
(hg : L.is_definable g) :
L.is_definable (f ∪ g)
@[simp]
theorem
first_order.language.is_definable.compl
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s : set (α → M)}
(hf : L.is_definable s) :
L.is_definable sᶜ
@[simp]
theorem
first_order.language.is_definable.sdiff
{L : first_order.language}
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : set (α → M)}
(hs : L.is_definable s)
(ht : L.is_definable t) :
L.is_definable (s \ t)
def
first_order.language.definable_set
(L : first_order.language)
(M : Type u_3)
[L.Structure M]
(α : Type)
[fintype α] :
Type u_3
Definable sets are subsets of finite Cartesian products of a structure such that membership is given by a first-order formula.
Equations
- L.definable_set M α = {s // L.is_definable s}
@[protected, instance]
def
first_order.language.definable_set.has_top
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
has_top (L.definable_set M α)
@[protected, instance]
def
first_order.language.definable_set.has_bot
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
has_bot (L.definable_set M α)
@[protected, instance]
def
first_order.language.definable_set.inhabited
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
inhabited (L.definable_set M α)
Equations
@[protected, instance]
def
first_order.language.definable_set.pi.set_like
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
set_like (L.definable_set M α) (α → M)
Equations
- first_order.language.definable_set.pi.set_like L = {coe := subtype.val (λ (s : set (α → M)), L.is_definable s), coe_injective' := _}
@[simp]
theorem
first_order.language.definable_set.mem_top
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.coe_top
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
@[simp]
theorem
first_order.language.definable_set.not_mem_bot
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.coe_bot
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
@[protected, instance]
def
first_order.language.definable_set.lattice
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
lattice (L.definable_set M α)
Equations
theorem
first_order.language.definable_set.le_iff
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : L.definable_set M α} :
@[simp]
theorem
first_order.language.definable_set.coe_sup
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : L.definable_set M α} :
@[simp]
theorem
first_order.language.definable_set.mem_sup
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : L.definable_set M α}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.coe_inf
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : L.definable_set M α} :
@[simp]
theorem
first_order.language.definable_set.mem_inf
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s t : L.definable_set M α}
{x : α → M} :
@[protected, instance]
def
first_order.language.definable_set.bounded_order
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
bounded_order (L.definable_set M α)
@[protected, instance]
def
first_order.language.definable_set.distrib_lattice
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
distrib_lattice (L.definable_set M α)
Equations
- first_order.language.definable_set.distrib_lattice L = {sup := lattice.sup (first_order.language.definable_set.lattice L), le := lattice.le (first_order.language.definable_set.lattice L), lt := lattice.lt (first_order.language.definable_set.lattice L), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (first_order.language.definable_set.lattice L), inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _}
@[protected, instance]
def
first_order.language.definable_set.has_compl
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
has_compl (L.definable_set M α)
The complement of a definable set is also definable.
Equations
- first_order.language.definable_set.has_compl L = {compl := λ (_x : L.definable_set M α), first_order.language.definable_set.has_compl._match_1 L _x}
- first_order.language.definable_set.has_compl._match_1 L ⟨s, hs⟩ = ⟨sᶜ, _⟩
@[simp]
theorem
first_order.language.definable_set.mem_compl
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s : L.definable_set M α}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.coe_compl
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α]
{s : L.definable_set M α} :
@[protected, instance]
def
first_order.language.definable_set.boolean_algebra
(L : first_order.language)
{M : Type u_3}
[L.Structure M]
{α : Type}
[fintype α] :
boolean_algebra (L.definable_set M α)
Equations
- first_order.language.definable_set.boolean_algebra L = {sup := distrib_lattice.sup (first_order.language.definable_set.distrib_lattice L), le := distrib_lattice.le (first_order.language.definable_set.distrib_lattice L), lt := distrib_lattice.lt (first_order.language.definable_set.distrib_lattice L), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf (first_order.language.definable_set.distrib_lattice L), inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _, sdiff := λ (s t : L.definable_set M α), s ⊓ tᶜ, bot := bounded_order.bot (first_order.language.definable_set.bounded_order L), sup_inf_sdiff := _, inf_inf_sdiff := _, compl := compl (first_order.language.definable_set.has_compl L), top := bounded_order.top (first_order.language.definable_set.bounded_order L), inf_compl_le_bot := _, top_le_sup_compl := _, le_top := _, bot_le := _, sdiff_eq := _}