Documentation

DescriptiveComplexity.Problems.Steiner.Counting

#Steiner Tree: counting the Steiner sets of the threshold size #

The counting version of DescriptiveComplexity.SteinerTree, the node-weighted problem: the number of connected sets of vertices containing every terminal and using exactly as many non-terminals as the marked set has elements (DescriptiveComplexity.SteinerOfSize).

The certificate of connectivity #

Connectivity is not first-order. The Σ₁ definition of the decision problem certifies it by a root and a strict order in which every other chosen vertex has a chosen neighbour below it (DescriptiveComplexity.connectedOn_iff_exists_root), and there are many such orders. The counting kernel uses the order of the instance as a clock: a binary relation R x t, “x is reached from the least chosen vertex in at most as many steps as t has predecessors”, which is determined step by step along the order (DescriptiveComplexity.IsReachClock, DescriptiveComplexity.IsReachClock.eq_clockOf) – it is DescriptiveComplexity.reachIn at the rank of t. The set is connected iff every chosen vertex is reached by the last tick (DescriptiveComplexity.clockOf_top_iff_connectedOn), a path needing fewer steps than there are vertices (DescriptiveComplexity.reachIn_card).

This kernel reads the order, and defines the same count whatever the order: the clock changes with it, the set of solutions does not. Hence DescriptiveComplexity.sharpSteinerTree_mem_sharpP, by DescriptiveComplexity.sharpPDefinable_of_sized_ordered.

As for Set Cover, the support is “some Steiner set uses exactly the threshold number of non-terminals”, not the decision problem: a Steiner set can only be extended by a neighbour.

Reachability in a bounded number of steps #

theorem DescriptiveComplexity.reachIn_card {A : Type} [Finite A] {R : A → A → Prop} {r x : A} (h : Relation.ReflTransGen R r x) :
reachIn R (Nat.card A - 1) r x

A path needs fewer steps than there are vertices.

Dependency graph

The clock #

def DescriptiveComplexity.IsReachClock {A : Type} [LE A] (Lk : A → A → Prop) (S : A → Prop) (R : A → A → Prop) :

The relation R x t is a reachability clock for the links Lk inside S: at the first tick it holds of the least element of S, and at each later tick of what the previous tick reached, and of its Lk-successors.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    Dependency graph
    def DescriptiveComplexity.clockOf {A : Type} [LinearOrder A] (Lk : A → A → Prop) (S : A → Prop) (x t : A) :

    The clock: reachability from the least element of S, in as many steps as the tick has predecessors.

    Equations
    Instances For
      Dependency graph
      theorem DescriptiveComplexity.clockOf_iff {A : Type} [LinearOrder A] {Lk : A → A → Prop} {S : A → Prop} {x t : A} {k : ℕ} (hk : orank t = k) :
      clockOf Lk S x t ↔ ∃ (r : A), (S r ∧ ∀ (y : A), S y → r ≤ y) ∧ reachIn Lk k r x
      Dependency graph
      theorem DescriptiveComplexity.IsReachClock.eq_clockOf {A : Type} [LinearOrder A] [Finite A] {Lk : A → A → Prop} {S : A → Prop} {R : A → A → Prop} (h : IsReachClock Lk S R) :
      R = clockOf Lk S

      The clock is unique: it is determined tick by tick.

      Dependency graph
      theorem DescriptiveComplexity.clockOf_top_iff_connectedOn {A : Type} [LinearOrder A] [Finite A] (Adjp : A → A → Prop) (S : A → Prop) :
      (∀ (x t : A), (∀ (z : A), z ≤ t) → S x → clockOf (Link Adjp S) S x t) ↔ ConnectedOn Adjp S

      The set is connected iff the clock reaches all of it by the last tick.

      Dependency graph

      The counting problem #

      def DescriptiveComplexity.SteinerOfSizeOn {A : Type} (Adjp : A → A → Prop) (Term Kp S : A → Prop) :

      The set S contains every terminal, is connected, and has exactly as many non-terminals as the Kp-marked set has elements.

      Equations
      Instances For
        Dependency graph
        def DescriptiveComplexity.steinerOfSizeEquiv {A B : Type} (u : B ≃ A) {AdjB : B → B → Prop} {TermB KB : B → Prop} {AdjA : A → A → Prop} {TermA KA : A → Prop} (hadj : ∀ (b b' : B), AdjB b b' ↔ AdjA (u b) (u b')) (hterm : ∀ (b : B), TermB b ↔ TermA (u b)) (hK : ∀ (b : B), KB b ↔ KA (u b)) :
        { S : B → Prop // Finite B ∧ SteinerOfSizeOn AdjB TermB KB S } ≃ { S : A → Prop // Finite A ∧ SteinerOfSizeOn AdjA TermA KA S }

        The Steiner sets of the threshold size transport along an equivalence commuting with the three predicates.

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

          The set S is a connected set containing every terminal and using exactly as many non-terminals as the marked set has elements, in a finite graph.

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

            #Steiner Tree: the number of connected sets containing every terminal and using exactly as many non-terminals as the marked set has elements.

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

              The support of #Steiner Tree: some Steiner set uses exactly the threshold number of non-terminals. Registered in the Lax archive as Lax280166.SteinerTreeComplete.sharpSteinerTree_support_iff.

              Dependency graph
              Dependency graph

              Membership #

              Dependency graph
              @[reducible, inline]

              The marked symbol over the sum.

              Equations
              Instances For
                Dependency graph
                Dependency graph

                The block of the counting definition of Steiner Tree: the chosen set, its non-terminals, and the reachability clock.

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

                  The relation variables of the block.

                  Instances For
                    Dependency graph
                    Dependency graph
                    Dependency graph
                    @[reducible, inline]

                    The vocabulary of the kernel: the instance expanded by the block.

                    Equations
                    Instances For
                      Dependency graph
                      Dependency graph
                      Dependency graph
                      Dependency graph
                      @[reducible, inline]

                      The adj symbol over the sum.

                      Equations
                      Instances For
                        Dependency graph
                        @[reducible, inline]

                        The vocabulary of the counting kernel: the ordered graph with terminals, expanded by the block.

                        Equations
                        Instances For
                          Dependency graph
                          @[reducible, inline]

                          The adj symbol over the ordered sum.

                          Equations
                          Instances For
                            Dependency graph
                            @[reducible, inline]

                            The terminal symbol over the ordered sum.

                            Equations
                            Instances For
                              Dependency graph
                              @[reducible, inline]

                              The order symbol over the ordered sum.

                              Equations
                              Instances For
                                Dependency graph
                                @[reducible, inline]

                                The sel symbol over the ordered sum.

                                Equations
                                Instances For
                                  Dependency graph
                                  @[reducible, inline]

                                  The non symbol over the ordered sum.

                                  Equations
                                  Instances For
                                    Dependency graph
                                    @[reducible, inline]

                                    The reach symbol over the ordered sum.

                                    Equations
                                    Instances For
                                      Dependency graph

                                      #Steiner Tree is in #P: the budget is certified by the monotone bijection with the marked set, and connectivity by the reachability clock.

                                      Dependency graph