Hoare specifications for Tseitin literal buffers and emitters #
This file gives the register-level contracts used by the streaming-controller
induction. A BufferValues packages the values of all six unary registers;
BufferValues.work realizes it as the concrete work-tape function. Every
contract fixes a parked input tape, preserves the scratch register, and tracks
the append-only output word exactly.
Time bounds are explicit structural sums of the already-proved register and emitter bounds. Keeping the composition overhead visible makes these theorems stable under later polynomial rounding.
Main results #
Six-register model #
Values stored in the six fixed work registers of the streaming machine.
- fresh : ℕ
First unused variable index.
- current : ℕ
Variable index currently being decoded.
- a : ℕ
First pending literal's variable index.
- b : ℕ
Second pending literal's variable index.
- c : ℕ
Third pending literal's variable index.
- scratch : ℕ
Temporary register, zero between controller operations.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Realize six values as the concrete fixed-layout unary-register tapes.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Standard Hoare predicate for a fixed input, six registers, and output accumulator.
Equations
- Complexity.SAT.ThreeSAT.Machine.BufferPred inp v ys = Complexity.TM.EmitPred inp v.work ys
Instances For
Encoded output words and structural time bounds #
Exact primitive bound for one literal emitter.
Equations
- Complexity.SAT.ThreeSAT.Machine.literalTime var = 3 * var + 9
Instances For
Structural bound for three literal emitters and a clause separator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Primitive increment/clear bound for a unary register.
Equations
Instances For
Clause emitters #
Emit exactly one encoded three-literal clause, preserving every tape except for append-only output growth.
Specialized wide-link emitter (a ∨ b ∨ fresh).
Pending-clause emission #
Bits emitted when closing the pending finite-control clause shape.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.SAT.ThreeSAT.Machine.pendingBits (Complexity.SAT.ThreeSAT.Machine.PendingSigns.one aSign) v = Complexity.SAT.ThreeSAT.Machine.clauseBits aSign v.a aSign v.a aSign v.a
- Complexity.SAT.ThreeSAT.Machine.pendingBits (Complexity.SAT.ThreeSAT.Machine.PendingSigns.two aSign bSign) v = Complexity.SAT.ThreeSAT.Machine.clauseBits aSign v.a bSign v.b bSign v.b
- Complexity.SAT.ThreeSAT.Machine.pendingBits (Complexity.SAT.ThreeSAT.Machine.PendingSigns.three aSign bSign cSign) v = Complexity.SAT.ThreeSAT.Machine.clauseBits aSign v.a bSign v.b cSign v.c
Instances For
Structural time bound for emitPendingTM.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.SAT.ThreeSAT.Machine.pendingTime (Complexity.SAT.ThreeSAT.Machine.PendingSigns.one aSign) v = Complexity.SAT.ThreeSAT.Machine.clauseTime v.a v.a v.a
- Complexity.SAT.ThreeSAT.Machine.pendingTime (Complexity.SAT.ThreeSAT.Machine.PendingSigns.two aSign bSign) v = Complexity.SAT.ThreeSAT.Machine.clauseTime v.a v.b v.b
- Complexity.SAT.ThreeSAT.Machine.pendingTime (Complexity.SAT.ThreeSAT.Machine.PendingSigns.three aSign bSign cSign) v = Complexity.SAT.ThreeSAT.Machine.clauseTime v.a v.b v.c
Instances For
Emit the exact-3 gadget selected by PendingSigns, leaving all registers
unchanged.
Buffer clearing #
Register values after clearing the current literal and three buffers.
Equations
Instances For
Structural time bound for clearBuffersTM.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Clear all literal registers, preserving fresh/scratch and output.
Wide-window rotation #
Register values after rotating (a,b,c,current,fresh) to
(fresh,c,current,0,fresh+1).
Equations
Instances For
Structural time bound for rollWideBuffersTM.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Rotate the three pending buffers after emitting a wide link.
Literal commit #
Register values after committing currentReg under a pending shape.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.SAT.ThreeSAT.Machine.BufferValues.committed (Complexity.SAT.ThreeSAT.Machine.PendingSigns.three aSign bSign cSign) v = v.rolled
Instances For
Bits emitted while committing a literal. Only the fourth-and-later case emits a completed wide link.
Equations
- Complexity.SAT.ThreeSAT.Machine.commitBits (Complexity.SAT.ThreeSAT.Machine.PendingSigns.three aSign bSign c) v = Complexity.SAT.ThreeSAT.Machine.clauseBits aSign v.a bSign v.b true v.fresh
- Complexity.SAT.ThreeSAT.Machine.commitBits pending v = []
Instances For
Structural time bound for commitLiteralTM.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Commit the current decoded literal: buffer it when fewer than three are pending, or emit and roll a wide link otherwise.
Clause close #
Fresh-register value after the empty-clause advance phase.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.SAT.ThreeSAT.Machine.BufferValues.advanced pending v = v
Instances For
Final registers after closing and clearing a clause.
Equations
Instances For
Time for the fresh-advance phase selected by closeClauseTM.
Equations
Instances For
Structural time bound for closing a clause.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Emit the pending clause, perform the empty-clause fresh increment when needed, and reset all literal buffers.