1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//! PDR phase markers.
//!
//! Zero-sized types encoding the IC3/PDR workflow. Sealed —
//! external crates cannot forge phases or create invalid transitions.
//!
//! # Phase machine
//!
//! ```text
//! Init
//! → build_model() → Modeled
//! Modeled
//! → check() → PdrResult
//! → Safe terminal: inductive invariant found
//! → CounterexampleFound terminal: concrete trace to bad state
//! → Exhausted terminal: frame budget exceeded
//! ```
// ============================================================================
// Sealed trait
// ============================================================================
pub
// ============================================================================
// Phase trait + markers
// ============================================================================
/// Marker trait for PDR phases. Sealed.
/// Initial state — no model loaded yet.
;
/// Model built — transition system loaded, ready for PDR.
;
/// Inductive invariant found — property is safe at all depths.
/// Terminal phase.
;
/// Counterexample trace found — property is violated.
/// Terminal phase.
;
/// Frame budget exhausted without conclusive result.
/// Terminal phase.
;
// ============================================================================
// Sealed + Phase impls
// ============================================================================
impl_phase!;
impl_phase!;
impl_phase!;
impl_phase!;
impl_phase!;