- Most turns: working out how the bounds walk and the prover connect. That meant reading
loop_record_of, loop_candidates and bounding_loop_stmt, and seeing that the closed forms are stated over ghost names x@S. So the walk needs x == x@S at entry and the entry facts restated over the ghosts (s@ == 0), or a candidate like s == i never proves the goal. The step-1 relative goal also had to be recorded as a disjunction, or bounding_could_pay never asks again for f’s j += 1. Both only showed up while designing step 2.
- Looked up that the brief could have given:
- The walk keeps no types for names (
BoundsFacts.ints is a set). Only parameters, with shape.twice excluding rebound ones, give a sound type for y.
- Nikaia has no
i8, and i64::from needs use std::i64. My first soundness probes failed to type-check because of both.
loop_candidates was private, and record.problem.fixed is the entry facts restated over the ghosts.
- Checks run:
- Run once per step: the cycle script, the probes under
off/on, clippy, and the ten bounds/prove it modules.
- The
tests/compiler --both-settings run: about 10 minutes, and wasted. It only showed drive_actions failing on the driver’s live target/suite.lock; the prove_* programs could have run alone.
- The figures run: it had no same-tree baseline, so the brief’s numbers weren’t comparable.
- One change: the brief should list the integer types Nikaia has and how to write a widening conversion. It should also give a baseline figure per commit (or tell the builder to measure with the pre-change binary first). And it should say “the walk has no name types; use parameters”. Those three would have saved most of the probe rework and made step 3’s figure meaningful.
This site is open source.
Improve this page.