Spec.replicate and transcript operations #
Non-dependent n-fold append of the same spec, with Transcript.replicateJoin / replicateSplit,
replicated decorations/refinements, and Strategy.iterate. This is the uniform special case of
Spec.stateChain (see VCVio.Interaction.Basic.StateChain).
@[reducible, inline]
abbrev
Interaction.Spec.Transcript.replicateCons
(spec : Spec)
(n : ℕ)
:
spec.Transcript → (spec.replicate n).Transcript → (spec.replicate (n + 1)).Transcript
Prepend one transcript to a length-n replicated tail.
Instances For
@[reducible, inline]
abbrev
Interaction.Spec.Transcript.replicateUncons
(spec : Spec)
(n : ℕ)
:
(spec.replicate (n + 1)).Transcript → spec.Transcript × (spec.replicate n).Transcript
Split the head round from a length-(n+1) replicated transcript.
Instances For
def
Interaction.Spec.Transcript.replicateJoin
(spec : Spec)
(n : ℕ)
:
(Fin n → spec.Transcript) → (spec.replicate n).Transcript
Combine n transcripts of spec into one of spec.replicate n.
Instances For
def
Interaction.Spec.Transcript.replicateSplit
(spec : Spec)
(n : ℕ)
:
(spec.replicate n).Transcript → Fin n → spec.Transcript
Split spec.replicate n into n per-round transcripts.
Instances For
@[simp]
theorem
Interaction.Spec.Transcript.replicateSplit_replicateJoin
(spec : Spec)
(n : ℕ)
(trs : Fin n → spec.Transcript)
(i : Fin n)
:
theorem
Interaction.Spec.Transcript.replicateSplit_join_zero
(spec : Spec)
(n : ℕ)
(hd : spec.Transcript)
(tl : (spec.replicate n).Transcript)
:
replicateSplit spec (n + 1) (append spec (fun (x : spec.Transcript) => spec.replicate n) hd tl) ⟨0, ⋯⟩ = hd
theorem
Interaction.Spec.Transcript.replicateSplit_join_succ
(spec : Spec)
(n : ℕ)
(hd : spec.Transcript)
(tl : (spec.replicate n).Transcript)
(i : Fin n)
:
replicateSplit spec (n + 1) (append spec (fun (x : spec.Transcript) => spec.replicate n) hd tl) i.succ = replicateSplit spec n tl i
@[simp]
theorem
Interaction.Spec.Transcript.replicateJoin_replicateSplit
(spec : Spec)
(n : ℕ)
(tr : (spec.replicate n).Transcript)
:
def
Interaction.Spec.Decoration.replicate
{S : Type u → Type v}
{spec : Spec}
(d : Decoration S spec)
(n : ℕ)
:
Decoration S (spec.replicate n)
Replicate a decoration n times along Spec.replicate.
Instances For
def
Interaction.Spec.Decoration.Over.replicate
{L : Type u → Type v}
{F : (X : Type u) → L X → Type w}
{spec : Spec}
{d : Decoration L spec}
(r : Over F spec d)
(n : ℕ)
:
Replicate a dependent decoration n times along replicated base
decorations.
Instances For
theorem
Interaction.Spec.Decoration.Over.map_replicate
{L : Type u → Type v}
{F G : (X : Type u) → L X → Type w}
(η : (X : Type u) → (l : L X) → F X l → G X l)
{spec : Spec}
{d : Decoration L spec}
(r : Over F spec d)
(n : ℕ)
:
Decoration.Over.map commutes with Over.replicate.
def
Interaction.Spec.Strategy.iterate
{m : Type u → Type u}
[Monad m]
{spec : Spec}
{α : Type u}
(n : ℕ)
(step : Fin n → α → m (Strategy m spec fun (x : spec.Transcript) => α))
:
α → m (Strategy m (spec.replicate n) fun (x : (spec.replicate n).Transcript) => α)
Iterate a strategy n times on spec.replicate n, threading a value of type α.