3SAT ordered-FO-reduces to 1-in-SAT #
The classical gadget, with the width case analysis removed by the three slots
of DescriptiveComplexity.Problems.OneInSat.Slots. Every clause c of the input gets
- three slot variables
slot i c, tied to its occurrences by the link clauseslink i c = {¬ slot i c} ∪ {the i-th literal of c, if there is one}– read as exactly-one clauses these sayslot i c ↔ (i-th literal)when the occurrence exists andslot i c = falsewhen it does not, the same clause description in both cases, one literal shorter; - four fresh variables
fresh j cand the three gadget clausespiece one c = {¬ slot one c, d, e},piece two c = {slot two c, e, f},piece three c = {¬ slot three c, f, g}, which are exactly-one satisfiable iff some slot ofcis true.
Since a slot is true exactly when the corresponding literal is
(DescriptiveComplexity.OneInRed.exists_litTrue_iff_slot), the output is exactly-one
satisfiable iff the input is satisfiable. Clauses of width 0, 1 and 2 need no
special treatment: their missing slots are false, and an empty clause
correctly yields an unsatisfiable gadget.
The whole construction is gated on the width check ThreeSatToSat.wideOrdF,
as the reduction of 3SAT to SAT is: on a wide input every element becomes a
clause with no literal at all, and a clause with no literal has no true
literal, let alone exactly one. The order is used only to say i-th
occurrence, so this is an ordered reduction; the dimension is 1, all the
fresh variables being carried by tags.
Tags of the gadget: the copy of a variable, the three slots and four fresh variables of a clause, and its three link and three gadget clauses.
- var : OITag
The copy of a propositional variable.
- slot
(i : Ix3)
: OITag
The
i-th slot variable of a clause. - fresh
(j : Ix4)
: OITag
The
j-th fresh variable of a clause. - link
(i : Ix3)
: OITag
The
i-th link clause of a clause. - piece
(i : Ix3)
: OITag
The
i-th gadget clause of a clause.
Instances For
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq DescriptiveComplexity.OneInRed.OITag.var DescriptiveComplexity.OneInRed.OITag.var = isTrue ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq DescriptiveComplexity.OneInRed.OITag.var (DescriptiveComplexity.OneInRed.OITag.slot i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq DescriptiveComplexity.OneInRed.OITag.var (DescriptiveComplexity.OneInRed.OITag.fresh j) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq DescriptiveComplexity.OneInRed.OITag.var (DescriptiveComplexity.OneInRed.OITag.link i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq DescriptiveComplexity.OneInRed.OITag.var (DescriptiveComplexity.OneInRed.OITag.piece i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.slot i) DescriptiveComplexity.OneInRed.OITag.var = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.slot i) (DescriptiveComplexity.OneInRed.OITag.fresh j) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.slot i) (DescriptiveComplexity.OneInRed.OITag.link i_1) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.slot i) (DescriptiveComplexity.OneInRed.OITag.piece i_1) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.fresh j) DescriptiveComplexity.OneInRed.OITag.var = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.fresh j) (DescriptiveComplexity.OneInRed.OITag.slot i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.fresh j) (DescriptiveComplexity.OneInRed.OITag.link i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.fresh j) (DescriptiveComplexity.OneInRed.OITag.piece i) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.link i) DescriptiveComplexity.OneInRed.OITag.var = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.link i) (DescriptiveComplexity.OneInRed.OITag.slot i_1) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.link i) (DescriptiveComplexity.OneInRed.OITag.fresh j) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.link i) (DescriptiveComplexity.OneInRed.OITag.piece i_1) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.piece i) DescriptiveComplexity.OneInRed.OITag.var = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.piece i) (DescriptiveComplexity.OneInRed.OITag.slot i_1) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.piece i) (DescriptiveComplexity.OneInRed.OITag.fresh j) = isFalse ⋯
- DescriptiveComplexity.OneInRed.instDecidableEqOITag.decEq (DescriptiveComplexity.OneInRed.OITag.piece i) (DescriptiveComplexity.OneInRed.OITag.link i_1) = isFalse ⋯
Instances For
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
Dependency graph
The tags carrying a clause of the output.
Equations
Instances For
Dependency graph
The pairs of tags joined by a positive literal, on the same element: the gadget clauses containing a fresh variable, and the second gadget clause containing its slot.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.OneInRed.posPair x✝¹ x✝ = false
Instances For
Dependency graph
The pairs of tags joined by a negative literal, on the same element: the first and third gadget clauses contain their slot negatively, and so does every link clause.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.OneInRed.negPair x✝¹ x✝ = false
Instances For
Dependency graph
The interpretation #
The literal joining two tags on the same element, if there is one.
Equations
Instances For
Dependency graph
The literal of a link clause coming from the i-th occurrence of its
clause, with sign s.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Defining formula for “is a clause”: link and gadget clauses sit on the clauses of the input, and on a wide input everything is a clause.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Defining formula for “occurs positively in”.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Defining formula for “occurs negatively in”.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The interpretation of 1-in-SAT instances in ordered CNF instances.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The vertices of the gadget #
The point of tag t over the element x.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Characterization of the three relations #
The clauses of the gadget.
Dependency graph
The positive literals of the gadget.
Dependency graph
The negative literals of the gadget.
Dependency graph
The literals of a gadget clause #
Every literal of a gadget clause is either prescribed by the pair of tags,
on the same element, or is the copy of the i-th literal of the clause of a
link clause.
Dependency graph
The link and gadget clauses of a clause of the input are clauses.
Dependency graph
A same-element positive literal of a gadget clause.
Dependency graph
A same-element negative literal of a gadget clause.
Dependency graph
The literal of a link clause coming from the occurrence it links.
Dependency graph
The assignment carried by the gadget #
The assignment of the gadget induced by an assignment of the input: the slots take the values of the literals they link, and the four fresh variables of a clause are the explicit witnesses of the gadget.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Which tags carry which literals #
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Correctness #
The literals of the i-th link clause of c.
Dependency graph
The literals of the i-th gadget clause of c.
Dependency graph
The gadget of a satisfiable input is exactly-one satisfiable.
Dependency graph
Dependency graph
A gadget that is exactly-one satisfiable comes from a satisfiable input.
Dependency graph
Correctness of the reduction: a CNF structure is a yes-instance of 3SAT iff its gadget is exactly-one satisfiable.
Dependency graph
3SAT ordered-FO-reduces to 1-in-SAT: the three-slot gadget.
Equations
- One or more equations did not get rendered due to their size.