View Source cure_fsm_monitor (cure v0.7.0)
Cure FSM Runtime Verification
This module implements runtime verification for FSMs by generating monitors from verified properties and injecting runtime assertions.
Features
- Property Monitors: Generate runtime monitors from safety/liveness properties
- Assertion Injection: Inject runtime assertions into FSM transitions
- Violation Detection: Detect and report property violations at runtime
- Counterexample Generation: Provide traces when properties are violated
- Performance Overhead: < 5% overhead for monitored FSMs
Monitor Types
- Safety Monitors: Ensure bad states are never reached
- Liveness Monitors: Ensure progress is always possible
- Deadlock Monitors: Detect deadlock conditions
- Custom Monitors: User-defined property monitors
Usage
% Generate monitor from property
Monitor = cure_fsm_monitor:generate_monitor(FsmDef, {safety, [BadState]}),
% Inject monitor into FSM
MonitoredFsm = cure_fsm_monitor:inject_monitor(FsmDef, Monitor),
% Start monitored FSM
{ok, Pid} = cure_fsm_runtime:start_fsm(MonitoredFsm, InitData),
% Monitor will report violations
receive
{monitor_violation, Pid, Violation} ->
io:format("Property violated: ~p~n", [Violation])
end.