Documentation

DescriptiveComplexity.SecondOrderNewExpPull

The block a problem over an expansion is guessed in #

NEXPTIME ⊆ ∃SO[new, exp c d] rewrites a Σ₁ definition over an exponential expansion as a Σ₁ definition with value invention. Everything the rewritten sentence guesses goes into one second-order block, and this file is where that block is fixed and its symbols named:

What the file proves is that an assignment of that block reads as the data the translations of DescriptiveComplexity.SecondOrderNewRead and DescriptiveComplexity.SecondOrderNewPoint ask for (DescriptiveComplexity.pullPointOn), given only that its order part is a linear order of the original elements.

The block #

@[reducible, inline]

The expansion's block with one nullary variable per tag: what an invented value has to stand for is an assignment of this, the tag included.

Equations
Instances For
    Dependency graph
    @[reducible, inline]

    Everything the sentence guesses besides the order: the meanings of the tagged block, and the source problem's own block.

    Equations
    Instances For
      Dependency graph
      @[reducible, inline]

      The block: the order variable, the meanings, and the source problem's block.

      Equations
      Instances For
        Dependency graph
        @[reducible, inline]

        The vocabulary the guessed sentence is written in.

        Equations
        Instances For
          Dependency graph

          The symbols #

          The meaning relation of a variable of the expansion's block.

          Equations
          Instances For
            Dependency graph

            The meaning relation of a tag: unary, the tag being a nullary variable.

            Equations
            Instances For
              Dependency graph

              A variable of the source problem's own block.

              Equations
              Instances For
                Dependency graph

                The symbols the translations of a defining sentence use.

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

                  The symbols the point formulas use.

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

                    What an assignment of the block reads as #

                    def DescriptiveComplexity.pullMeans {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (v : A ⊕ Fin m) :

                    The assignment of the expansion's block that an invented value means.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      Dependency graph
                      def DescriptiveComplexity.pullTags {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (v : A ⊕ Fin m) (t : X.Tag) :

                      The tags an invented value carries.

                      Equations
                      Instances For
                        Dependency graph
                        def DescriptiveComplexity.pullLe {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (a b : A) :

                        The order the order variable carries, as a relation on the instance.

                        Equations
                        Instances For
                          Dependency graph
                          theorem DescriptiveComplexity.pullPointOn {L : FirstOrder.Language} [L.IsRelational] {X : ExpExpansion L} {C : SOBlock} {A : Type} [L.Structure A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) [LinearOrder A] (hle : ∀ (a b : A), a ≤ b ↔ pullLe ρ a b) :

                          An assignment of the block reads as the data the translations ask for: its meaning variables give each invented value an assignment of the expansion's block, its tag variables the tags it carries, and its order variable the order of the instance – the last being a hypothesis, since which linear order the instance carries is the caller's to fix.

                          Dependency graph

                          The kernel #

                          The formulas interpreting the source problem's vocabulary – the expanded one together with its own block – over the extended universe: an atom of the expansion is DescriptiveComplexity.pointRelF, an atom of the block is the block variable itself.

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

                            The domain formula: the value is a point of the expanded universe.

                            Equations
                            Instances For
                              Dependency graph
                              def DescriptiveComplexity.pullCert {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} [L.Structure A] [LinearOrder A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (e : X.Map A → A ⊕ Fin m) :
                              C.Assignment (X.Map A)

                              The assignment of the source problem's block that the guess carries, read at the points.

                              Equations
                              Instances For
                                Dependency graph
                                structure DescriptiveComplexity.PointRep {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} [L.Structure A] [LinearOrder A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (e : X.Map A → A ⊕ Fin m) :

                                What names the points: an injection of the expanded universe into the invented values, whose image is exactly the values that are points, sending a point to a value that means its assignment and carries its tag and no other.

                                Instances For
                                  Dependency graph
                                  theorem DescriptiveComplexity.realize_pullKernel {L : FirstOrder.Language} [L.IsRelational] {X : ExpExpansion L} {C : SOBlock} {A : Type} [L.Structure A] [LinearOrder A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (h : PointOn (pullPointSyms X C) Sum.inl (pullMeans ρ) (pullTags ρ)) {e : X.Map A → A ⊕ Fin m} (hr : PointRep ρ e) (φ : (X.E.sum C.lang).Sentence) :
                                  (A ⊕ Fin m) ⊨ (pullSubst X C).substSentence (pullDom X C) φ ↔ X.Map A ⊨ φ

                                  The kernel, translated: the source problem's first-order kernel, with DescriptiveComplexity.pointRelF for the atoms of the expanded vocabulary, its own block variables for its own, and “is a point” as the domain formula, holds in the extended universe exactly when the kernel holds over the expansion.

                                  Dependency graph

                                  Naming the points #

                                  The meaning block sits inside the whole block.

                                  Equations
                                  Instances For
                                    Dependency graph
                                    Dependency graph

                                    The meaning part of an assignment of the whole block.

                                    Equations
                                    Instances For
                                      Dependency graph
                                      theorem DescriptiveComplexity.fin1_cases {M : Type} (v : M) (w : Fin 0 → M) :
                                      (fun (i : Fin (0 + 1)) => Fin.cases v w i) = fun (x : Fin (0 + 1)) => v
                                      Dependency graph

                                      The assignment of the tagged block a point stands for: its own assignment, and the tag bit of its tag alone.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        Dependency graph
                                        theorem DescriptiveComplexity.pullMeans_inr {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (k : Fin m) (i : X.B.ι) (ts : Fin (X.B.arity i) → A) :
                                        Dependency graph
                                        theorem DescriptiveComplexity.pullTags_inr {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (k : Fin m) (t : X.Tag) (ts : Fin ((taggedBlock X).arity (Sum.inr t)) → A) :
                                        Dependency graph
                                        noncomputable def DescriptiveComplexity.pullName {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} [L.Structure A] [LinearOrder A] [Finite A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (hbij : Function.Bijective (meanAtB (pullMeanPart ρ))) (p : X.Map A) :
                                        A ⊕ Fin m

                                        The value naming a point: the one whose meaning is the point's assignment, tag bit included.

                                        Equations
                                        Instances For
                                          Dependency graph
                                          theorem DescriptiveComplexity.meanAtB_symm {L : FirstOrder.Language} {X : ExpExpansion L} {C : SOBlock} {A : Type} [Finite A] {m : ℕ} (ρ : (pullBlock X C).Assignment (A ⊕ Fin m)) (hbij : Function.Bijective (meanAtB (pullMeanPart ρ))) (α : (taggedBlock X).Assignment A) (i : (taggedBlock X).ι) (ts : Fin ((taggedBlock X).arity i) → A) :
                                          meanAtB (pullMeanPart ρ) ((meanAssignEquiv (pullMeanPart ρ) hbij).symm α) ⟨i, ts⟩ ↔ α i ts
                                          Dependency graph

                                          The sentence, and what an assignment satisfying it gives #