Documentation

Complexitylib.Classes.PCP.Internal.RegCSP

Constraint graphs on a regular graph #

Dinur's argument runs on constraint graphs whose underlying multigraph is d-regular, because that is what makes random walks and the spectral gap available. This module puts the two halves together: a RegCSP is a RegGraph together with a constraint attached to each dart, symmetric under reversal, so that it is really one constraint per undirected edge.

The measure on constraints is the uniform measure on darts: unsatFrac divides the number of unsatisfied darts by order * deg. Constraints are attached to darts rather than to undirected edges, and are not required to agree with their reverse. Nothing is lost: the random walk traverses darts, so the dart measure is the one every estimate is stated in, and the eventual verifier samples a dart and checks one constraint. Requiring symmetry instead would force each construction — powering above all — to prove that reversing a walk and swapping the two opinions leaves its constraint unchanged, an index-reversal argument of no mathematical content.

Two presentations of a constraint system coexist in this development, on purpose. ConstraintGraph has its vertex and edge counts as numeric fields, so it is a single type that a transformation can be iterated on (see Amplifier) and that a bitstring encoding can address; RegCSP carries structured vertex and dart types, which is what Dinur's constructions produce. The bijective bridge between them belongs to the final encoded reduction and is built there.

Main definitions #

Main results #

structure Complexity.RegCSP (α : Type) :

A constraint system on a regular multigraph: one constraint per dart.

  • graph : RegGraph

    The underlying regular multigraph.

  • rel : self.graph.Vself.graph.DααBool

    The constraint on the dart (v, i), as a predicate on the label of v and the label of its i-th neighbour, in that order.

Instances For
    @[reducible, inline]
    abbrev Complexity.RegCSP.Dart {α : Type} (R : RegCSP α) :

    A dart: a vertex together with one of its d outgoing edge labels.

    Equations
    Instances For
      @[reducible, inline]

      An assignment labels every vertex with a symbol of the alphabet.

      Equations
      Instances For
        def Complexity.RegCSP.satisfies {α : Type} (R : RegCSP α) (a : R.Assignment) (p : R.Dart) :

        Whether the dart p's constraint holds under a, as a Bool.

        Equations
        Instances For
          def Complexity.RegCSP.Satisfies {α : Type} (R : RegCSP α) (a : R.Assignment) (p : R.Dart) :

          The dart p's constraint holds under a.

          Equations
          Instances For

            The darts left unsatisfied by a.

            Equations
            Instances For
              @[simp]
              theorem Complexity.RegCSP.mem_unsatDarts {α : Type} (R : RegCSP α) {a : R.Assignment} {p : R.Dart} :

              Some assignment satisfies every dart.

              Equations
              Instances For

                The number of darts.

                The fraction of darts an assignment leaves unsatisfied.

                Equations
                Instances For
                  theorem Complexity.RegCSP.unsatFrac_eq_zero_iff {α : Type} (R : RegCSP α) {a : R.Assignment} :
                  R.unsatFrac a = 0 ∀ (p : R.Dart), R.Satisfies a p

                  An assignment wastes no darts exactly when it satisfies them all.

                  An unsatisfiable regular constraint graph has a dart.

                  noncomputable def Complexity.RegCSP.unsatVal {α : Type} (R : RegCSP α) [Fintype α] [Nonempty α] :

                  The least fraction of darts any assignment leaves unsatisfied.

                  Equations
                  Instances For
                    theorem Complexity.RegCSP.le_unsatVal {α : Type} (R : RegCSP α) [Fintype α] [Nonempty α] {c : } (h : ∀ (a : R.Assignment), c R.unsatFrac a) :

                    On an unsatisfiable graph every assignment fails a dart, so the value is at least one dart's worth.