Documentation

Complexity.Logics.Propositional.CNF.ImplicationCycle

Directed implication cycles #

A binary implication cycle forces all its variables to have the same Boolean value. Each listed variable contributes exactly two literal occurrences, including the two occurrences in a singleton cycle. Repeated variables are counted with multiplicity. These are the implication cycles used in Papadimitriou, Proposition 9.3.

Adapted from the cycle construction in lean-trominoes, revision 6d5b36c15cec6cb18d30137b7f1c7fb92ea24332, PeriodicThreeSATThree.lean, PeriodicThreeSATThreeCorrectness.lean, and PeriodicThreeSATThreeExactSize.lean. No periodic semantics is used here.

Main definitions #

Main results #

References #

def Cslib.Logic.PL.CNF.implicationPath {V : Type u_1} (first : V) :
V → List V → CNF V

An implication path from current through rest, closed back to first.

Instances For

    Binary implications around a list, including a tautological clause for a singleton.

    Instances For
      theorem Cslib.Logic.PL.CNF.eval_implicationCycle {V : Type u_1} (σ : V → Bool) (vs : List V) :
      eval σ (implicationCycle vs) = true ↔ ∀ (x : V), x ∈ vs → ∀ (y : V), y ∈ vs → σ x = σ y

      A cycle holds exactly when all variables listed in it have the same value.

      @[simp]

      There is one binary clause per element of the cycle list.

      Every implication-cycle clause has exactly two literals.

      A variable occurs twice per appearance in the cycle list, including repeated entries.