type failure_mode = | Preserved | Representation_exposure | Strictness_shift | Effect_shift | Type_error of string | Other_failure of string type invariant_kind = | Relation_preservation | Target_arity | Termination_class | Effect_trace type invariant_result = { kind : invariant_kind; passed : bool; detail : string; } type pass_boundary = { pass : string; source_outcome : Source.outcome option; target_outcome : Target.outcome option; effects : int; verdict : string; } type obligation_status = | Discharged | Assumed | Refuted type obligation_result = { obligation : Pipeline.obligation; status : obligation_status; note : string; } type case_audit = { case : Corpus.case; compiled : Pipeline.compiled; comparison : Relation.comparison; source_trace : Source.trace; specialised_trace : Source.trace; inlined_trace : Source.trace; target_trace : Target.trace; typecheck : (unit, string) result; failure_mode : failure_mode; obligations : obligation_result list; invariants : invariant_result list; pass_boundaries : pass_boundary list; } val audit_case : Corpus.case -> case_audit val failure_mode_to_string : failure_mode -> string val obligation_status_to_string : obligation_status -> string val invariant_kind_to_string : invariant_kind -> string val emit_pass_boundaries : case_audit -> string val emit_invariants : case_audit -> string val emit_case_audit : case_audit -> string val emit_matrix : case_audit list -> string