Reading an edge's data off the input #
The constants of a round — the expander's degree, the walk's length, the killing rate, how many constraints the alphabet has, how many random strings the tester uses — are fixed. Given them, an edge number of the composed graph splits by division into a test, a random string and a read; the test splits into a vertex and a killed dart; and the killed dart drives the walk, whose parities, codes and return darts are what the edge's data is made of.
This module writes that out as FP functions.
Main definitions #
Complexity.Round— the constants of a roundComplexity.keyFn— the edge's data, as a string
Main results #
Complexity.keyFn_mem_FP— it is anFPfunctionComplexity.keyFn_length_le— of bounded length, whatever the inputComplexity.keyFn_eq— on a real edge it writes that edge's own dataComplexity.cubeFn_eq,Complexity.codeFn_eq— so the composed edge's second endpoint and its constraint areFPfunctions of the input
Splitting an edge number #
The test an edge belongs to.
Equations
- Complexity.testFn r w = Complexity.divC (r.cZ * 22) (Complexity.pairSnd w)
Instances For
The random string it runs on.
Equations
- Complexity.randFn r w = Complexity.divC 22 (Complexity.modC (r.cZ * 22) (Complexity.pairSnd w))
Instances For
The read it asks for.
Equations
Instances For
The killed dart the test is.
Equations
- Complexity.dartFn r w = Complexity.modC r.cD (Complexity.testFn r w)
Instances For
The vertex it starts at.
Equations
- Complexity.vertFn r w = Complexity.divC r.cD (Complexity.testFn r w)
Instances For
The walk's steps.
Equations
- Complexity.stepsFn r w = Complexity.divC r.cQ (Complexity.dartFn r w)
Instances For
The walk's coins.
Equations
- Complexity.coinFn r w = Complexity.modC r.cQ (Complexity.dartFn r w)
Instances For
The input the walk algorithm reads.
Equations
- Complexity.walkArg r w = Complexity.pair (Complexity.pairFst w) (Complexity.pair (Complexity.vertFn r w) (Complexity.stepsFn r w))
Instances For
The input the killed-walk algorithms read.
Equations
- Complexity.killArg r w = Complexity.pair (Complexity.pairFst w) (Complexity.pair (Complexity.vertFn r w) (Complexity.dartFn r w))
Instances For
The walk's data #
Where the walk stops.
Equations
- Complexity.stopBlk r w = Complexity.stopFn r.q (Complexity.coinsOf r.q r.T) 0 r.T (Complexity.killArg r w)
Instances For
The parity of the vertex the i-th step stands on, and 0 past the end.
Equations
- Complexity.parDigit F pol r i w = Complexity.ifLtLen (List.replicate i true) (Complexity.stopBlk r w) (Complexity.modC 2 (Complexity.walkFn F pol r.deg r.P i (Complexity.walkArg r w))) []
Instances For
The data as a string #
An edge's data, written out as the seven blocks packKey expects.
Equations
- One or more equations did not get rendered due to their size.
Instances For
What the blocks read #
The blocks split an edge number.
The walk's input, once the blocks are known.
The killed walk's input, likewise.
The walk, on encoded vertices #
The walk algorithm, run on a dart's own numbers.
The stopping block is the effective walk's length.
The parity block is the parity tuple's number.
The code block is the code tuple's number.
The return-dart block is the return tuple's number.
The algorithm writes out the walk's own data.
The cube and the code, in polynomial time #
The cube a composed edge's second endpoint names.
Equations
- Complexity.cubeFn F pol r dflt encβ w = List.replicate (Complexity.cubeOfKey encβ (Complexity.keyOfString dflt (Complexity.keyFn F pol r w))) true
Instances For
The code of a composed edge's constraint.
Equations
- Complexity.codeFn F pol r dflt encβ w = List.replicate (Complexity.codeOfKey encβ (Complexity.keyOfString dflt (Complexity.keyFn F pol r w))) true
Instances For
The cube algorithm computes the composed edge's cube.
The cube algorithm, with the dart given as one object.
The code algorithm computes the composed edge's constraint.
The code algorithm, with the dart given as one object.