Definable Sets #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4. This file defines what it means for a set over a first-order structure to be definable.
Main Definitions #
set.definable
is defined so thatA.definable L s
indicates that the sets
of a finite cartesian power ofM
is definable with parameters inA
.set.definable₁
is defined so thatA.definable₁ L s
indicates that(s : set M)
is definable with parameters inA
.set.definable₂
is defined so thatA.definable₂ L s
indicates that(s : set (M × M))
is definable with parameters inA
.- A
first_order.language.definable_set
is defined so thatL.definable_set A α
is the boolean algebra of subsets ofα → M
defined by formulas with parameters inA
.
Main Results #
L.definable_set A α
forms aboolean_algebra
set.definable.image_comp
shows that definability is closed under projections in finite dimensions.
def
set.definable
{M : Type w}
(A : set M)
(L : first_order.language)
[L.Structure M]
{α : Type u_1}
(s : set (α → M)) :
Prop
A subset of a finite Cartesian product of a structure is definable over a set A
when
membership in the set is given by a first-order formula with parameters from A
.
theorem
set.definable.map_expansion
{M : Type w}
{A : set M}
{L : first_order.language}
[L.Structure M]
{α : Type u_1}
{s : set (α → M)}
{L' : first_order.language}
[L'.Structure M]
(h : A.definable L s)
(φ : L →ᴸ L')
[φ.is_expansion_on M] :
A.definable L' s
theorem
set.definable_iff_empty_definable_with_params
{M : Type w}
{A : set M}
{L : first_order.language}
[L.Structure M]
{α : Type u_1}
{s : set (α → M)} :
@[simp]
theorem
set.definable_empty
{M : Type w}
{A : set M}
{L : first_order.language}
[L.Structure M]
{α : Type u_1} :
@[simp]
theorem
set.definable_univ
{M : Type w}
{A : set M}
{L : first_order.language}
[L.Structure M]
{α : Type u_1} :
def
set.definable₁
{M : Type w}
(A : set M)
(L : first_order.language)
[L.Structure M]
(s : set M) :
Prop
A 1-dimensional version of definable
, for set M
.
def
set.definable₂
{M : Type w}
(A : set M)
(L : first_order.language)
[L.Structure M]
(s : set (M × M)) :
Prop
A 2-dimensional version of definable
, for set (M × M)
.
def
first_order.language.definable_set
(L : first_order.language)
{M : Type w}
[L.Structure M]
(A : set M)
(α : Type u_1) :
Type (max u_1 w)
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 A α = {s // A.definable L s}
Instances for first_order.language.definable_set
- first_order.language.definable_set.pi.set_like
- first_order.language.definable_set.has_top
- first_order.language.definable_set.has_bot
- first_order.language.definable_set.has_sup
- first_order.language.definable_set.has_inf
- first_order.language.definable_set.has_compl
- first_order.language.definable_set.has_sdiff
- first_order.language.definable_set.inhabited
- first_order.language.definable_set.boolean_algebra
@[protected, instance]
def
first_order.language.definable_set.pi.set_like
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
set_like (L.definable_set A α) (α → M)
Equations
- first_order.language.definable_set.pi.set_like = {coe := subtype.val (λ (s : set (α → M)), A.definable L s), coe_injective' := _}
@[protected, instance]
def
first_order.language.definable_set.has_top
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_top (L.definable_set A α)
@[protected, instance]
def
first_order.language.definable_set.has_bot
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_bot (L.definable_set A α)
@[protected, instance]
def
first_order.language.definable_set.has_sup
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_sup (L.definable_set A α)
Equations
- first_order.language.definable_set.has_sup = {sup := λ (s t : L.definable_set A α), ⟨↑s ∪ ↑t, _⟩}
@[protected, instance]
def
first_order.language.definable_set.has_inf
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_inf (L.definable_set A α)
Equations
- first_order.language.definable_set.has_inf = {inf := λ (s t : L.definable_set A α), ⟨↑s ∩ ↑t, _⟩}
@[protected, instance]
def
first_order.language.definable_set.has_compl
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_compl (L.definable_set A α)
Equations
- first_order.language.definable_set.has_compl = {compl := λ (s : L.definable_set A α), ⟨(↑s)ᶜ, _⟩}
@[protected, instance]
def
first_order.language.definable_set.has_sdiff
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
has_sdiff (L.definable_set A α)
Equations
- first_order.language.definable_set.has_sdiff = {sdiff := λ (s t : L.definable_set A α), ⟨↑s \ ↑t, _⟩}
@[protected, instance]
def
first_order.language.definable_set.inhabited
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
inhabited (L.definable_set A α)
Equations
theorem
first_order.language.definable_set.le_iff
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{s t : L.definable_set A α} :
@[simp]
theorem
first_order.language.definable_set.mem_top
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.not_mem_bot
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.mem_sup
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{s t : L.definable_set A α}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.mem_inf
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{s t : L.definable_set A α}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.mem_compl
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{s : L.definable_set A α}
{x : α → M} :
@[simp]
theorem
first_order.language.definable_set.mem_sdiff
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
{s t : L.definable_set A α}
{x : α → M} :
@[simp, norm_cast]
theorem
first_order.language.definable_set.coe_sup
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
(s t : L.definable_set A α) :
@[simp, norm_cast]
theorem
first_order.language.definable_set.coe_inf
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
(s t : L.definable_set A α) :
@[simp, norm_cast]
theorem
first_order.language.definable_set.coe_compl
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
(s : L.definable_set A α) :
@[simp, norm_cast]
theorem
first_order.language.definable_set.coe_sdiff
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1}
(s t : L.definable_set A α) :
@[protected, instance]
def
first_order.language.definable_set.boolean_algebra
{L : first_order.language}
{M : Type w}
[L.Structure M]
{A : set M}
{α : Type u_1} :
boolean_algebra (L.definable_set A α)
Equations
- first_order.language.definable_set.boolean_algebra = function.injective.boolean_algebra coe first_order.language.definable_set.boolean_algebra._proof_1 first_order.language.definable_set.coe_sup first_order.language.definable_set.coe_inf first_order.language.definable_set.coe_top first_order.language.definable_set.coe_bot first_order.language.definable_set.coe_compl first_order.language.definable_set.coe_sdiff