Documentation

Complexitylib.Algebraic.LowerBound.Monotone.Clique.Approximation

Bounded-width clique approximators #

An approximator is a finite disjunction of clique indicators. OR takes the union of term families. AND replaces a pair of clique indicators by the clique on their combined nontrivial vertex sets; terms wider than width are discarded, and the result is sunflower-normalized.

The special cases in joinTerms identify zero- and one-vertex indicators with the Boolean constant true. This is essential: blindly adjoining a singleton to another term would introduce edges that were not present in the conjunction.

@[reducible, inline]

A finite family of clique-indicator vertex sets.

Equations
Instances For
    def Algebraic.Monotone.Clique.Approx.Accepts {n : ℕ} (family : Family n) (assignment : Fin (edgeCount n) → Bool) :

    A clique DNF accepts a graph when one of its terms is contained.

    Equations
    Instances For
      @[instance_reducible]
      noncomputable instance Algebraic.Monotone.Clique.Approx.instDecidableAccepts {n : ℕ} (family : Family n) (assignment : Fin (edgeCount n) → Bool) :
      Decidable (Accepts family assignment)
      Equations
      noncomputable def Algebraic.Monotone.Clique.Approx.decode {n : ℕ} (family : Family n) (assignment : Fin (edgeCount n) → Bool) :

      Boolean semantics of a clique DNF.

      Equations
      Instances For
        @[simp]
        theorem Algebraic.Monotone.Clique.Approx.decode_eq_true {n : ℕ} (family : Family n) (assignment : Fin (edgeCount n) → Bool) :
        decode family assignment = true ↔ Accepts family assignment
        @[simp]
        theorem Algebraic.Monotone.Clique.Approx.decode_eq_false {n : ℕ} (family : Family n) (assignment : Fin (edgeCount n) → Bool) :
        decode family assignment = false ↔ ¬Accepts family assignment
        noncomputable def Algebraic.Monotone.Clique.Approx.inputTerm {n : ℕ} (input : Fin (edgeCount n)) :

        The two endpoints of an input edge.

        Equations
        Instances For
          noncomputable def Algebraic.Monotone.Clique.Approx.inputFamily {n : ℕ} (input : Fin (edgeCount n)) :

          The one-term approximator for an input variable.

          Equations
          Instances For
            theorem Algebraic.Monotone.Clique.Approx.contains_inputTerm_iff {n : ℕ} (assignment : Fin (edgeCount n) → Bool) (input : Fin (edgeCount n)) :
            Contains assignment (inputTerm input) ↔ assignment input = true

            The input term denotes exactly its edge variable.

            @[simp]
            theorem Algebraic.Monotone.Clique.Approx.decode_inputFamily {n : ℕ} (assignment : Fin (edgeCount n) → Bool) (input : Fin (edgeCount n)) :
            decode (inputFamily input) assignment = assignment input

            Zero- and one-vertex clique indicators are the Boolean constant true. When conjoining terms, discard such a vacuous side; otherwise take the union.

            Equations
            Instances For

              Raw OR before truncation and plucking.

              Equations
              Instances For

                Raw approximate AND before truncation and plucking.

                Equations
                Instances For
                  def Algebraic.Monotone.Clique.Approx.truncate {n : ℕ} (width : ℕ) (family : Family n) :

                  Discard terms wider than width.

                  Equations
                  Instances For
                    def Algebraic.Monotone.Clique.Approx.gateFamily {n : ℕ} (width : ℕ) (op : AndOr.Op) (arguments : Fin 2 → Family n) :

                    The bounded raw family produced at a gate, before normalization.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem Algebraic.Monotone.Clique.Approx.gateFamily_bounded {n : ℕ} (width : ℕ) (op : AndOr.Op) (arguments : Fin 2 → Family n) :
                      Plucking.Bounded width (gateFamily width op arguments)

                      Gate preprocessing enforces the width bound before normalization.

                      noncomputable def Algebraic.Monotone.Clique.Approx.interpretation {n : ℕ} (petalCount : ℕ) (two_le : 2 ≤ petalCount) (width : ℕ) :

                      The bounded-width approximate interpretation of binary AND/OR.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Algebraic.Monotone.Clique.Approx.interpretation_bounded {n : ℕ} (petalCount : ℕ) (two_le : 2 ≤ petalCount) (width : ℕ) (op : AndOr.Op) (arguments : Fin 2 → Family n) :
                        Plucking.Bounded width (interpretation petalCount two_le width op arguments)

                        Every approximate gate result has bounded width.

                        theorem Algebraic.Monotone.Clique.Approx.interpretation_card_le {n : ℕ} (petalCount : ℕ) (two_le : 2 ≤ petalCount) (width : ℕ) (op : AndOr.Op) (arguments : Fin 2 → Family n) :
                        Finset.card (interpretation petalCount two_le width op arguments) ≤ Sunflower.bound petalCount width

                        Every approximate gate result has at most the sunflower bound many terms.

                        theorem Algebraic.Monotone.Clique.Approx.inputFamily_bounded {width n : ℕ} (two_le_width : 2 ≤ width) (input : Fin (edgeCount n)) :

                        Input approximators have bounded width once the width is at least two.

                        @[simp]

                        Input approximators have one term.

                        structure Algebraic.Monotone.Clique.Approx.NormalFamily (n petalCount width : ℕ) :

                        A normalized approximator packages the two invariants needed for uniform local error bounds: bounded term width and bounded family cardinality.

                        Instances For
                          theorem Algebraic.Monotone.Clique.Approx.one_le_sunflower_bound (petalCount width : ℕ) (two_le_petals : 2 ≤ petalCount) :
                          1 ≤ Sunflower.bound petalCount width

                          The elementary sunflower bound is nonzero.

                          noncomputable def Algebraic.Monotone.Clique.Approx.normalInput {n : ℕ} (petalCount width : ℕ) (two_le_petals : 2 ≤ petalCount) (two_le_width : 2 ≤ width) (input : Fin (edgeCount n)) :
                          NormalFamily n petalCount width

                          Input variables, viewed as normalized one-term approximators.

                          Equations
                          Instances For
                            noncomputable def Algebraic.Monotone.Clique.Approx.normalInterpretation {n : ℕ} (petalCount : ℕ) (two_le_petals : 2 ≤ petalCount) (width : ℕ) :

                            Gate evaluation on normalized approximators.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              noncomputable def Algebraic.Monotone.Clique.Approx.normalDecode {n petalCount width : ℕ} (family : NormalFamily n petalCount width) (assignment : Fin (edgeCount n) → Bool) :

                              Boolean semantics of a normalized approximator.

                              Equations
                              Instances For
                                @[simp]
                                theorem Algebraic.Monotone.Clique.Approx.normalDecode_eq_true {n petalCount width : ℕ} (family : NormalFamily n petalCount width) (assignment : Fin (edgeCount n) → Bool) :
                                normalDecode family assignment = true ↔ Accepts family.family assignment
                                @[simp]
                                theorem Algebraic.Monotone.Clique.Approx.normalDecode_input {n : ℕ} (petalCount width : ℕ) (two_le_petals : 2 ≤ petalCount) (two_le_width : 2 ≤ width) (assignment : Fin (edgeCount n) → Bool) (input : Fin (edgeCount n)) :
                                normalDecode (normalInput petalCount width two_le_petals two_le_width input) assignment = assignment input
                                theorem Algebraic.Monotone.Clique.Approx.contains_of_contains_joinTerms {n : ℕ} (assignment : Fin (edgeCount n) → Bool) (left right : Finset (Fin n)) (contains : Contains assignment (joinTerms left right)) :
                                Contains assignment left ∧ Contains assignment right

                                A joined term implies both input terms on every graph.

                                theorem Algebraic.Monotone.Clique.Approx.contains_joinTerms_cliqueAssignment {n : ℕ} (clique left right : Finset (Fin n)) (leftContains : Contains (cliqueAssignment clique) left) (rightContains : Contains (cliqueAssignment clique) right) :
                                Contains (cliqueAssignment clique) (joinTerms left right)

                                On a minimal positive clique graph, conjoining two accepted terms is represented exactly by joinTerms.

                                theorem Algebraic.Monotone.Clique.Approx.accepts_rawOr_iff {n : ℕ} (assignment : Fin (edgeCount n) → Bool) (left right : Family n) :
                                Accepts (rawOr left right) assignment ↔ Accepts left assignment ∨ Accepts right assignment

                                Raw OR has exactly Boolean-OR semantics.

                                theorem Algebraic.Monotone.Clique.Approx.accepts_left_right_of_accepts_rawAnd {n : ℕ} (assignment : Fin (edgeCount n) → Bool) (left right : Family n) (accepted : Accepts (rawAnd left right) assignment) :
                                Accepts left assignment ∧ Accepts right assignment

                                Raw approximate AND implies exact Boolean AND on every graph.