Documentation

DescriptiveComplexity.Exponential.Trivialize

Trading an expansion's domain for a mark #

An expansion carves its universe out of the tagged assignments by a domain sentence, and that is what makes walking it hard over the base: the immediate successor of a point is the least point above it, and skipping the tagged assignments that fail the domain sentence is not a first-order condition – “no point in between” quantifies over block assignments.

This file removes the difficulty at the source. X.trivialize is the same expansion with the same tags and the same block, its domain sentence replaced by and the old domain kept as a new unary symbol of the expanded vocabulary. Its universe is therefore every tagged assignment, where the successor is the plain binary increment (DescriptiveComplexity.SOBlock.succAssignF), and the old universe is the part the mark selects.

What has to move along is the problem: a walk over the old universe becomes a walk over the new one whose formulas are relativized to the mark (DescriptiveComplexity.ExpExpansion.relSpec), which is the standard guard insertion of DescriptiveComplexity.relativizeTo together with the renaming of the vocabulary. The two are done by one recursion here (DescriptiveComplexity.ExpExpansion.relLift) rather than composed, so that its correctness is a single induction stated directly at the inclusion of the old universe into the new – which is what the walk correspondence consumes.

The inclusion is definitional: the trivialized expansion has the same tags and the same block, so its points are the same pairs, its order is the same order, and its relations are given by the same sentences. Nothing but the domain condition changes, and that is a proof field of the subtype.

The marking vocabulary #

Relation symbols of the marking vocabulary: one unary symbol.

  • real : markRel 1

    real x: the point x was in the domain of the original expansion.

Instances For
    Dependency graph
    Dependency graph
    Dependency graph

    The vocabulary of a single unary relation, marking the points an expansion's domain sentence admits.

    Equations
    Instances For
      Dependency graph
      Dependency graph

      The trivialized expansion #

      Reading a sentence over one copy of the block inside the one-fold replication, which is the shape a defining sentence of a unary symbol has.

      Equations
      Instances For
        Dependency graph
        Dependency graph

        The expansion with a trivial domain: the same tags and the same block, so the same candidate points, but every one of them admitted, the old domain sentence surviving as the defining sentence of a new unary symbol.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Dependency graph
          @[reducible, inline]

          The marking symbol of the trivialized vocabulary.

          Equations
          Instances For
            Dependency graph

            Every candidate point is a point of the trivialized expansion.

            Dependency graph

            A point of the trivialized expansion, from a candidate point.

            Equations
            Instances For
              Dependency graph

              The inclusion of the original universe into the trivialized one.

              Equations
              Instances For
                Dependency graph
                Dependency graph
                Dependency graph

                The relations are unchanged: a relation of the original vocabulary holds of included points exactly when it held of them.

                Dependency graph

                The included points are exactly the marked ones.

                Dependency graph

                The order is unchanged: the trivialized expansion orders its points by the same key, tag first and then the assignment as a binary number.

                Dependency graph

                Relativizing a formula to the mark #

                A term of the original vocabulary, read in the marked one: over relational vocabularies a term is a variable, so there is nothing to do.

                Equations
                Instances For
                  Dependency graph

                  A relation symbol of the original vocabulary, in the marked one.

                  Equations
                  Instances For
                    Dependency graph
                    Dependency graph
                    Dependency graph

                    Lifting and relativizing at once: the formula read in the trivialized expansion, with every quantifier restricted to the marked points. Composing FirstOrder.Language.LHom.onBoundedFormula with DescriptiveComplexity.relativizeTo would do the same, but this way its correctness is one induction, stated directly at the inclusion of the old universe into the new.

                    Equations
                    Instances For
                      Dependency graph
                      Dependency graph
                      theorem DescriptiveComplexity.ExpExpansion.realize_termLift_elim {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {β : Type} {n : } (v : βX.Map A) (xs : Fin nX.Map A) (t : (X.E.sum FirstOrder.Language.order).Term (β Fin n)) :
                      Dependency graph
                      theorem DescriptiveComplexity.ExpExpansion.realize_markF {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {β : Type} (v : βX.trivialize.Map A) (x : β) :
                      (X.markF x).Realize v ∃ (p : X.Map A), trivIncl p = v x
                      Dependency graph
                      theorem DescriptiveComplexity.ExpExpansion.realize_relLift {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {β : Type} {n : } (φ : (X.E.sum FirstOrder.Language.order).BoundedFormula β n) (v : βX.Map A) (xs : Fin nX.Map A) :
                      ((X.relLift φ).Realize (fun (b : β) => trivIncl (v b)) fun (i : Fin n) => trivIncl (xs i)) φ.Realize v xs

                      The relativized formula says of the marked points what the original said of the old ones.

                      Dependency graph

                      The relativized formula, at no bound variables.

                      Dependency graph

                      The walk, carried over #

                      The walk of a specification, carried to the trivialized expansion: every formula relativized to the mark, and the mark of the tuple required wherever the walk enters a node – at a source, and at the target of a step.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        Dependency graph
                        def DescriptiveComplexity.ExpExpansion.relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] {spec : TCSpec X.E} (a : spec.Node (X.Map A)) :
                        (X.relSpec spec).Node (X.trivialize.Map A)

                        A node of the carried walk: the same mode, the tuple included.

                        Equations
                        Instances For
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.realize_marks {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} {β : Type} (sel : Fin spec.kβ) (v : βX.trivialize.Map A) :
                          (listInf (List.map (fun (i : Fin spec.k) => X.markF (sel i)) (List.finRange spec.k))).Realize v ∀ (i : Fin spec.k), ∃ (p : X.Map A), trivIncl p = v (sel i)

                          The conjoined marks hold exactly of a tuple of included points.

                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.isSrc_relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} (a : spec.Node (X.Map A)) :
                          (X.relSpec spec).IsSrc (relNode a) spec.IsSrc a
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.isTgt_relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} (a : spec.Node (X.Map A)) :
                          (X.relSpec spec).IsTgt (relNode a) spec.IsTgt a
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.step_relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} (a b : spec.Node (X.Map A)) :
                          (X.relSpec spec).Step (relNode a) (relNode b) spec.Step a b
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.exists_relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] {spec : TCSpec X.E} {u : (X.relSpec spec).Node (X.trivialize.Map A)} (h : ∀ (i : Fin (X.relSpec spec).k), ∃ (p : X.Map A), trivIncl p = u.2 i) :
                          ∃ (a : spec.Node (X.Map A)), relNode a = u

                          A node whose points are all marked is the image of a node of the original walk.

                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.exists_relNode_of_isSrc {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} {u : (X.relSpec spec).Node (X.trivialize.Map A)} (h : (X.relSpec spec).IsSrc u) :
                          ∃ (a : spec.Node (X.Map A)), relNode a = u
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.exists_relNode_of_step {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} {u v : (X.relSpec spec).Node (X.trivialize.Map A)} (h : (X.relSpec spec).Step u v) :
                          ∃ (b : spec.Node (X.Map A)), relNode b = v
                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.reach_relSpec {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} (a : spec.Node (X.Map A)) {v : (X.relSpec spec).Node (X.trivialize.Map A)} :
                          (X.relSpec spec).Reach (relNode a) v∃ (b : spec.Node (X.Map A)), relNode b = v spec.Reach a b

                          Reachability is carried over, in both directions: a walk of the carried specification that starts at an included node stays included, step by step.

                          Dependency graph
                          theorem DescriptiveComplexity.ExpExpansion.reach_relNode {L : FirstOrder.Language} {X : ExpExpansion L} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] {spec : TCSpec X.E} {a b : spec.Node (X.Map A)} :
                          spec.Reach a b(X.relSpec spec).Reach (relNode a) (relNode b)
                          Dependency graph

                          The carried walk accepts exactly what the original one did.

                          Dependency graph