You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: autoclrs/TEST_REVIEW_REPORT.md
+18-9Lines changed: 18 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -476,15 +476,24 @@ witness without claiming to enumerate all admissible outputs.
476
476
477
477
## Remaining Gaps and Improvement Opportunities
478
478
479
-
### Priority 1: Specification Gaps
480
-
481
-
| Algorithm | Gap | Status |
482
-
|-----------|-----|--------|
483
-
|**BST Array (Ch12)**| Insert success/failure not characterized | ✅ **Resolved** — Added `insert_will_succeed` predicate; postcondition now has `success == insert_will_succeed keys valid cap 0 key`|
484
-
|**Counting Sort (Ch08)**|`counting_sort_by_digit` untested | ✅ **Resolved** — Test exercises by-digit sort with base=10, d=0; extracts permutation + sorted_on_digit from opaque stability predicate |
485
-
|**DFS (Ch22)**| Edge classification not in interface | ✅ **Resolved** — Added `is_back_edge`, `is_tree_or_forward_edge`, `is_cross_edge` to Graph.Common; test classifies edges at runtime |
486
-
|**DFS (Ch22)**| White-path theorem not formalized | ✅ **Resolved** — Flat-array white-path vocabulary (`dfs_ancestor_flat`, `white_at_time_flat`, `path_all_white_flat`, `white_path_exists_flat`) added to Graph.Common; `pred_implies_tree_or_forward` lemma derives DFS ancestor relation from postcondition; Impl.fsti documents connection to proven WhitePath.fst theorem. Full simulation bridge is future work. |
487
-
|**Prim (Ch23)**| Postcondition lacks `is_full_vec` for returned vectors | ✅ **Resolved** — Added `V.is_full_vec (fst res) /\ V.is_full_vec (snd res)`; ImplTest uses `V.free` instead of `drop_`|
479
+
### Priority 1: Specification Gaps — All Resolved ✅
480
+
481
+
All five identified P1 specification gaps have been addressed:
482
+
483
+
| Algorithm | Gap | Resolution |
484
+
|-----------|-----|------------|
485
+
|**Prim (Ch23)**| Missing `is_full_vec` on returned vectors | Postcondition strengthened; ImplTest uses `V.free`|
|**Counting Sort (Ch08)**|`counting_sort_by_digit` untested | Test exercises by-digit sort; extracts permutation + sorted_on_digit from opaque stability predicate |
488
+
|**DFS (Ch22)**| Edge classification absent from interface |`is_back_edge`, `is_tree_or_forward_edge`, `is_cross_edge` in Graph.Common; runtime-classified in test |
489
+
|**DFS (Ch22)**| White-path theorem not connected to Impl | Flat-array vocabulary in Graph.Common; `pred_implies_tree_or_forward` lemma; Impl.fsti documents connection to proven WhitePath.fst |
490
+
491
+
**Future work (DFS white-path bridge):** The white-path theorem is fully proven
492
+
in `DFS.WhitePath.fst` for the pure spec (2D adjacency, `Seq.seq nat`
493
+
timestamps). Flat-array mirror definitions now exist in `Graph.Common` for the
494
+
implementation's `Seq.seq int` representation. A full simulation proof — showing
495
+
the imperative implementation computes the same timestamps as the spec function
496
+
`dfs adj n` — would close the gap entirely but is a substantial effort.
0 commit comments