extend source and target calculi with observable tick effects + add invariant checks for relation preservation and target arity/shape

This commit is contained in:
2026-04-27 12:51:47 +00:00
parent 7f024737cf
commit 31596491f0
18 changed files with 395 additions and 44 deletions
+15 -4
View File
@@ -7,7 +7,7 @@ type profile = {
}
let safe_flags =
{ Pipeline.default_flags with unsafe_repr_eq = false; unsafe_strict_unroll = false }
{ Pipeline.default_flags with unsafe_repr_eq = false; unsafe_strict_unroll = false; unsafe_effect_drop = false }
let profiles =
[
@@ -17,17 +17,28 @@ let profiles =
{ name = "unsafe-inline"; flags = { safe_flags with unsafe_repr_eq = true }; relation = Relation.Boxed_unboxed };
{ name = "unsafe-unbox"; flags = Pipeline.default_flags; relation = Relation.Boxed_unboxed };
{ name = "unsafe-strictness"; flags = { safe_flags with inline = false; unsafe_strict_unroll = true }; relation = Relation.Boxed_unboxed };
{ name = "unsafe-effects"; flags = { safe_flags with unsafe_effect_drop = true }; relation = Relation.Boxed_unboxed };
]
let run_case (case : Corpus.case) =
let audit = Audit.audit_case case in
let failed_invariants =
audit.Audit.invariants
|> List.filter (fun result -> not result.Audit.passed)
|> List.map (fun result -> Audit.invariant_kind_to_string result.Audit.kind)
in
Printf.printf
"case %s\nclassification %s\nverdict %s\nsource %s\ntarget %s\n\n"
"case %s\nclassification %s\nverdict %s\nsource %s\ntarget %s\nfailed invariants %s\n\n"
case.Corpus.name
(Audit.failure_mode_to_string audit.Audit.failure_mode)
(Reporting.verdict_to_string audit.Audit.comparison.Relation.verdict)
(Reporting.string_of_source_outcome audit.Audit.source_trace.Source.outcome)
(Reporting.string_of_target_outcome audit.Audit.target_trace.Target.outcome)
(Reporting.string_of_source_trace audit.Audit.source_trace)
(Reporting.string_of_target_trace audit.Audit.target_trace)
(if failed_invariants = [] then "none" else String.concat ", " failed_invariants);
if audit.Audit.failure_mode <> Audit.Preserved then begin
Printf.printf "%s\n\n" (Reporting.emit_pipeline_visualisation audit.Audit.compiled);
Printf.printf "%s\n\n" (Audit.emit_pass_boundaries audit)
end
let run_profile profile =
let result = Gen.run_campaign profile.flags profile.relation ~count:160 ~max_depth:4 () in