Permutation branching programs #
Width-w permutation branching programs: a program is a list of
instructions, each of which reads one input variable and applies one of two
permutations of Fin w accordingly; the program evaluates to the ordered
product of the selected permutations (roadmap track M3, toward Barrington's
theorem).
Main definitions and results #
BPInstr,BP— instructions and programsBP.eval— the evaluated permutationBP.eval_append,BP.eval_cons— the product (append/cons) semantics that Barrington's inductive construction rests on
A single width-w branching-program instruction: read variable var, and
apply perm1 if it is true, perm0 if it is false.
- var : ℕ
The input variable this instruction reads.
- perm0 : Equiv.Perm (Fin w)
The permutation applied when the variable is
false. - perm1 : Equiv.Perm (Fin w)
The permutation applied when the variable is
true.
Instances For
A width-w permutation branching program is a list of instructions.
Equations
- Complexity.BP w = List (Complexity.BPInstr w)
Instances For
Evaluate a branching program to a permutation: the ordered product of its instructions' selected permutations.
Equations
- Complexity.BP.eval α p = (List.map (Complexity.BPInstr.eval α) p).prod
Instances For
Rename the input variables throughout a program.