This module proves that the step functions of equivalent iterators behave the same under certain circumstances.
This function is used in lemmas about iterator equivalence (Iter.Equiv
and IterM.Equiv
).
If the given step contains a successor iterator, replaces the iterator with the quotient of its bundled version.
Equations
Instances For
This type is used in lemmas about iterator equivalence (Iter.Equiv
and IterM.Equiv
).
it.QuotStep
is the quotient of it.Step
where two steps are identified if they agree up to
equivalence of their successor iterator.
Equations
- it.QuotStep = Quot fun (s₁ s₂ : it.Step) => s₁.val.bundledQuotient = s₂.val.bundledQuotient
Instances For
This function is used in lemmas about iterator equivalence (Iter.Equiv
and IterM.Equiv
).
Returns an IterStep
from an IterM.QuotStep
, discarding the IsPlausibleStep
proof.
It commutes with IterStep.bundledQuotient
and Quot.mk _ : it.Step → it.QuotStep
.
Equations
- Std.Iterators.IterM.QuotStep.bundledQuotient = Quot.lift (fun (s : it.Step) => s.val.bundledQuotient) ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Std.Iterators.IterM.QuotStep.restrict step = Quot.mk (fun (s₁ s₂ : it.Step) => s₁.val.bundledQuotient = s₂.val.bundledQuotient) ⋯.choose