Restricting CNF and DNF formulas #
Restriction performs the semantic simplification needed by switching-lemma arguments:
- a satisfied CNF clause or falsified DNF term is removed;
- fixed literals with the neutral value are removed from their clause or term;
- free literals retain their order.
The result preserves evaluation and cannot increase clause/term count or width.
Main results #
CNF.eval_restrict/DNF.eval_restrict-- semantic preservation.CNF.complexity_restrict_le/DNF.complexity_restrict_le.CNF.width_restrict_le/DNF.width_restrict_le.
Evaluate a literal when its variable is fixed, or return none when the
variable remains free.
Equations
Instances For
A literal survives restriction exactly when its variable is free.
A fixed literal evaluates to true exactly when its variable is fixed to the literal's polarity.
A fixed literal evaluates to false exactly when its variable is fixed opposite to the literal's polarity.
Restriction turns literal negation into Boolean negation of the fixed value, while leaving a free literal free.
Restricting a literal by a left-biased composite first consults the first restriction and then the second one.
A literal evaluated after applying a restriction is either its fixed value or its value on the remaining assignment.
Restrict one clause.
none means that a fixed true literal satisfies the clause. some reduced
contains the remaining free literals; some [] is an unsatisfied empty clause.
Equations
Instances For
Simplify a CNF under a finite-arity restriction.
Equations
- Complexity.CNF.restrict ρ φ = { clauses := List.filterMap (Complexity.CNF.restrictClause ρ) φ.clauses }
Instances For
Restriction cannot increase a CNF's number of clauses.
Restriction cannot increase a CNF's maximum clause width.
Restrict one term.
none means that a fixed false literal falsifies the term. some reduced
contains the remaining free literals; some [] is a satisfied empty term.
Equations
Instances For
Restricting the negation of a CNF clause agrees with restricting the clause and negating every surviving literal.
Simplify a DNF under a finite-arity restriction.
Equations
- Complexity.DNF.restrict ρ φ = { terms := List.filterMap (Complexity.DNF.restrictTerm ρ) φ.terms }
Instances For
A DNF term survives exactly when each of its fixed literals is fixed to its satisfying polarity.
When a term survives, its exact reduction is obtained by retaining precisely the literals whose variables remain free.
Successively restricting one term agrees exactly with restricting by the left-biased composite.
Once a term is killed, every extension of the restriction also kills it.
Applying two DNF restrictions successively is syntactically identical to applying their left-biased composite once.
Every literal retained in a restricted DNF term occurred originally and its variable is free under the restriction.
Restriction cannot increase a DNF's number of terms.
Restriction cannot increase a DNF's maximum term width.
Restricting the negation of a DNF term agrees with restricting the term and negating every surviving literal.
Restriction commutes exactly with De Morgan negation from CNF to DNF.
Restriction commutes exactly with De Morgan negation from DNF to CNF.