Documentation

DescriptiveComplexity.Counting.Reduction

One-call counting reductions, and the one-call closure of a counting class #

A parsimonious reduction preserves the number of solutions, hence also whether there is one: no problem with an easy decision version is parsimoniously #P-hard unless P = NP (DescriptiveComplexity.NP_subset_PTIME_of_sharpP_parsimoniousHard). The classical #P-complete problems of that kind – counting the models of a DNF formula, the independent sets of a graph – are complete under a weaker notion, defined here.

A one-call reduction C ≤ᶜ[≤] D is a relativized ordered first-order interpretation I together with a post-processing term post (DescriptiveComplexity.PostTerm), such that

C A = post.eval A (D (I.MapRel A))

on every finite ordered structure: one question is asked of the oracle for D, at an instance defined first-order, and the count is recovered from the answer by arithmetic on it and on first-order definable cardinalities of the instance.

Relation to the literature #

The one-call closure of a class #

#P is not expected to be closed under one-call reductions, so the plain words hard and complete are not used for them: as on the decision side, those words belong to reductions the class is closed under, here the subtractive ones (DescriptiveComplexity.Counting.Subtractive). What one-call reductions are the reductions of is the one-call closure of a class, DescriptiveComplexity.CountingClass.OneCallMem: the problems that reduce with one call to a problem of the class. It contains the class, is closed under one-call reductions (DescriptiveComplexity.CountingClass.OneCallMem.of_oneCall), and DescriptiveComplexity.CountingClass.OneCallHard is hardness for it (DescriptiveComplexity.CountingClass.oneCallHard_iff); DescriptiveComplexity.CountingClass.OneCallComplete conjoins the two. Parsimonious hardness implies one-call hardness (DescriptiveComplexity.oneCallHard_sharpP_of_parsimoniousHard).

The one-call closure of #P is a logical counterpart of the class FP^#P of the functions computable in polynomial time with a #P oracle. It is not given that name: that it is the same class would need one oracle call to suffice, and a polynomial-time computation after the call to be replaceable by a post-processing term, and neither is proved here.

A one-call counting reduction: a relativized ordered interpretation and a post-processing term recovering the count of the source from the count of the interpreted instance.

Instances For
    Dependency graph

    A one-call counting reduction: a relativized ordered interpretation and a post-processing term recovering the count of the source from the count of the interpreted instance.

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

      The relativized universe of the output of a reduction is nonempty on nonempty finite ordered inputs.

      Dependency graph

      A relativized parsimonious reduction is a one-call reduction that returns the answer of the oracle unchanged.

      Equations
      Instances For
        Dependency graph

        An ordered parsimonious reduction is a one-call reduction.

        Equations
        Instances For
          Dependency graph

          A parsimonious reduction is a one-call reduction.

          Equations
          Instances For
            Dependency graph

            Replacing the source of a one-call reduction by a counting problem with the same values on finite structures.

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

              Replacing the target of a one-call reduction by a counting problem with the same values on finite structures.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                Dependency graph
                def DescriptiveComplexity.OneCallReduction.ofPost {L L' : FirstOrder.Language} [L.IsRelational] [L'.IsRelational] {C : CountingProblem L} {D : CountingProblem L'} {C' : CountingProblem L} (g : OneCallReduction C' D) (post : PostTerm L) (h : ∀ (A : Type) [inst : L.Structure A] [inst_1 : LinearOrder A] [Finite A] [Nonempty A], C.Count A = PostTerm.eval A (C'.Count A) post) :

                Post-processing a reduction. If the count of C is recovered from the count of C' by a post-processing term, a one-call reduction from C' gives one from C.

                Equations
                Instances For
                  Dependency graph

                  A counting problem read through an interpretation: the count of the interpreted structure.

                  Equations
                  Instances For
                    Dependency graph

                    A counting problem read through an interpretation reduces parsimoniously to the problem itself, by that interpretation.

                    Equations
                    • D.pullbackReduction I = { Tag := Tag, tagFinite := inst✝¹, tagNonempty := inst✝, dim := dim, toInterpretation := I, correct := ⋯ }
                    Instances For
                      Dependency graph

                      Transitivity of one-call reductions. The interpretations compose as for relativized reductions; the post-processing of the second reduction is pulled back to the instance and substituted for the oracle's answer in the post-processing of the first. There is still one call.

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

                        The one-call closure of a class: membership, hardness, completeness #

                        A counting problem is in the one-call closure of a class when it reduces with one call to a problem of the class.

                        Equations
                        Instances For
                          Dependency graph

                          A counting problem is one-call hard for a class when every problem of the class reduces to it with one call.

                          Equations
                          Instances For
                            Dependency graph

                            A counting problem is one-call complete for a class when it is in the one-call closure of the class and one-call hard for it.

                            Equations
                            Instances For
                              Dependency graph
                              Dependency graph
                              Dependency graph

                              A problem of the class is in its one-call closure.

                              Dependency graph

                              The one-call closure is closed under one-call reductions.

                              Dependency graph

                              One-call hardness travels forward along one-call reductions.

                              Dependency graph

                              One-call hardness is hardness for the one-call closure: every problem of the closure, and not only of the class, reduces to a one-call hard problem. Registered in the Lax archive as Lax859101.OneCallClosure.oneCallHard_iff.

                              Dependency graph

                              One-call hardness travels forward along relativized parsimonious reductions.

                              Dependency graph

                              One-call hardness travels forward along ordered parsimonious reductions.

                              Dependency graph

                              One-call hardness travels forward along parsimonious reductions.

                              Dependency graph

                              One-call hardness only depends on the values of a counting problem on finite structures.

                              Dependency graph

                              A problem of the class that is one-call hard for it is one-call complete.

                              Dependency graph

                              Parsimonious #P-hardness implies one-call #P-hardness: a parsimonious reduction is a one-call reduction.

                              Dependency graph
                              Dependency graph