Paired implication wires #
Each cell has two lanes, each with an entry and an exit. Local constraints must equate all four port values. Across a gap, lane zero implies the next entry from the previous exit; lane one implies the previous exit from the next entry. These implications use separate ports. Under the local equalities, they force the representative values of consecutive cells to agree. Thus every port of a nonempty wire has the value of its first lane-zero entry.
This module uses ordinary CNF semantics. It supplies no local cell constraints or geometry. The two clauses and four literal positions per gap are counted with multiplicity, without distinctness assumptions on the port variables.
Main definitions #
Cell,Cell.Agree: two entry/exit pairs and equality of all four values.gapClauses,links: opposite implications across one gap and all consecutive gaps.
Main results #
eval_links_iff: under local agreement, the links equate consecutive representatives.agree_head,agree_head_of_ne_nil: every entry and exit has the first entry's value.eval_links_of_constant: constant port values satisfy every link.length_links,length_vars_links,length_of_mem_links: exact sizes and binary width.
References #
The paired-port composition and equality argument are original.
Two lanes of entry/exit variables. Lane zero's entry represents the cell's value.
Instances For
Across one gap, lane zero points forward and lane one points backward.
Instances For
Under local agreement and satisfied links, all entries and exits have the value of the first lane-zero entry, including for a singleton wire.
The head-agreement rule for a list with an explicit nonemptiness hypothesis. The fallback
only makes headD total and does not affect the result.
There are exactly two clauses per gap.
Each gap clause is binary, even if some port variables coincide.
A gap contributes four literal positions, counted with multiplicity.
There are exactly two clauses for each consecutive pair of cells.
Paired links have width at most two.