Documentation

DescriptiveComplexity.SecondOrderNewMeans

Guessing what the invented values mean #

To read a problem over an exponential expansion as one with value invention, the invented values have to be the expansion's points, and a point is an assignment of a block: a relation over the instance. So the sentence guesses a meaning relation M, one more argument than the relation it names: M v x⃗ says that the invented value v names a relation holding of x⃗.

Three of the four conditions on that guess are ordinary first-order statements about the extended universe:

The fourth is what buys the one thing a sentence cannot say, that the guess is onto:

With injectivity, those last two make the meanings enumerate every relation, by DescriptiveComplexity.bijective_of_flipClosedP – a counting argument in Lean, not a condition in the logic. That is where the bound of an exponentially-bounded invention is spent.

The block and its atoms #

@[reducible, inline]

The block guessing the meanings: one relation of arity one more than the relation being named.

Equations
Instances For
    Dependency graph

    The meaning relation, as a symbol.

    Equations
    Instances For
      Dependency graph
      @[reducible, inline]

      The vocabulary a meaning guess is written in.

      Equations
      Instances For
        Dependency graph
        Dependency graph
        noncomputable def DescriptiveComplexity.meanAtom (L : FirstOrder.Language) (a : ) {α : Type} (v : α) (w : Fin aα) :
        (meanHost L a).Formula α

        The atom M v x⃗: the invented value v names a relation holding of x⃗.

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

          The four guards #

          The meaning relation is shaped: it relates an invented value to original elements, and nothing else.

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

            Some invented value names the empty relation.

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

              Distinct invented values name distinct relations.

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

                The meanings are closed under flipping one tuple: for every invented value and every tuple of original elements, some invented value names the same relation with that tuple flipped. This is what makes the guess onto.

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

                  The guards, realized #

                  def DescriptiveComplexity.meaningOf {a : } {A : Type} {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :
                  A Fin m(Fin aA Fin m)Prop

                  The relation an element names, read off the guess.

                  Equations
                  Instances For
                    Dependency graph
                    def DescriptiveComplexity.meanAt {a : } {A : Type} {m : } (ρ : (meanBlock a).Assignment (A Fin m)) (i : Fin m) :
                    (Fin aA)Prop

                    The relation an invented value names, at original arguments.

                    Equations
                    Instances For
                      Dependency graph
                      @[instance_reducible]
                      noncomputable def DescriptiveComplexity.meanStruc {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :

                      The host structure: the extended structure expanded by the guess.

                      Equations
                      Instances For
                        Dependency graph
                        theorem DescriptiveComplexity.realize_oldAtomM {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) {α : Type} (x : α) (v : αA Fin m) :
                        (oldAtomM L a x).Realize v IsOld (v x)
                        Dependency graph
                        theorem DescriptiveComplexity.realize_meanAtom {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) {α : Type} (x : α) (w : Fin aα) (v : αA Fin m) :
                        (meanAtom L a x w).Realize v meaningOf ρ (v x) fun (i : Fin a) => v (w i)
                        Dependency graph
                        theorem DescriptiveComplexity.realize_meanShaped {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :
                        (A Fin m) meanShaped L a ∀ (v : A Fin m) (w : Fin aA Fin m), meaningOf ρ v w¬IsOld v ∀ (i : Fin a), IsOld (w i)
                        Dependency graph
                        theorem DescriptiveComplexity.realize_meanEmpty {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :
                        (A Fin m) meanEmpty L a ∃ (v : A Fin m), ¬IsOld v ∀ (w : Fin aA Fin m), ¬meaningOf ρ v w
                        Dependency graph
                        theorem DescriptiveComplexity.realize_meanInj {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :
                        (A Fin m) meanInj L a ∀ (v u : A Fin m), ¬IsOld v¬IsOld u(∀ (w : Fin aA Fin m), meaningOf ρ v w meaningOf ρ u w)v = u
                        Dependency graph
                        theorem DescriptiveComplexity.realize_meanFlip {L : FirstOrder.Language} [L.IsRelational] {a : } {A : Type} [L.Structure A] {m : } (ρ : (meanBlock a).Assignment (A Fin m)) :
                        (A Fin m) meanFlip L a ∀ (v : A Fin m) (y : Fin aA Fin m), ¬IsOld v(∀ (i : Fin a), IsOld (y i))∃ (u : A Fin m), ¬IsOld u ∀ (w : Fin aA Fin m), meaningOf ρ u w (meaningOf ρ v w ¬∀ (i : Fin a), w i = y i)
                        Dependency graph
                        Dependency graph
                        theorem DescriptiveComplexity.bijective_meanAt {a : } {A : Type} {m : } (ρ : (meanBlock a).Assignment (A Fin m)) [Finite A] (hshaped : ∀ (v : A Fin m) (w : Fin aA Fin m), meaningOf ρ v w¬IsOld v ∀ (i : Fin a), IsOld (w i)) (hempty : ∃ (v : A Fin m), ¬IsOld v ∀ (w : Fin aA Fin m), ¬meaningOf ρ v w) (hinj : ∀ (v u : A Fin m), ¬IsOld v¬IsOld u(∀ (w : Fin aA Fin m), meaningOf ρ v w meaningOf ρ u w)v = u) (hflip : ∀ (v : A Fin m) (y : Fin aA Fin m), ¬IsOld v(∀ (i : Fin a), IsOld (y i))∃ (u : A Fin m), ¬IsOld u ∀ (w : Fin aA Fin m), meaningOf ρ u w (meaningOf ρ v w ¬∀ (i : Fin a), w i = y i)) :

                        The guard makes the meanings a bijection: with the four conditions, the invented values name every a-ary relation of the instance, each exactly once. This is where the counting of DescriptiveComplexity.SecondOrderNewCount is spent.

                        Dependency graph

                        The whole guard, realized, and what it buys: the invented values name every a-ary relation of the instance, each exactly once.

                        Dependency graph