Documentation

TauCeti.ModelTheory.RelationalConfiguration.Basic

Relational configurations #

A relational configuration on a vertex type V interprets the relational part of a one-sorted first-order language L: it is a truth value for every atom R(v₁, …, vₙ), an n-ary relation symbol of L together with an n-tuple of vertices. Tuple entries may repeat, so a configuration also records the value of R(v, v) and the like; nothing here assumes distinct coordinates.

Configurations carry the product σ-algebra, with one Boolean coordinate per atom. Pulling a configuration back along a map of vertex types f : V → W reads each atom of V at its image atom of W. This restriction is measurable and functorial: restriction along the identity is the identity, and restriction along a composite is the composite of the restrictions in the opposite order.

Functoriality makes restriction along inverses a left action of the permutations of V by relabelling vertices, and each permutation acts measurably. Over the vertex set ℕ, the finitely supported permutations TauCeti.FinitaryPerm act in the same way; this is the action under which laws of random structures on ℕ are invariant or ergodic.

The function symbols of L are permitted and play no role. A structure of L determines a configuration by deciding its relations (ofStructure).

Main definitions #

Main results #

An atom of the language L over the vertex type V: an n-ary relation symbol together with an n-tuple of vertices, whose entries may repeat.

Instances For

    A relational configuration of L on V: a truth value for every atom.

    Instances For

      Atoms #

      def TauCeti.RelationalConfiguration.atom {L : FirstOrder.Language} {V : Type u_1} {n : ℕ} (R : L.Relations n) (x : Fin n → V) :
      Atom L V

      The atom with relation symbol R and argument tuple x.

      Instances For
        theorem TauCeti.RelationalConfiguration.Atom.induction_atom {L : FirstOrder.Language} {V : Type u_1} {motive : Atom L V → Prop} (h : ∀ {n : ℕ} (R : L.Relations n) (x : Fin n → V), motive (atom R x)) (a : Atom L V) :
        motive a

        Every atom is atom R x for its relation symbol and tuple.

        def TauCeti.RelationalConfiguration.Atom.map {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} (f : V → W) (a : Atom L V) :
        Atom L W

        Relabel the arguments of an atom along a vertex map.

        Instances For
          @[simp]
          theorem TauCeti.RelationalConfiguration.Atom.map_atom {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} (f : V → W) {n : ℕ} (R : L.Relations n) (x : Fin n → V) :
          map f (atom R x) = atom R (f ∘ x)
          theorem TauCeti.RelationalConfiguration.Atom.map_comp {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} {X : Type u_3} (g : W → X) (f : V → W) (a : Atom L V) :
          map (g ∘ f) a = map g (map f a)

          Rename the relation symbol of an atom along a language map, keeping its arguments.

          Instances For

            Renaming the relation symbol of an atom commutes with relabelling its arguments.

            theorem FirstOrder.Language.LHom.comp_onAtom {L : Language} {V : Type u_1} {L' : Language} {L'' : Language} (g : L' →ᴸ L'') (f : L →ᴸ L') (a : TauCeti.RelationalConfiguration.Atom L V) :
            (g.comp f).onAtom a = g.onAtom (f.onAtom a)
            theorem TauCeti.RelationalConfiguration.Atom.exists_forall_map_val {L : FirstOrder.Language} (J : Finset (Atom L ℕ)) :
            ∃ (n : ℕ), ∀ a ∈ J, ∃ (b : Atom L (Fin n)), map Fin.val b = a

            Every finite set of atoms over ℕ has its vertices below some bound n, so its atoms are relabelled from atoms of Fin n.

            Configurations #

            The value of a configuration at the atom R(x).

            Instances For

              Evaluation reads the underlying Boolean function at an atom.

              Build a configuration from its value at every atom. A bare function on atoms only unfolds to a configuration, so this gives it the configuration type, with eval_mk to rewrite with.

              Instances For
                @[simp]
                theorem TauCeti.RelationalConfiguration.eval_mk {L : FirstOrder.Language} {V : Type u_1} (c : Atom L V → Bool) (a : Atom L V) :
                (mk c).eval a = c a
                theorem TauCeti.RelationalConfiguration.ext {L : FirstOrder.Language} {V : Type u_1} {c d : RelationalConfiguration L V} (h : ∀ (a : Atom L V), c.eval a = d.eval a) :
                c = d

                Configurations are determined by their values at atoms.

                theorem TauCeti.RelationalConfiguration.ext_iff {L : FirstOrder.Language} {V : Type u_1} {c d : RelationalConfiguration L V} :
                c = d ↔ ∀ (a : Atom L V), c.eval a = d.eval a

                A language with countably many relation symbols of each arity has countably many atoms over a countable vertex type.

                @[instance_reducible]

                Configurations carry the product σ-algebra, one Boolean coordinate per atom.

                Reading off one atom is measurable.

                Cylinders are measurable even when the language or carrier is uncountable.

                Building a configuration from its values at atoms is measurable.

                theorem TauCeti.RelationalConfiguration.measurable_iff {L : FirstOrder.Language} {V : Type u_1} {Ω : Type u_4} [MeasurableSpace Ω] {F : Ω → RelationalConfiguration L V} :
                Measurable F ↔ ∀ (a : Atom L V), Measurable fun (ω : Ω) => (F ω).eval a

                A map into configurations is measurable exactly when each atom coordinate is.

                Restriction #

                Pull a configuration back along a vertex map: the atom R(x) of V takes the value of the atom R(f ∘ x) of W.

                Instances For
                  @[simp]
                  theorem TauCeti.RelationalConfiguration.eval_restrict {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} (f : V → W) (c : RelationalConfiguration L W) (a : Atom L V) :
                  (restrict f c).eval a = c.eval (Atom.map f a)
                  theorem TauCeti.RelationalConfiguration.restrict_comp {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} {X : Type u_3} (g : W → X) (f : V → W) (c : RelationalConfiguration L X) :
                  restrict (g ∘ f) c = restrict f (restrict g c)

                  Restriction along a composite is the composite of the restrictions, in the opposite order.

                  Restriction is measurable: each atom coordinate of the restriction is an atom coordinate of the source.

                  Extension by false #

                  Relabelling atoms along an injective vertex map is injective.

                  noncomputable def TauCeti.RelationalConfiguration.extend {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} (f : V → W) (c : RelationalConfiguration L V) :

                  Extend a configuration along a vertex map f : V → W: an atom of W relabelled from an atom of V takes the value of such an atom, and every other atom is false. Along an injective map the relabelled atom is unique (eval_extend_map), so restriction undoes extension (restrict_extend).

                  Instances For
                    theorem TauCeti.RelationalConfiguration.eval_extend {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} (f : V → W) (c : RelationalConfiguration L V) (a : Atom L W) :
                    (extend f c).eval a = Function.extend (Atom.map f) c.eval (fun (x : Atom L W) => false) a

                    The value of an extension at an atom, through Function.extend.

                    @[simp]
                    theorem TauCeti.RelationalConfiguration.eval_extend_map {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} {f : V → W} (hf : Function.Injective f) (c : RelationalConfiguration L V) (a : Atom L V) :
                    (extend f c).eval (Atom.map f a) = c.eval a

                    Along an injective map, the relabelled atom R(f ∘ x) of the extension takes the value of the atom R(x).

                    theorem TauCeti.RelationalConfiguration.eval_extend_of_forall_ne {L : FirstOrder.Language} {V : Type u_1} {W : Type u_2} {f : V → W} (c : RelationalConfiguration L V) {a : Atom L W} (ha : ∀ (b : Atom L V), Atom.map f b ≠ a) :
                    (extend f c).eval a = false

                    An atom of W that is not relabelled from an atom of V is false in the extension.

                    @[simp]

                    Along an injective map, restriction undoes extension.

                    Extension is measurable: each atom coordinate of the extension is an atom coordinate of the source or constantly false.

                    Configurations of structures #

                    The configuration of an L-structure: an atom holds exactly when its relation does.

                    Instances For

                      Relabelling by permutations #

                      @[instance_reducible]

                      Permutations of V relabel configurations on V: σ acts by restriction along σ⁻¹, so that relabelling is a left action.

                      Relabelling by σ is restriction along σ⁻¹.

                      @[simp]

                      Relabelling by σ reads every atom at its relabelling along σ⁻¹.

                      @[instance_reducible]

                      Relabelling by permutations is a left action on configurations.

                      Finitary relabelling of configurations over ℕ #

                      @[instance_reducible]

                      Finitely supported permutations of ℕ relabel configurations over ℕ: g acts by restriction along g⁻¹, so that relabelling is a left action.

                      Relabelling by g is restriction along g⁻¹.

                      @[simp]

                      Relabelling by g reads every atom at its relabelling along g⁻¹.

                      Finitary relabelling by g is relabelling by the underlying permutation of ℕ.

                      @[instance_reducible]

                      Finitary relabelling is a left action on configurations over ℕ.