Skip to content

Commit 7d46dbc

Browse files
hyperpolymathclaude
andcommitted
feat(axioms): add really_believe_me, prim__crash (Idris2) + {!!} holes (Agda)
Extend axiom tracker with dangerous patterns discovered during proof closure audit across the estate: Idris2: - really_believe_me (Reject) — more dangerous than believe_me - prim__crash (Reject) — unconditional crash masks proof obligations Agda: - {!!} holes (Warning) — incomplete proof terms (found 10 in valence-shell CopyMoveOperations, now all filled) Motivated by proof closure work on valence-shell, protocol-squisher, and ephapax where these patterns were found and eliminated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ccbe52c commit 7d46dbc

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

src/rust/verification/axiom_tracker.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ impl AxiomTracker {
122122
danger_level: DangerLevel::Noted,
123123
explanation: "Decision procedure -- may not verify constructively".to_string(),
124124
},
125+
DangerousPattern {
126+
pattern: "axiom ".to_string(),
127+
danger_level: DangerLevel::Noted,
128+
explanation: "User-defined axiom -- not verified by kernel".to_string(),
129+
},
125130
],
126131
);
127132

@@ -156,6 +161,11 @@ impl AxiomTracker {
156161
danger_level: DangerLevel::Warning,
157162
explanation: "Postulate -- assumed without proof".to_string(),
158163
},
164+
DangerousPattern {
165+
pattern: "{!!}".to_string(),
166+
danger_level: DangerLevel::Warning,
167+
explanation: "Agda hole -- incomplete proof term".to_string(),
168+
},
159169
DangerousPattern {
160170
pattern: "--type-in-type".to_string(),
161171
danger_level: DangerLevel::Reject,
@@ -215,6 +225,47 @@ impl AxiomTracker {
215225
explanation: "Asserts totality without proof -- may hide non-termination"
216226
.to_string(),
217227
},
228+
DangerousPattern {
229+
pattern: "assert_smaller".to_string(),
230+
danger_level: DangerLevel::Warning,
231+
explanation:
232+
"assert_smaller bypasses termination checker without proof".to_string(),
233+
},
234+
DangerousPattern {
235+
pattern: "unsafePerformIO".to_string(),
236+
danger_level: DangerLevel::Reject,
237+
explanation:
238+
"unsafePerformIO breaks referential transparency in Idris2".to_string(),
239+
},
240+
DangerousPattern {
241+
pattern: "really_believe_me".to_string(),
242+
danger_level: DangerLevel::Reject,
243+
explanation:
244+
"UNSOUND: really_believe_me is even more dangerous than believe_me — bypasses all checks".to_string(),
245+
},
246+
DangerousPattern {
247+
pattern: "prim__crash".to_string(),
248+
danger_level: DangerLevel::Reject,
249+
explanation:
250+
"prim__crash unconditionally crashes — masks proof obligations".to_string(),
251+
},
252+
],
253+
);
254+
255+
// F* dangerous constructs
256+
patterns.insert(
257+
ProverKind::FStar,
258+
vec![
259+
DangerousPattern {
260+
pattern: "admit".to_string(),
261+
danger_level: DangerLevel::Warning,
262+
explanation: "F* admit accepts goal without proof".to_string(),
263+
},
264+
DangerousPattern {
265+
pattern: "assume".to_string(),
266+
danger_level: DangerLevel::Warning,
267+
explanation: "F* assume introduces unverified assumption".to_string(),
268+
},
218269
],
219270
);
220271

@@ -245,6 +296,9 @@ impl AxiomTracker {
245296
ProverKind::Idris2 => {
246297
trimmed.starts_with("--") || trimmed.starts_with("{-")
247298
},
299+
ProverKind::FStar => {
300+
trimmed.starts_with("(*") || trimmed.starts_with("//")
301+
},
248302
_ => false,
249303
};
250304

0 commit comments

Comments
 (0)