Iterating an endomorphism circuit #
Sequentially compose a circuit with itself while retaining exact semantics and cost. This construction is useful for fixed-round arithmetic algorithms such as exponentiation and inversion.
Left-associated iteration, universe-polymorphic over Sort.
Equations
- Cslib.Circuits.Circuit.iterateFunction function 0 = id
- Cslib.Circuits.Circuit.iterateFunction function steps.succ = fun (input : A) => function (Cslib.Circuits.Circuit.iterateFunction function steps input)
Instances For
@[simp]
theorem
Cslib.Circuits.Circuit.eval_iterate
{σ : Signature}
{n : ℕ}
{U : Type u_2}
(circuit : Circuit σ n n)
(steps : ℕ)
(interpretation : Interpretation σ U)
(input : Fin n → U)
:
(circuit.iterate steps).eval interpretation input = iterateFunction (circuit.eval interpretation) steps input
Iterated circuit evaluation is function iteration.
@[simp]
theorem
Cslib.Circuits.Circuit.cost_iterate
{σ : Signature}
{n : ℕ}
(circuit : Circuit σ n n)
(steps : ℕ)
(operationCost : Algebraic.OperationCost σ)
:
Iterating a circuit multiplies its weighted cost by the round count.