Documentation

Complexity.Logics.Propositional.CNF.ExactOne.Gadgets

Parsimonious exact-one clause gadgets #

The disjunction gadget is the four-clause construction of [Hunt, Marathe, Radhakrishnan and Stearns, Theorem 3.8, Figure 3.4(a)] [HMRS98]. It admits exactly one auxiliary assignment for each satisfying assignment of the three source literals. The positive constant gadget is their Lemma 3.6; it forces one designated variable false and has a unique assignment to all four variables. Attaching that constant to a positive ternary clause gives a parsimonious complement constraint, as in their Figure 3.5.

Main definitions #

Main results #

References #

Exactly one of three Boolean values is true.

Instances For
    @[instance_reducible]

    The four scalar exact-one constraints in the parsimonious disjunction gadget.

    Instances For
      @[instance_reducible]

      The first auxiliary value of the disjunction gadget.

      Instances For

        The second auxiliary value of the disjunction gadget.

        Instances For

          The third auxiliary value of the disjunction gadget.

          Instances For

            The fourth auxiliary value of the disjunction gadget.

            Instances For

              The fifth auxiliary value of the disjunction gadget.

              Instances For
                theorem Cslib.Logic.PL.CNF.ExactOneGadget.disjunctionHolds_iff (p q r u v w t x : Bool) :
                DisjunctionHolds p q r u v w t x ↔ (p || q || r) = true ∧ u = firstAux p q ∧ v = secondAux p q ∧ w = thirdAux p q ∧ t = fourthAux p q ∧ x = fifthAux p q r

                Every satisfying source triple has exactly the displayed auxiliary extension, and the all-false source triple has none.

                The canonical auxiliary values satisfy the gadget exactly on satisfying source triples.

                def Cslib.Logic.PL.CNF.ExactOneGadget.disjunctionClauses {V : Type u_1} (p q r : Literal V) (u v w t x : V) :
                CNF V

                Replace a signed three-literal disjunction by four exact-three clauses. Auxiliary literals are positive, while the second and third source literals are negated.

                Instances For

                  A positive three-clause gadget with one true auxiliary and three false variables. The first variable is the false terminal and has two internal occurrences.

                  Instances For

                    Opposite terminal values, enforced using a uniquely determined positive false gadget.

                    Instances For

                      The fixed disjunction gadget with source variables 0, 1, 2 and auxiliaries 3 through 7. Its incidence drawing is independent of the literal polarities.

                      Instances For

                        The fixed positive false gadget, with false terminal 0.

                        Instances For

                          The fixed positive complement gadget, with terminals 0, 1 and auxiliaries 2 through 5.

                          Instances For

                            The scalar exact-one predicate is the evaluation of three literals.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.evalOne_disjunctionClauses_iff {V : Type u_1} (σ : V → Bool) (p q r : Literal V) (u v w t x : V) :
                            evalOne σ (disjunctionClauses p q r u v w t x) = true ↔ DisjunctionHolds (Literal.eval σ p) (Literal.eval σ q) (Literal.eval σ r) (σ u) (σ v) (σ w) (σ t) (σ x)

                            Formula evaluation recovers the four scalar constraints.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.evalOne_disjunctionClauses_iff_canonical {V : Type u_1} (σ : V → Bool) (p q r : Literal V) (u v w t x : V) :

                            The formula has precisely the canonical disjunction extension.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.evalOne_forceFalseClauses_iff {V : Type u_1} (σ : V → Bool) (c d e f : V) :
                            evalOne σ (forceFalseClauses c d e f) = true ↔ σ c = false ∧ σ d = false ∧ σ e = true ∧ σ f = false

                            The positive false gadget has exactly the values (false, false, true, false).

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.evalOne_complementClauses_iff {V : Type u_1} (σ : V → Bool) (p q c d e f : V) :
                            evalOne σ (complementClauses p q c d e f) = true ↔ σ p = !σ q ∧ σ c = false ∧ σ d = false ∧ σ e = true ∧ σ f = false

                            The positive complement gadget forces opposite terminals and uniquely fixes every auxiliary variable.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.length_disjunctionClauses {V : Type u_1} (p q r : Literal V) (u v w t x : V) :
                            List.length (disjunctionClauses p q r u v w t x) = 4

                            The disjunction gadget has four clauses.

                            The positive false gadget has three clauses.

                            The positive complement gadget has four clauses.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.length_vars_disjunctionClauses {V : Type u_1} (p q r : Literal V) (u v w t x : V) :
                            (disjunctionClauses p q r u v w t x).vars.length = 12

                            The disjunction gadget has twelve literal occurrences.

                            The positive false gadget has nine literal occurrences.

                            The positive complement gadget has twelve literal occurrences.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.width_disjunctionClauses {V : Type u_1} (p q r : Literal V) (u v w t x : V) (c : Clause V) :
                            c ∈ disjunctionClauses p q r u v w t x → List.length c = 3

                            Every clause of a disjunction gadget is ternary.

                            Every clause of a false gadget is ternary.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.width_complementClauses {V : Type u_1} (p q c d e f : V) (a : Clause V) :
                            a ∈ complementClauses p q c d e f → List.length a = 3

                            Every clause of a complement gadget is ternary.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.positive_forceFalseClauses {V : Type u_1} (c d e f : V) (a : Clause V) :
                            a ∈ forceFalseClauses c d e f → ∀ (l : Literal V), l ∈ a → l.snd = true

                            The false gadget contains only positive literals.

                            theorem Cslib.Logic.PL.CNF.ExactOneGadget.positive_complementClauses {V : Type u_1} (p q c d e f : V) (a : Clause V) :
                            a ∈ complementClauses p q c d e f → ∀ (l : Literal V), l ∈ a → l.snd = true

                            The complement gadget contains only positive literals.

                            The false port has degree two; no variable in the fixed false gadget exceeds degree three.