An executable Barrington compiler -- definitions #
The original existence proof chooses conjugators and commutator factors inside
Prop. This module instead searches the finite group S₅ explicitly, making
the target-cycle decomposition and the resulting formula compiler executable.
Test whether g conjugates source to target.
Instances For
The first conjugator in the canonical finite enumeration of S₅, or the
identity if no conjugator exists.
Equations
- Complexity.firstConjugator5 source target = (List.find? (Complexity.isConjugator5 source target) (Complexity.allPermutationsFin 5)).getD 1
Instances For
The first fixed 5-cycle in the explicit Barrington commutator.
Equations
Instances For
The second fixed 5-cycle in the explicit Barrington commutator.
Instances For
The fixed target cycle obtained as the commutator of the two base cycles.
Equations
Instances For
Canonically search for a permutation conjugating the fixed target cycle to
target.
Equations
Instances For
The left factor in the canonical commutator decomposition of target.
Equations
Instances For
The right factor in the canonical commutator decomposition of target.
Equations
Instances For
Compile a Boolean formula to a width-5 permutation branching program
representing it through target.
The definition is total for every target permutation. Its correctness theorem
assumes that target is a 5-cycle. Binary gates use the executable canonical
commutator decomposition above; no choice from an existential proof remains.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.barringtonCompile (Complexity.BoolFormula.var i) x✝ = [{ var := i, perm0 := 1, perm1 := x✝ }]
- Complexity.barringtonCompile Complexity.BoolFormula.tru x✝ = [Complexity.BPInstr.const x✝]
- Complexity.barringtonCompile Complexity.BoolFormula.fls x✝ = []
- Complexity.barringtonCompile formula.neg x✝ = (Complexity.barringtonCompile formula x✝⁻¹).postMul x✝