Generated control families: the runs, iterated #
The run theorems of the layer take their control evolution as abstract
families over the enumeration – fsOf a j, the pointer before the j-th
read of round a – tied together by per-cover equations. An instantiation
has to produce such a family, and its rounds are defined by iteration: the
next round's entry is a function of the previous round's exit. This file
builds the family once, for every instantiation:
DescriptiveComplexity.Draw.iterOrd– a state iterated along a finite linear order, by recursion onDescriptiveComplexity.orank(the bottom is the base, each cover one step);DescriptiveComplexity.Draw.chainSt– the within-round read chain, each read's stored bit chosen classically;DescriptiveComplexity.Draw.elem_run_iter– the element loop's run at the generated family: the caller supplies only the name guards at the generated states, the exhaustion conditions, and the geometry.
Iteration along a finite linear order #
The iterated state at a rank: the base at 0, one step per rank – the
element of that rank supplying the step's index.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.iterState init step 0 = init
Instances For
Dependency graph
A state iterated along the order: the base at the bottom, one step per cover.
Equations
- DescriptiveComplexity.Draw.iterOrd init step a = DescriptiveComplexity.Draw.iterState init step (DescriptiveComplexity.orank a)
Instances For
Dependency graph
At the bottom the iteration is the base.
Dependency graph
Across a cover the iteration steps once, at the covered element.
Dependency graph
An invariant of the step is an invariant of the iteration: what the base satisfies and every step preserves holds at every element. This is what a threaded tape family's field lemmas are proved by – the fields a round leaves alone are preserved by each step, hence along the whole loop.
Dependency graph
The within-round read chain #
The read chain of one round: the j-th prefix of the reads applied
to the round's entry state, each stored bit the read's.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.chainSt bit upd base 0 = base
Instances For
Dependency graph
Dependency graph
A positive read's link.
Dependency graph
A negative read's link.
Dependency graph
The element loop's run, at the generated family #
The generated round-entry state: the loop's initEl at the bottom,
each cover the previous round's reads folded and advanced.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The generated within-round family: the read chain of round a
applied to its entry state.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The background is read at the working cell alone. Both generated
families mention rest only as rest v, so a background that moves
elsewhere – at a register cell, say, where the four register slots live –
generates the same control. This is what makes a loop blind to the two
scratch registers of the state it is run at.
Two backgrounds agreeing at the working cell give one round-entry family.
Dependency graph
Two backgrounds agreeing at the working cell give one within-round family.
Dependency graph
The element loop's run at the generated family, on a clock: only the name guards at the generated states, the exhaustion conditions and the geometry are owed; the family equations hold by construction.
Dependency graph
The element loop's run at the generated family, the budget forgotten.
Dependency graph
The tag-branched machinery's run, at the generated families #
The generated witness chain: the i-th prefix of the witness reads
applied to the entry control, each one-hot bit the read's.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The witness chain reads its background at the working cell alone.
Dependency graph
The tag-branched machinery's run at the generated families, on a clock: the witness chain and the branch's element loop are both generated, so only the name guards, the branch decode and the exhaustion conditions are owed, and the cost is the chain's reads plus the branch's whole loop.
Dependency graph
The tag-branched machinery's run at the generated families, the budget forgotten.
Dependency graph
The tuple loop's run, at the generated families #
The generated destination track: empty of the loop's bits at the bottom, each cover the round's copy applied.
Equations
- DescriptiveComplexity.Draw.tupleIterD mSrc xS xD mD₀ a = DescriptiveComplexity.Draw.iterOrd mD₀ (fun (a' : ι) (m : I → Prop) (y : I) => y = xD a' ∧ mSrc (xS a') ∨ y ≠ xD a' ∧ m y) a
Instances For
Dependency graph
The generated pre-store control: the loop's initLv at the bottom,
each cover the previous round folded and advanced, the round's symbol read
from the destination-dependent background.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The generated post-store control: the round's bit stored.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The copy loop reads its background at the working cell alone – at every destination content, the cell being the same one.
Dependency graph
The same, after the round's store.
Dependency graph
The tuple loop's run at the generated families, on a clock: only the name guards, the copied-bit read-back and the exhaustion conditions are owed, and the cost is a round's width once per tuple of the enumeration.
Dependency graph
The tuple loop's run at the generated families, the budget forgotten.
Dependency graph
The destination track, in closed form #
What the copy loop can hold: every cell of the destination track is either one the loop wrote – a destination cell of some round – or one it started with. A property of cells closed under both is therefore closed under the whole loop; that is how the target of a random access is known to be an address of argument cells alone.
Dependency graph
What the copy loop has written: a cell holds a bit exactly when some earlier round wrote it – that round's source bit – or it held one from the start and no round has touched it. The destination cells being distinct is what makes the disjunction honest: a cell is written at most once.