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 #
Cslib.Logic.PL.CNF.implicationCycle: binary implications around a list.
Main results #
Cslib.Logic.PL.CNF.eval_implicationCycle: a cycle holds exactly when all listed values agree.Cslib.Logic.PL.CNF.length_implicationCycle: one clause per listed variable.Cslib.Logic.PL.CNF.count_vars_implicationCycle: two occurrences per listed variable.
References #
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
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.