def counter_progress
import stelliferous@0.0.2.0/proofs/loop_projection.bend as LoopProjectionimport Base
import stelliferous@0.0.2.0/proofs/bounded_u32_arithmetic.bend as Arithmetic
101def counter_progress(~State: Data,~step: State -> State,~position: State -> U32,~stride: Nat,
102 ~advances: @+state: State -> {position(step(state)) == (position(state) + U32.from_nat(stride) : U32) : U32},
103 +count: Nat,+state: State) ->
104 {position(iterate(~State,~step,count,state)) == (position(state) + U32.from_nat(Nat.mul(count,stride)) : U32) : U32}:
105 match count:
106 case 0n: Equal.sym(U32,(position(state) + 0 : U32),position(state),Arithmetic.add_zero(position(state)))
107 case 1n+ +rest:
108 %add_counted_stride(position(state),stride,rest) : {position(iterate(~State,~step,rest,step(state))) == _ : U32}
109 %advances(state) : {position(iterate(~State,~step,rest,step(state))) == (_ + U32.from_nat(Nat.mul(rest,stride)) : U32) : U32}
110 counter_progress(~State,~step,~position,~stride,~advances,rest,step(state))
Uses (9)
Used by (0)
No other definition uses this definition.