Documentation

DescriptiveComplexity.Invariant.Structure

The invariant structure Iᵏ A #

The quotient of the k-tuples of a structure by ≡ᵏ (DescriptiveComplexity.InvMap) – the invariant of Dawar–Lindell–Weinstein 1995 – as a structure over the invariant vocabulary DescriptiveComplexity.invLang:

The vocabulary does not depend on the agreement family S; the structure does, and interprets the bit of a base relation outside S as false, which keeps every interpretation well-defined on classes (DescriptiveComplexity.equivK_atomicAgreeOn_of_pairSub for the coordinate manipulations, the game move DescriptiveComplexity.EquivK.update for substitution).

The second half of the file equips Iᵏ A with a linear order: any coloring c₀ whose agreement is atomic agreement (the syntactic bit coloring of the definable refinement, in DescriptiveComplexity.Invariant.OrderDef) induces the canonical order DescriptiveComplexity.OrdK on tuples, which descends to a linear order on the classes (DescriptiveComplexity.invLinearOrder) – the order the simulated computation of the Abiteboul–Vianu argument runs on.

The invariant vocabulary #

The relation symbols of the invariant vocabulary: atomic-type bits, substitution along a pebble, rearrangement along a coordinate selection.

Instances For
    Dependency graph

    The invariant vocabulary: the relational language of the invariant structure.

    Equations
    Instances For
      Dependency graph
      Dependency graph

      The quotient #

      def DescriptiveComplexity.invSetoid {L : FirstOrder.Language} (S : Set ((n : ) × L.Relations n)) (k : ) (A : Type) [L.Structure A] :
      Setoid (Fin kA)

      k-tuples up to ≡ᵏ, as a setoid.

      Equations
      Instances For
        Dependency graph
        def DescriptiveComplexity.InvMap {L : FirstOrder.Language} (S : Set ((n : ) × L.Relations n)) (k : ) (A : Type) [L.Structure A] :

        The invariant structure's universe: the ≡ᵏ-classes of k-tuples over A, relative to the agreement family S.

        Equations
        Instances For
          Dependency graph
          def DescriptiveComplexity.InvMap.mk {L : FirstOrder.Language} {k : } {A : Type} [L.Structure A] (S : Set ((n : ) × L.Relations n)) (u : Fin kA) :
          InvMap S k A

          The class of a k-tuple.

          Equations
          Instances For
            Dependency graph
            theorem DescriptiveComplexity.InvMap.mk_eq_mk {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] {u v : Fin kA} :
            mk S u = mk S v EquivK (atomicAgreeOn S A k) u v
            Dependency graph
            theorem DescriptiveComplexity.InvMap.exists_rep {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] (c : InvMap S k A) :
            ∃ (u : Fin kA), mk S u = c
            Dependency graph
            instance DescriptiveComplexity.InvMap.instFinite {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] :
            Finite (InvMap S k A)
            Dependency graph
            Dependency graph
            def DescriptiveComplexity.InvMap.eqBitRel {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] (i j : Fin k) :
            InvMap S k AProp

            The equality bit on classes.

            Equations
            Instances For
              Dependency graph
              def DescriptiveComplexity.InvMap.relBitRel {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] (R : (n : ) × L.Relations n) (g : Fin R.fstFin k) :
              InvMap S k AProp

              The relation bit on classes: false outside the agreement family, the base relation at the selection inside it.

              Equations
              Instances For
                Dependency graph
                def DescriptiveComplexity.InvMap.subRel {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (j : Fin k) :
                InvMap S k AInvMap S k AProp

                The substitution relation on classes: the second class is reached from the first by a move of pebble j.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  Dependency graph
                  def DescriptiveComplexity.InvMap.rearrRel {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (σ : Fin kFin k) :
                  InvMap S k AInvMap S k AProp

                  The rearrangement relation on classes: the second class is the rearrangement of the first along σ.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    Dependency graph
                    @[instance_reducible]
                    instance DescriptiveComplexity.InvMap.structure' {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] :
                    (invLang L k).Structure (InvMap S k A)

                    The invariant structure: the interpretation of the invariant vocabulary on the ≡ᵏ-classes.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Dependency graph

                    Reading the relations at representatives #

                    theorem DescriptiveComplexity.InvMap.relMap_eqBit {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (i j : Fin k) (x : Fin 1InvMap S k A) (u : Fin kA) (hu : x 0 = mk S u) :
                    Dependency graph
                    theorem DescriptiveComplexity.InvMap.relMap_relBit {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (R : (n : ) × L.Relations n) (g : Fin R.fstFin k) (x : Fin 1InvMap S k A) (u : Fin kA) (hu : x 0 = mk S u) :
                    Dependency graph
                    theorem DescriptiveComplexity.InvMap.relMap_sub {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (j : Fin k) (x : Fin 2InvMap S k A) (u v : Fin kA) (hu : x 0 = mk S u) (hv : x 1 = mk S v) :
                    Dependency graph
                    theorem DescriptiveComplexity.InvMap.relMap_rearr {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] [Finite A] (σ : Fin kFin k) (x : Fin 2InvMap S k A) (u v : Fin kA) (hu : x 0 = mk S u) (hv : x 1 = mk S v) :
                    Dependency graph

                    The linear order on the classes #

                    @[instance_reducible]
                    noncomputable def DescriptiveComplexity.invLinearOrder {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] {β : Type u_1} [LinearOrder β] {c₀ : (Fin kA)β} [Finite A] (hc : colorAgree c₀ = atomicAgreeOn S A k) :

                    Any coloring whose agreement is atomic agreement induces, through the canonical order on tuples (DescriptiveComplexity.OrdK), a linear order on the ≡ᵏ-classes (decidability by choice).

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      Dependency graph
                      theorem DescriptiveComplexity.invLinearOrder_le_iff {L : FirstOrder.Language} {S : Set ((n : ) × L.Relations n)} {k : } {A : Type} [L.Structure A] {β : Type u_1} [LinearOrder β] {c₀ : (Fin kA)β} [Finite A] (hc : colorAgree c₀ = atomicAgreeOn S A k) (u v : Fin kA) :
                      InvMap.mk S u InvMap.mk S v OrdK c₀ u v EquivK (atomicAgreeOn S A k) u v

                      The order on classes, read at representatives: strictly below in the canonical order, or equivalent.

                      Dependency graph