Documentation

Mathlib.ModelTheory.Definability

Definable Sets #

This file defines what it means for a set over a first-order structure to be definable.

Main Definitions #

Main Results #

def Set.Definable {M : Type w} (A : Set M) (L : FirstOrder.Language) [L.Structure M] {α : Type u₁} (s : Set (αM)) :

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.

Equations
Instances For
    theorem Set.Definable.map_expansion {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} {L' : FirstOrder.Language} [L'.Structure M] (h : A.Definable L s) (φ : L →ᴸ L') [φ.IsExpansionOn M] :
    A.Definable L' s
    theorem Set.definable_iff_exists_formula_sum {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} :
    A.Definable L s ∃ (φ : L.Formula (A α)), s = {v : αM | φ.Realize (Sum.elim Subtype.val v)}
    theorem Set.empty_definable_iff {M : Type w} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} :
    .Definable L s ∃ (φ : L.Formula α), s = setOf φ.Realize
    theorem Set.definable_iff_empty_definable_with_params {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} :
    theorem Set.Definable.mono {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {B : Set M} {s : Set (αM)} (hAs : A.Definable L s) (hAB : A B) :
    B.Definable L s
    @[simp]
    theorem Set.definable_empty {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} :
    @[simp]
    theorem Set.definable_univ {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} :
    @[simp]
    theorem Set.Definable.inter {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {f g : Set (αM)} (hf : A.Definable L f) (hg : A.Definable L g) :
    A.Definable L (f g)
    @[simp]
    theorem Set.Definable.union {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {f g : Set (αM)} (hf : A.Definable L f) (hg : A.Definable L g) :
    A.Definable L (f g)
    theorem Set.definable_finset_inf {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) (s : Finset ι) :
    A.Definable L (s.inf f)
    theorem Set.definable_finset_sup {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) (s : Finset ι) :
    A.Definable L (s.sup f)
    theorem Set.definable_biInter_finset {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) (s : Finset ι) :
    A.Definable L (⋂ is, f i)
    theorem Set.definable_biUnion_finset {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) (s : Finset ι) :
    A.Definable L (⋃ is, f i)
    theorem Set.definable_iInter_of_finite {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} [Finite ι] {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) :
    A.Definable L (⋂ (i : ι), f i)
    theorem Set.definable_iUnion_of_finite {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {ι : Type u_2} [Finite ι] {f : ιSet (αM)} (hf : ∀ (i : ι), A.Definable L (f i)) :
    A.Definable L (⋃ (i : ι), f i)
    @[simp]
    theorem Set.Definable.compl {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} (hf : A.Definable L s) :
    @[simp]
    theorem Set.Definable.sdiff {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s t : Set (αM)} (hs : A.Definable L s) (ht : A.Definable L t) :
    A.Definable L (s \ t)
    @[simp]
    theorem Set.Definable.himp {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s t : Set (αM)} (hs : A.Definable L s) (ht : A.Definable L t) :
    A.Definable L (s t)
    theorem Set.Definable.preimage_comp {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} (f : αβ) {s : Set (αM)} (h : A.Definable L s) :
    A.Definable L ((fun (g : βM) => g f) ⁻¹' s)
    theorem Set.Definable.image_comp_equiv {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} {s : Set (βM)} (h : A.Definable L s) (f : α β) :
    A.Definable L ((fun (g : βM) => g f) '' s)
    theorem Set.definable_iff_finitely_definable {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {s : Set (αM)} :
    A.Definable L s ∃ (A0 : Finset M), A0 A (↑A0).Definable L s
    theorem Set.Definable.image_comp_sumInl_fin {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} (m : ) {s : Set (α Fin mM)} (h : A.Definable L s) :
    A.Definable L ((fun (g : α Fin mM) => g Sum.inl) '' s)

    This lemma is only intended as a helper for Definable.image_comp.

    theorem Set.Definable.image_comp_embedding {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} {s : Set (βM)} (h : A.Definable L s) (f : α β) [Finite β] :
    A.Definable L ((fun (g : βM) => g f) '' s)

    Shows that definability is closed under finite projections.

    theorem Set.Definable.image_comp {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} {s : Set (βM)} (h : A.Definable L s) (f : αβ) [Finite α] [Finite β] :
    A.Definable L ((fun (g : βM) => g f) '' s)

    Shows that definability is closed under finite projections.

    theorem Set.Definable.exists_of_finite {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} [Finite β] {S : Set (α βM)} (hS : A.Definable L S) :
    A.Definable L {v : αM | ∃ (u : βM), Sum.elim v u S}

    Finite existential quantifiers preserve definablity.

    theorem Set.Definable.forall_of_finite {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} [Finite β] {S : Set (α βM)} (hS : A.Definable L S) :
    A.Definable L {v : αM | ∀ (u : βM), Sum.elim v u S}

    Finite universal quantifiers preserve definablity.

    def Set.Definable₁ {M : Type w} (A : Set M) (L : FirstOrder.Language) [L.Structure M] (s : Set M) :

    A 1-dimensional version of Definable, for Set M.

    Equations
    Instances For
      def Set.Definable₂ {M : Type w} (A : Set M) (L : FirstOrder.Language) [L.Structure M] (s : Set (M × M)) :

      A 2-dimensional version of Definable, for Set (M × M).

      Equations
      Instances For

        A singleton is definable by parameter as itself.

        theorem Set.Definable.singleton_of_mem {M : Type w} (L : FirstOrder.Language) [L.Structure M] {a : M} {A : Set M} (ha : a A) :

        A singleton {a} is definable over any set A that contains a.

        The 2-dimensional diagonal is definable independent from parameters.

        def FirstOrder.Language.DefinableSet (L : Language) {M : Type w} [L.Structure M] (A : Set M) (α : Type u₁) :
        Type (max 0 u₁ w)

        Definable sets are subsets of finite Cartesian products of a structure such that membership is given by a first-order formula.

        Equations
        Instances For
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instSetLike {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          SetLike (L.DefinableSet A α) (αM)
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instTop {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Top (L.DefinableSet A α)
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instBot {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Bot (L.DefinableSet A α)
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instSup {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Max (L.DefinableSet A α)
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instInf {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Min (L.DefinableSet A α)
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instCompl {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instSDiff {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Equations
          @[implicit_reducible]
          noncomputable instance FirstOrder.Language.DefinableSet.instHImp {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Equations
          @[implicit_reducible]
          instance FirstOrder.Language.DefinableSet.instInhabited {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Equations
          theorem FirstOrder.Language.DefinableSet.le_iff {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {s t : L.DefinableSet A α} :
          s t s t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.mem_top {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {x : αM} :
          @[simp]
          theorem FirstOrder.Language.DefinableSet.notMem_bot {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {x : αM} :
          x
          @[simp]
          theorem FirstOrder.Language.DefinableSet.mem_sup {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {s t : L.DefinableSet A α} {x : αM} :
          x st x s x t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.mem_inf {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {s t : L.DefinableSet A α} {x : αM} :
          x st x s x t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.mem_compl {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {s : L.DefinableSet A α} {x : αM} :
          x s xs
          @[simp]
          theorem FirstOrder.Language.DefinableSet.mem_sdiff {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} {s t : L.DefinableSet A α} {x : αM} :
          x s \ t x s xt
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_top {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_bot {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          =
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_sup {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} (s t : L.DefinableSet A α) :
          (st) = s t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_inf {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} (s t : L.DefinableSet A α) :
          (st) = s t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_compl {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} (s : L.DefinableSet A α) :
          s = (↑s)
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_sdiff {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} (s t : L.DefinableSet A α) :
          ↑(s \ t) = s \ t
          @[simp]
          theorem FirstOrder.Language.DefinableSet.coe_himp {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} (s t : L.DefinableSet A α) :
          ↑(s t) = s t
          @[implicit_reducible]
          noncomputable instance FirstOrder.Language.DefinableSet.instBooleanAlgebra {L : Language} {M : Type w} [L.Structure M] {A : Set M} {α : Type u₁} :
          Equations
          def Set.DefinableFun {M : Type u_1} (L : FirstOrder.Language) [L.Structure M] {α : Type u_2} (A : Set M) (f : (αM)M) :

          A function from tuples of elements of M to M is definable if its graph is definable.

          Equations
          Instances For
            def Set.DefinableMap {M : Type u_1} (L : FirstOrder.Language) [L.Structure M] {α : Type u_2} {β : Type u_3} (A : Set M) (F : (αM)βM) :

            A family of functions is definable when each coordinate is definable.

            Equations
            Instances For
              theorem Set.DefinableFun.mono {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f : (αM)M} {B : Set M} (hAs : DefinableFun L A f) (hAB : A B) :
              theorem Set.DefinableFun.of_empty {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f : (αM)M} (hAs : DefinableFun L f) :
              theorem Set.empty_definableFun_iff {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {f : (αM)M} :
              theorem Set.definableFun_iff_empty_definableFun_with_params {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f : (αM)M} :
              theorem FirstOrder.Language.Term.definableFun_realize {M : Type u_1} {L : Language} [L.Structure M] {α : Type u_2} (t : L.Term α) :
              Set.DefinableFun L fun (v : αM) => realize v t

              A term is a definable function.

              A function symbol is a definable function.

              theorem FirstOrder.Language.definableFun_var {M : Type u_1} (L : Language) [L.Structure M] {α : Type u_2} (i : α) :
              Set.DefinableFun L fun (v : αM) => v i

              A coordinate projection is a definable function.

              theorem Set.DefinableFun.proj {M : Type u_1} (L : FirstOrder.Language) [L.Structure M] {α : Type u_2} {A : Set M} {i : α} :
              DefinableFun L A fun (v : αM) => v i
              theorem FirstOrder.Language.definableFun_const {M : Type u_1} (L : Language) [L.Structure M] {A : Set M} {a : M} (γ : Type u_4) (ha : a A) :
              Set.DefinableFun L A fun (x : γM) => a

              A constant function is a definable function.

              theorem Set.Definable.preimage_map {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {A : Set M} {α : Type u_4} {β : Type u_5} [Finite β] {F : (αM)βM} (hF : DefinableMap L A F) {S : Set (βM)} (hS : A.Definable L S) :
              A.Definable L (F ⁻¹' S)

              The preimage of a definable set under a definable map is definable.

              theorem Set.DefinableFun.comp {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {β : Type u_3} {A : Set M} {f : (αM)M} [Finite α] {g : (βM)αM} (hg : DefinableMap L A g) (hf : DefinableFun L A f) :
              DefinableFun L A fun (v : βM) => f (g v)
              theorem Set.DefinableFun.ite {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f : (αM)M} {p : (αM)Prop} {g : (αM)M} [DecidablePred p] (hp : A.Definable L (setOf p)) (hf : DefinableFun L A f) (hg : DefinableFun L A g) :
              DefinableFun L A fun (v : αM) => if p v then f v else g v
              theorem Set.DefinableFun.setOf_eq {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f g : (αM)M} (hf : DefinableFun L A f) (hg : DefinableFun L A g) :
              A.Definable L {v : αM | f v = g v}

              The set where two definable functions agree is definable.

              theorem Set.DefinableFun.setOf_eq_const {M : Type u_1} {L : FirstOrder.Language} [L.Structure M] {α : Type u_2} {A : Set M} {f : (αM)M} (hf : DefinableFun L A f) {a : M} (ha : a A) :
              A.Definable L {v : αM | f v = a}

              The preimage of a constant under a definable function is definable.

              def Set.TermDefinable {M : Type w} (A : Set M) (L : FirstOrder.Language) [L.Structure M] {α : Type u₁} (f : (αM)M) :

              A function from a Cartesian power of a structure to that structure is term-definable over a set A when the value of the function is given by a term with constants A.

              Equations
              Instances For
                theorem Set.TermDefinable.definable_tupleGraph {M : Type w} (A : Set M) (L : FirstOrder.Language) [L.Structure M] {α : Type u₁} {f : (αM)M} (h : A.TermDefinable L f) :

                Every TermDefinable function has a tupleGraph that is definable.

                theorem Set.TermDefinable.map_expansion {M : Type w} {A : Set M} {L : FirstOrder.Language} {L' : FirstOrder.Language} [L.Structure M] [L'.Structure M] {α : Type u₁} {f : (αM)M} (h : A.TermDefinable L f) (φ : L →ᴸ L') [φ.IsExpansionOn M] :
                theorem Set.termDefinable_empty_iff {M : Type w} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {f : (αM)M} :
                .TermDefinable L f ∃ (φ : L.Term α), f = fun (v : αM) => FirstOrder.Language.Term.realize v φ
                theorem Set.termDefinable_empty_withConstants_iff {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {f : (αM)M} :
                theorem Set.TermDefinable.mono {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {B : Set M} {f : (αM)M} (h : A.TermDefinable L f) (hAB : A B) :
                theorem Set.TermDefinable.trans {M : Type w} {A : Set M} {L : FirstOrder.Language} {L' : FirstOrder.Language} [L.Structure M] [L'.Structure M] {β : Type u_1} {f : (βM)M} (h₁ : A.TermDefinable L f) (h₂ : ∀ {n : } (g : (L.withConstants A).Functions n), A.TermDefinable L' fun (v : Fin nM) => FirstOrder.Language.Term.realize v g.term) :

                TermDefinable is transitive. If f is TermDefinable in a structure S on L, and all of the functions' realizations on S are TermDefinable on a structure T on L', then f is TermDefinable on T in L'.

                def Set.TermDefinable₁ {M : Type w} {A : Set M} (L : FirstOrder.Language) [L.Structure M] (f : MM) :

                A function from a structure to itself is term-definable over a set A when the value of the function is given by a term with constants A. Like TermDefinable but specialized for unary functions in order to write M → M instead of (Unit → M) → M.

                Equations
                Instances For
                  theorem Set.termDefinable₁_iff_termDefinable {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] (f : MM) :
                  TermDefinable₁ L f A.TermDefinable L fun (v : UnitM) => f (v ())

                  TermDefinable₁ is defined as TermDefinable on the Unit index type.

                  theorem Set.TermDefinable.termDefinable₁ {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] (f : MM) :
                  (A.TermDefinable L fun (v : UnitM) => f (v ()))TermDefinable₁ L f

                  Alias of the reverse direction of Set.termDefinable₁_iff_termDefinable.


                  TermDefinable₁ is defined as TermDefinable on the Unit index type.

                  theorem Set.TermDefinable₁.termDefinable {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] (f : MM) :
                  TermDefinable₁ L fA.TermDefinable L fun (v : UnitM) => f (v ())

                  Alias of the forward direction of Set.termDefinable₁_iff_termDefinable.


                  TermDefinable₁ is defined as TermDefinable on the Unit index type.

                  theorem Set.termDefinable₁_iff_exists_term {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {f : MM} :

                  A TermDefinable₁ function has a graph that's Definable₂.

                  The identity function is TermDefinable₁

                  theorem Set.TermDefinable.const {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} (C : (L.withConstants A).Constants) :
                  A.TermDefinable L (Function.const (αM) C)

                  Constant functions are TermDefinable, assuming the constant value is a language constant.

                  Constant functions are TermDefinable₁, assuming the constant value is a language constant.

                  theorem Set.TermDefinable.comp {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {β : Type u_1} {f : (αM)M} {g : α(βM)M} (hf : A.TermDefinable L f) (hg : ∀ (i : α), A.TermDefinable L (g i)) :
                  A.TermDefinable L fun (b : βM) => f fun (x : α) => g x b

                  A k-ary TermDefinable function composed with k TermDefinable others is TermDefinable.

                  theorem Set.TermDefinable₁.comp {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {f g : MM} (hf : TermDefinable₁ L f) (hg : TermDefinable₁ L g) :

                  TermDefinable₁ functions are closed under composition.

                  theorem Set.TermDefinable₁.comp_termDefinable {M : Type w} {A : Set M} {L : FirstOrder.Language} [L.Structure M] {α : Type u₁} {f : MM} {g : (αM)M} (hf : TermDefinable₁ L f) (hg : A.TermDefinable L g) :
                  A.TermDefinable L (f g)

                  A TermDefinable function postcomposed with TermDefinable₁ is TermDefinable.