The transcription: SAT ≤ᶠᵒ[≤] NTMAccept #
The first-order half of the reduction. The machine of a CNF formula was built
semantically in DescriptiveComplexity.Problems.Machine.Hardness – plain predicates
on tagged tuples, with its correctness DescriptiveComplexity.satMachine_accepts_iff_satisfiable
proved there. This file writes the defining formulas of an interpretation of
Language.turing in ordered CNF instances, shows each formula realizes exactly
the corresponding predicate of the machine, and bundles the result as the
ordered first-order reduction DescriptiveComplexity.SatTM.sat_ordered_fo_reduction_ntmAccept.
Method #
Everything is arranged so that no simp call ever faces a tag match:
- the binary symbols' formulas are written through two shape helpers –
cstF s(“the second argument is the constant element pinned to the minima”) andoneF s x(“the second argument carries the tagsand the payload held by the variablex”) – matching the two shapesDescriptiveComplexity.cstandDescriptiveComplexity.oneevery state, symbol and transition of the machine has; each has one realization lemma, so each defining formula needs amatchon its first tag only; - realization lemmas take the valuation abstractly, with the values of the
needed variables as equation hypotheses; at the call sites these are
discharged by
rfl, since the interpreted valuation reduces definitionally on concrete tags.
The transfer to DescriptiveComplexity.NTMAccept is then a fieldwise
DescriptiveComplexity.TMData.Agree along the identity equivalence: the machine the
interpreted structure describes agrees with DescriptiveComplexity.satMachine, so
acceptance and well-formedness transport, and correctness is inherited from the
semantic layer.
Formulas for the clause order #
c is the lowest clause, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
c is the highest clause, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
c' is the clause immediately above c, as a formula.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
There is no clause at all, as a formula.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The two shapes of the machine's elements, as formulas #
The second argument of a binary symbol is the constant element cst s:
its tag is s – checked statically – and its payload is the pair of minima.
Equations
- DescriptiveComplexity.SatTM.cstF s t' = if t' = s then DescriptiveComplexity.minF (1, 0) ⊓ DescriptiveComplexity.minF (1, 1) else ⊥
Instances For
Dependency graph
The second argument of a binary symbol is one s (v x): its tag is s,
its payload carries the value of the variable x and the minimum.
Equations
- DescriptiveComplexity.SatTM.oneF s x t' = if t' = s then DescriptiveComplexity.SatOcc.eqF (1, 0) x ⊓ DescriptiveComplexity.minF (1, 1) else ⊥
Instances For
Dependency graph
Dependency graph
Dependency graph
The defining formulas #
The literal test on the source structure, for the statically known truth
value v: this is where the transition relation reads the input formula.
Equations
Instances For
Dependency graph
Defining formula for posn.
Equations
- DescriptiveComplexity.SatTM.posnF DescriptiveComplexity.SatTag.pStart = DescriptiveComplexity.minF (0, 0) ⊓ DescriptiveComplexity.minF (0, 1)
- DescriptiveComplexity.SatTM.posnF DescriptiveComplexity.SatTag.pCell = DescriptiveComplexity.minF (0, 1)
- DescriptiveComplexity.SatTM.posnF DescriptiveComplexity.SatTag.pEnd = DescriptiveComplexity.minF (0, 0) ⊓ DescriptiveComplexity.minF (0, 1)
- DescriptiveComplexity.SatTM.posnF (DescriptiveComplexity.SatTag.pFill i) = ⊤
- DescriptiveComplexity.SatTM.posnF x✝ = ⊥
Instances For
Dependency graph
Defining formula for tr: the payload promises of
DescriptiveComplexity.SatTr.
Equations
- DescriptiveComplexity.SatTM.trF DescriptiveComplexity.SatTag.tGuessStart = DescriptiveComplexity.minF (0, 0) ⊓ DescriptiveComplexity.minF (0, 1)
- DescriptiveComplexity.SatTM.trF (DescriptiveComplexity.SatTag.tGuessVal b) = DescriptiveComplexity.minF (0, 1)
- DescriptiveComplexity.SatTM.trF DescriptiveComplexity.SatTag.tGuessEndAcc = DescriptiveComplexity.minF (0, 0) ⊓ DescriptiveComplexity.minF (0, 1) ⊓ DescriptiveComplexity.SatTM.noClF
- DescriptiveComplexity.SatTM.trF DescriptiveComplexity.SatTag.tGuessEndChk = DescriptiveComplexity.minF (0, 1) ⊓ DescriptiveComplexity.SatTM.minClF (0, 0)
- DescriptiveComplexity.SatTM.trF (DescriptiveComplexity.SatTag.tChk b f d) = DescriptiveComplexity.SatOcc.clF (0, 0)
- DescriptiveComplexity.SatTM.trF (DescriptiveComplexity.SatTag.tTurnNext d) = DescriptiveComplexity.SatTM.nextClF (0, 0) (0, 1)
- DescriptiveComplexity.SatTM.trF (DescriptiveComplexity.SatTag.tTurnAcc d) = DescriptiveComplexity.minF (0, 1) ⊓ DescriptiveComplexity.SatTM.maxClF (0, 0)
- DescriptiveComplexity.SatTM.trF x✝ = ⊥
Instances For
Dependency graph
Defining formula for start.
Equations
Instances For
Dependency graph
Defining formula for acc: any payload – acceptance is read off the tag
alone, exactly as DescriptiveComplexity.SatAcc does.
Equations
Instances For
Dependency graph
Defining formula for blank.
Equations
Instances For
Dependency graph
Defining formula for right: a static condition on the tag.
Equations
- DescriptiveComplexity.SatTM.rightF DescriptiveComplexity.SatTag.tGuessStart = ⊤
- DescriptiveComplexity.SatTM.rightF (DescriptiveComplexity.SatTag.tGuessVal b) = ⊤
- DescriptiveComplexity.SatTM.rightF (DescriptiveComplexity.SatTag.tChk b f d) = if d = true then ⊤ else ⊥
- DescriptiveComplexity.SatTM.rightF (DescriptiveComplexity.SatTag.tTurnNext d) = if d = true then ⊥ else ⊤
- DescriptiveComplexity.SatTM.rightF (DescriptiveComplexity.SatTag.tTurnAcc d) = if d = true then ⊥ else ⊤
- DescriptiveComplexity.SatTM.rightF x✝ = ⊥
Instances For
Dependency graph
Defining formula for inp, the initial tape.
Equations
- DescriptiveComplexity.SatTM.inpF DescriptiveComplexity.SatTag.pStart x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sStart x✝
- DescriptiveComplexity.SatTM.inpF DescriptiveComplexity.SatTag.pCell x✝ = DescriptiveComplexity.SatTM.oneF DescriptiveComplexity.SatTag.sU (0, 0) x✝
- DescriptiveComplexity.SatTM.inpF DescriptiveComplexity.SatTag.pEnd x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sEnd x✝
- DescriptiveComplexity.SatTM.inpF x✝¹ x✝ = ⊥
Instances For
Dependency graph
Defining formula for tsrc.
Equations
- DescriptiveComplexity.SatTM.tsrcF DescriptiveComplexity.SatTag.tGuessStart x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tsrcF (DescriptiveComplexity.SatTag.tGuessVal b) x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tsrcF DescriptiveComplexity.SatTag.tGuessEndAcc x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tsrcF DescriptiveComplexity.SatTag.tGuessEndChk x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tsrcF (DescriptiveComplexity.SatTag.tChk b f d) x✝ = DescriptiveComplexity.SatTM.oneF (DescriptiveComplexity.SatTag.qChk f d) (0, 0) x✝
- DescriptiveComplexity.SatTM.tsrcF (DescriptiveComplexity.SatTag.tTurnNext d) x✝ = DescriptiveComplexity.SatTM.oneF (DescriptiveComplexity.SatTag.qChk true d) (0, 0) x✝
- DescriptiveComplexity.SatTM.tsrcF (DescriptiveComplexity.SatTag.tTurnAcc d) x✝ = DescriptiveComplexity.SatTM.oneF (DescriptiveComplexity.SatTag.qChk true d) (0, 0) x✝
- DescriptiveComplexity.SatTM.tsrcF x✝¹ x✝ = ⊥
Instances For
Dependency graph
Defining formula for tread.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.SatTM.treadF DescriptiveComplexity.SatTag.tGuessStart x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sStart x✝
- DescriptiveComplexity.SatTM.treadF (DescriptiveComplexity.SatTag.tGuessVal b) x✝ = DescriptiveComplexity.SatTM.oneF DescriptiveComplexity.SatTag.sU (0, 0) x✝
- DescriptiveComplexity.SatTM.treadF DescriptiveComplexity.SatTag.tGuessEndAcc x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sEnd x✝
- DescriptiveComplexity.SatTM.treadF DescriptiveComplexity.SatTag.tGuessEndChk x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sEnd x✝
- DescriptiveComplexity.SatTM.treadF x✝¹ x✝ = ⊥
Instances For
Dependency graph
Defining formula for tdst: the one place the instance is consulted, in
the check clause, through DescriptiveComplexity.SatTM.chkLitF.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.SatTM.tdstF DescriptiveComplexity.SatTag.tGuessStart x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tdstF (DescriptiveComplexity.SatTag.tGuessVal b) x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qGuess x✝
- DescriptiveComplexity.SatTM.tdstF DescriptiveComplexity.SatTag.tGuessEndAcc x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qAcc x✝
- DescriptiveComplexity.SatTM.tdstF DescriptiveComplexity.SatTag.tGuessEndChk x✝ = DescriptiveComplexity.SatTM.oneF (DescriptiveComplexity.SatTag.qChk false false) (0, 0) x✝
- DescriptiveComplexity.SatTM.tdstF (DescriptiveComplexity.SatTag.tTurnNext d) x✝ = DescriptiveComplexity.SatTM.oneF (DescriptiveComplexity.SatTag.qChk false !d) (0, 1) x✝
- DescriptiveComplexity.SatTM.tdstF (DescriptiveComplexity.SatTag.tTurnAcc d) x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.qAcc x✝
- DescriptiveComplexity.SatTM.tdstF x✝¹ x✝ = ⊥
Instances For
Dependency graph
Defining formula for twrite.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.SatTM.twriteF DescriptiveComplexity.SatTag.tGuessStart x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sStart x✝
- DescriptiveComplexity.SatTM.twriteF DescriptiveComplexity.SatTag.tGuessEndAcc x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sEnd x✝
- DescriptiveComplexity.SatTM.twriteF DescriptiveComplexity.SatTag.tGuessEndChk x✝ = DescriptiveComplexity.SatTM.cstF DescriptiveComplexity.SatTag.sEnd x✝
- DescriptiveComplexity.SatTM.twriteF x✝¹ x✝ = ⊥
Instances For
Dependency graph
The interpretation of machine instances in ordered CNF instances. The
order is DescriptiveComplexity.lexLeF, so its linearity comes from
DescriptiveComplexity.tagTupleOrder with no tag-pair analysis; every other symbol
matches on its first tag only, the shape of the second being delegated to
DescriptiveComplexity.SatTM.cstF and DescriptiveComplexity.SatTM.oneF.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The realization lemmas #
One per symbol of Language.turing, each saying its defining formula defines
the corresponding predicate of DescriptiveComplexity.satMachine. The universe of the
interpreted structure is definitionally DescriptiveComplexity.SatV A;
DescriptiveComplexity.SatTM.satMapEquiv names the identity equivalence, along which
the machines will be shown to agree.
The identity equivalence between the tagged tuples and the interpreted universe.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The three shapes of the initial tape, per tag of the cell.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The check clause's new flag, realized: the literal test on the source.
Dependency graph
Dependency graph
The machines agree, and the reduction #
The interpreted structure describes the machine of the instance: every
field of DescriptiveComplexity.tmData on the interpreted structure agrees, along the
identity equivalence, with DescriptiveComplexity.satMachine.
Dependency graph
Correctness of the interpretation: the interpreted structure is a
yes-instance of machine acceptance exactly when the CNF instance is
satisfiable. Well-formedness holds unconditionally
(DescriptiveComplexity.satMachine_wellFormed), and acceptance is
DescriptiveComplexity.satMachine_accepts_iff_satisfiable, both transported along the
agreement.
Dependency graph
SAT reduces to acceptance by a nondeterministic machine: the ordered
first-order reduction building M_φ inside the instance.
Equations
- One or more equations did not get rendered due to their size.