Hardness of 2SAT: the Krom discharge #
Every SO-Krom definable problem admits an ordered first-order reduction to 2SAT
(DescriptiveComplexity.twoSat_hard_of_sigmaSOKromDefinable): the machine-free
NL-hardness statement, the Krom analogue of the Horn discharge of
DescriptiveComplexity.Problems.HornSat.Hardness.
The construction is the shared one of DescriptiveComplexity.ClauseDischarge: inside an
ordered input structure A,
- propositional variables: one per relation variable
iof the block and perB.arity i-tuple overA, canonically padded to the common dimensionDescriptiveComplexity.clauseDim; - clauses: one per clause
cof the program and perk-tuple overAsatisfying the guard ofc– guards are input-vocabulary formulas, hence evaluated in the input structure rather than encoded; - literals: the two slots of
c, each at the canonically padded tuple of its atom's arguments, occurring positively or negatively according to the slot's sign.
Only the last point differs from the Horn discharge, which reads a head and a
body list instead of two signed slots. The consequence is the one that matters:
a clause of the program has at most two literals, and canonical padding makes
the element encoding each of them unique, so every interpreted clause has at
most two literal occurrences
(DescriptiveComplexity.KromDischarge.krom_widthAtMostTwo) – the output lands in 2SAT
rather than merely in SAT, exactly as the Horn discharge's output is Horn.
Both directions of correctness
(DescriptiveComplexity.KromDischarge.krom_satisfiable_iff) read through the canonical
padding: an assignment ρ of the block gives the truth value ρ i (pref x) of
the propositional variable (i, x), and conversely a satisfying truth
assignment ν gives the assignment ρ i ā := ν (i, pad ā).
Tags and clause access #
The tags of the Krom interpretation: the generic clausal tags at the program's number of clauses.
Equations
Instances For
Dependency graph
The c-th clause of the program.
Equations
- DescriptiveComplexity.KromDischarge.clauseAt prog c = prog[↑c]
Instances For
Dependency graph
The two literal slots of a clause, as a list – the shape both the defining formulas and the correctness proof quantify over.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The defining formulas of the literals #
The occurrence formula of one literal slot, at a given sign: the slot's
literal carries that sign, is an atom of the relation variable i, and the
coordinates selected by x hold the canonically padded tuple of its
arguments.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The occurrence formula of a clause at a given sign: either of its two slots.
Equations
- DescriptiveComplexity.KromDischarge.litOccF c pos i u x = DescriptiveComplexity.KromDischarge.slotOccF c.lit₁ pos i u x ⊔ DescriptiveComplexity.KromDischarge.slotOccF c.lit₂ pos i u x
Instances For
Dependency graph
Dependency graph
Dependency graph
The interpretation #
The Krom interpretation: the CNF instance of the propositional translation of the program, defined inside the ordered input structure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Characterization of the interpreted relations #
Every statement below is the corresponding realization lemma read through
DescriptiveComplexity.FOInterpretation.relMap_map; the tag combinations that are not
listed have ⊥ as defining formula, so the corresponding relation is empty.
The clause elements: one per clause of the program and per canonically padded tuple satisfying that clause's guard.
Dependency graph
Elements carrying a variable tag are not clauses.
Dependency graph
Elements carrying the junk tag are not clauses.
Dependency graph
The positive literals: a slot of the clause carrying a positive literal, at the canonically padded tuple of its atom's arguments.
Dependency graph
The negative literals: a slot of the clause carrying a negated literal, at the canonically padded tuple of its atom's arguments.
Dependency graph
The output is width-two, and correct #
The propositional variable standing for the atom of a literal, at a clause tuple.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Every occurrence of an interpreted clause comes from one of its two slots, at the canonical point of that slot's atom and with that slot's sign.
Dependency graph
The interpretation always lands in 2SAT: a clause of the program has at most two literals, and canonical padding makes the element encoding each of them unique, so every interpreted clause has at most two literal occurrences.
Dependency graph
Correctness of the Krom discharge: the program has a satisfying assignment iff the interpreted CNF is satisfiable.
Dependency graph
The program has a satisfying assignment iff the interpreted CNF is a yes-instance of 2SAT.
Dependency graph
The generic Krom reduction: an ordered first-order reduction to 2SAT from any problem defined, on nonempty finite structures, by an existential second-order sentence with a Krom kernel.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
NL-hardness of 2SAT, machine-free: every SO-Krom definable problem
admits an ordered first-order reduction to 2SAT. This is the Krom analogue of
the Horn discharge DescriptiveComplexity.hornSat_hard_of_sigmaSOHornDefinable, and of
the Cook–Levin discharge above it: the clause list of the program is emitted
directly, one 2-clause per clause and per instantiation of its universally
quantified variables satisfying its guard.