Canonical traces as combined switching blocks #
This module extracts the source-term block structure of a canonical DNF path. Each raw block stores increasing source positions and path bits relative to the values satisfying the selected term. Every nonfinal block is proved to contain a mismatch: without one, that term would remain the first surviving term after its last live variable was fixed, so canonical selection could not start a later nonempty block.
The result is the structural input to the counted combined advice type. No formulas, paths, assignments, or circuits are enumerated here.
Position and relative path bit before a block boundary is synthesized.
Equations
- Algebraic.AC0.Switching.RelativeQuery width = (Fin width × Bool)
Instances For
Forget the block-boundary bit of elementary query advice.
Equations
- advice.toRelativeQuery = (advice.position, advice.difference)
Instances For
A raw source-term block contains a path value that falsifies one of the selected term's literals.
Equations
- Algebraic.AC0.Switching.RelativeBlockHasMismatch block = ∃ query ∈ block, query.2 = true
Instances For
Every block except the last has a relative path mismatch.
Equations
- One or more equations did not get rendered due to their size.
- Algebraic.AC0.Switching.RelativeBlocksHaveContinuingMismatch [] = True
- Algebraic.AC0.Switching.RelativeBlocksHaveContinuingMismatch [head] = True
Instances For
Prepend a query to the first block, creating that block when necessary.
Equations
Instances For
Partition a canonical trace into maximal source-term blocks.
Equations
- (Algebraic.AC0.DNF.CanonicalTrace.nil rho).combinedBlocks = []
- (Algebraic.AC0.DNF.CanonicalTrace.start found support_eq nonempty block).combinedBlocks = block.combinedBlocks
Instances For
Partition the remaining part of a canonical source-term traversal.
Equations
- One or more equations did not get rendered due to their size.
- (Algebraic.AC0.DNF.CanonicalBlockTrace.nil rho index rest).combinedBlocks = []
Instances For
Flattening raw blocks forgets exactly the boundary bit of elementary canonical advice.
The same flattening correspondence inside one source-term block.
Every raw block extracted from a canonical trace is nonempty.
The same nonemptiness invariant inside one source-term traversal.
Canonical block decomposition partitions every query exactly once.
Positions in the first raw block form a sublist of the selected term's remaining source positions.
Source positions are strictly increasing within every canonical block.
The same strict source-order invariant inside one source-term traversal.
Every canonical block contains at most the declared source width.
Queries remaining in the source-term block currently being traversed.
Equations
- (Algebraic.AC0.DNF.CanonicalBlockTrace.nil rho index rest).currentRelativeBlock = []
- tail.takeMore.currentRelativeBlock = (Algebraic.AC0.LiteralSet.sourcePosition term index, Algebraic.AC0.LiteralSet.satisfyingValue term index ^^ value) :: tail.currentRelativeBlock
- (Algebraic.AC0.DNF.CanonicalBlockTrace.takeLast tail).currentRelativeBlock = [(Algebraic.AC0.LiteralSet.sourcePosition term index, Algebraic.AC0.LiteralSet.satisfyingValue term index ^^ value)]
Instances For
Complete source-term blocks following the block currently traversed.
Equations
Instances For
The direct block decomposition is the current nonempty block followed by the blocks reached after its boundary.
A completed current block must contain a falsifying relative bit whenever canonical selection proceeds to a later block.
Every nonfinal block extracted from a canonical trace has a mismatch.
Blocks reached after the current source term inherit the nonfinal mismatch property from their nested canonical traces.