#Directed Hamilton Circuit is parsimoniously #P-complete #
DescriptiveComplexity.sharpDirHamCircuit_sharpP_parsimoniousComplete, by a relativized
reduction from #1-in-SAT
(DescriptiveComplexity.sharpOneInSat_rel_ordered_parsimonious_sharpDirHamCircuit).
The mathematics is in the three files before this one: the row graph of a CNF
formula (DescriptiveComplexity.Problems.Hamilton.CountingGadget) has exactly the
exactly-one models of the formula as Hamilton circuits
(DescriptiveComplexity.HamGadget.modelEquiv). What is left is to draw that graph
in the formula, first-order: a vertex is a tag and a pair of elements
(DescriptiveComplexity.HamGadget.toVtx), the vertices that exist are cut out by the
domain formula of a relativized interpretation
(DescriptiveComplexity.HamGadget.domF), and an arc is a formula on two such pairs
(DescriptiveComplexity.HamGadget.stepF). The interpreted universe is then the
vertex type of the row graph, arcs included
(DescriptiveComplexity.HamGadget.vtxEquiv, DescriptiveComplexity.HamGadget.dgArc_iff).
The reduction is relativized because a circuit spans the universe: a tagged pair that is no vertex would have to lie on every circuit. It is ordered because the rows are: the occurrences of a variable are laid out in the order of the instance, and so are the variables.
Tags of the interpretation: the kinds of vertices of the row graph.
- top : HTag
The entry of a row.
- lft : HTag
The left end of a row.
- rgt : HTag
The right end of a row.
- pad0 : HTag
The first padding of a row.
- ain
(s : Bool)
: HTag
The left vertex of an occurrence of sign
s. - bout
(s : Bool)
: HTag
The right vertex of an occurrence of sign
s. - pad
(s : Bool)
: HTag
The padding after an occurrence of sign
s. - cls : HTag
A clause vertex.
- zero : HTag
The vertex of a formula with no clause.
Instances For
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.top DescriptiveComplexity.HamGadget.HTag.top = isTrue ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.top (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.top (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.top (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.lft DescriptiveComplexity.HamGadget.HTag.lft = isTrue ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.lft (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.lft (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.lft (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.rgt DescriptiveComplexity.HamGadget.HTag.rgt = isTrue ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.rgt (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.rgt (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.rgt (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.pad0 DescriptiveComplexity.HamGadget.HTag.pad0 = isTrue ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.pad0 (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.pad0 (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.pad0 (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.top = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.lft = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.rgt = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.pad0 = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) (DescriptiveComplexity.HamGadget.HTag.bout s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) (DescriptiveComplexity.HamGadget.HTag.pad s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.cls = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.ain s) DescriptiveComplexity.HamGadget.HTag.zero = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.top = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.lft = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.rgt = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.pad0 = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) (DescriptiveComplexity.HamGadget.HTag.ain s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) (DescriptiveComplexity.HamGadget.HTag.pad s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.cls = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.bout s) DescriptiveComplexity.HamGadget.HTag.zero = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.top = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.lft = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.rgt = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.pad0 = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) (DescriptiveComplexity.HamGadget.HTag.ain s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) (DescriptiveComplexity.HamGadget.HTag.bout s_1) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.cls = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq (DescriptiveComplexity.HamGadget.HTag.pad s) DescriptiveComplexity.HamGadget.HTag.zero = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.cls (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.cls (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.cls (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.cls DescriptiveComplexity.HamGadget.HTag.cls = isTrue ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.zero (DescriptiveComplexity.HamGadget.HTag.ain s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.zero (DescriptiveComplexity.HamGadget.HTag.bout s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.zero (DescriptiveComplexity.HamGadget.HTag.pad s) = isFalse ⋯
- DescriptiveComplexity.HamGadget.instDecidableEqHTag.decEq DescriptiveComplexity.HamGadget.HTag.zero DescriptiveComplexity.HamGadget.HTag.zero = isTrue ⋯
Instances For
Dependency graph
Dependency graph
Dependency graph
The vertex a tagged pair stands for.
Equations
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.top x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.top x✝¹
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.lft x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.lft x✝¹
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.rgt x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.rgt x✝¹
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.pad0 x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.pad0 x✝¹
- DescriptiveComplexity.HamGadget.toVtx (DescriptiveComplexity.HamGadget.HTag.ain s) x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.ain s x✝¹ x✝
- DescriptiveComplexity.HamGadget.toVtx (DescriptiveComplexity.HamGadget.HTag.bout s) x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.bout s x✝¹ x✝
- DescriptiveComplexity.HamGadget.toVtx (DescriptiveComplexity.HamGadget.HTag.pad s) x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.pad s x✝¹ x✝
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.cls x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.cls x✝¹
- DescriptiveComplexity.HamGadget.toVtx DescriptiveComplexity.HamGadget.HTag.zero x✝¹ x✝ = DescriptiveComplexity.HamGadget.Vtx.zero
Instances For
Dependency graph
The formulas #
x is a variable of the formula, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
There is no clause, as a formula.
Equations
Instances For
Dependency graph
x is the least element, as a formula.
Equations
Instances For
Dependency graph
DescriptiveComplexity.HamGadget.VFirst, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
DescriptiveComplexity.HamGadget.VLast, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
DescriptiveComplexity.HamGadget.VStep, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
DescriptiveComplexity.HamGadget.NextVar, as a formula.
Equations
Instances For
Dependency graph
A sign condition, as a formula.
Instances For
Dependency graph
The domain formulas: which tagged pairs are vertices.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.HamGadget.domF DescriptiveComplexity.HamGadget.HTag.top = DescriptiveComplexity.SatOcc.eqF 0 1 ⊓ DescriptiveComplexity.HamGadget.varF 0
- DescriptiveComplexity.HamGadget.domF DescriptiveComplexity.HamGadget.HTag.lft = DescriptiveComplexity.SatOcc.eqF 0 1 ⊓ DescriptiveComplexity.HamGadget.varF 0
- DescriptiveComplexity.HamGadget.domF DescriptiveComplexity.HamGadget.HTag.rgt = DescriptiveComplexity.SatOcc.eqF 0 1 ⊓ DescriptiveComplexity.HamGadget.varF 0
- DescriptiveComplexity.HamGadget.domF DescriptiveComplexity.HamGadget.HTag.pad0 = DescriptiveComplexity.SatOcc.eqF 0 1 ⊓ DescriptiveComplexity.HamGadget.varF 0
- DescriptiveComplexity.HamGadget.domF (DescriptiveComplexity.HamGadget.HTag.ain s) = DescriptiveComplexity.SatOcc.occF s 1 0
- DescriptiveComplexity.HamGadget.domF (DescriptiveComplexity.HamGadget.HTag.bout s) = DescriptiveComplexity.SatOcc.occF s 1 0
- DescriptiveComplexity.HamGadget.domF (DescriptiveComplexity.HamGadget.HTag.pad s) = DescriptiveComplexity.SatOcc.occF s 1 0
- DescriptiveComplexity.HamGadget.domF DescriptiveComplexity.HamGadget.HTag.cls = DescriptiveComplexity.SatOcc.eqF 0 1 ⊓ DescriptiveComplexity.SatOcc.clF 0
Instances For
Dependency graph
The arc formulas, by tags: DescriptiveComplexity.HamGadget.Step, drawn. The free
variable (i, j) is the j-th component of the i-th vertex.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.lft DescriptiveComplexity.HamGadget.HTag.pad0 = DescriptiveComplexity.SatOcc.eqF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.pad0 DescriptiveComplexity.HamGadget.HTag.lft = DescriptiveComplexity.SatOcc.eqF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.top DescriptiveComplexity.HamGadget.HTag.lft = DescriptiveComplexity.SatOcc.eqF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.top DescriptiveComplexity.HamGadget.HTag.rgt = DescriptiveComplexity.SatOcc.eqF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.lft DescriptiveComplexity.HamGadget.HTag.top = DescriptiveComplexity.HamGadget.nextVarF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.rgt DescriptiveComplexity.HamGadget.HTag.top = DescriptiveComplexity.HamGadget.nextVarF (0, 0) (1, 0)
- DescriptiveComplexity.HamGadget.stepF DescriptiveComplexity.HamGadget.HTag.zero DescriptiveComplexity.HamGadget.HTag.zero = ⊤
- DescriptiveComplexity.HamGadget.stepF x✝¹ x✝ = ⊥
Instances For
Dependency graph
The relativized interpretation drawing the row graph of a CNF formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Realization #
Which pairs of elements are vertices, by tag.
Equations
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.top x✝¹ x✝ = (x✝¹ = x✝ ∧ DescriptiveComplexity.SatOccurs A x✝¹)
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.lft x✝¹ x✝ = (x✝¹ = x✝ ∧ DescriptiveComplexity.SatOccurs A x✝¹)
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.rgt x✝¹ x✝ = (x✝¹ = x✝ ∧ DescriptiveComplexity.SatOccurs A x✝¹)
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.pad0 x✝¹ x✝ = (x✝¹ = x✝ ∧ DescriptiveComplexity.SatOccurs A x✝¹)
- DescriptiveComplexity.HamGadget.Dom (DescriptiveComplexity.HamGadget.HTag.ain s) x✝¹ x✝ = DescriptiveComplexity.SatOcc.OccIn x✝ x✝¹ s
- DescriptiveComplexity.HamGadget.Dom (DescriptiveComplexity.HamGadget.HTag.bout s) x✝¹ x✝ = DescriptiveComplexity.SatOcc.OccIn x✝ x✝¹ s
- DescriptiveComplexity.HamGadget.Dom (DescriptiveComplexity.HamGadget.HTag.pad s) x✝¹ x✝ = DescriptiveComplexity.SatOcc.OccIn x✝ x✝¹ s
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.cls x✝¹ x✝ = (x✝¹ = x✝ ∧ DescriptiveComplexity.SatOcc.IsCl x✝¹)
- DescriptiveComplexity.HamGadget.Dom DescriptiveComplexity.HamGadget.HTag.zero x✝¹ x✝ = ((x✝¹ = x✝ ∧ IsBot x✝¹) ∧ ¬∃ (c : A), DescriptiveComplexity.SatOcc.IsCl c)
Instances For
Dependency graph
Dependency graph
The interpreted universe is the vertex type of the row graph #
Dependency graph
The vertex of a point of the interpreted universe.
Equations
- DescriptiveComplexity.HamGadget.vtxOf p = ⟨DescriptiveComplexity.HamGadget.toVtx (↑p).1 ((↑p).2 0) ((↑p).2 1), ⋯⟩
Instances For
Dependency graph
Dependency graph
Dependency graph
The interpreted universe is the vertex type of the row graph.
Equations
Instances For
Dependency graph
The interpreted arcs are the arcs of the row graph.
Dependency graph
Correctness of the interpretation, for counting.
Dependency graph
#1-in-SAT reduces parsimoniously to #Directed Hamilton Circuit, by a relativized interpretation: the tagged pairs that are no vertex of the row graph are left out of the universe.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
#Directed Hamilton Circuit is parsimoniously #P-hard.
Dependency graph
#Directed Hamilton Circuit is parsimoniously #P-complete: counting
the Hamilton circuits of a digraph.
Registered in the Lax archive as
Lax280166.DirHamCircuitComplete.sharpDirHamCircuit_sharpP_parsimoniousComplete.
Dependency graph
SharpDirHamCircuit is #P-complete: parsimoniously, hence under subtractive
reductions.