Skip to content

Benchmarks

Chemical dosing overdose lockout with lamp and pump-inhibit readouts

suite id chemical_feed_fault_lockout
domain water_treatment
language LD-textual
difficulty easy
validation status validated
origin authored
license CC-BY-4.0

Authored for the esbmc-plc-benchmark-suite to close a training gap found by ml/scripts/build_task_slice.py: a latch that fans out to two independent readouts, where the safety property is about the trigger, not the readouts' mutual relationship.

What is proved

From benchmarks/water_treatment/chemical_feed_fault_lockout/props.yaml. What each kind claims, and what it becomes on either route, is on The properties we prove.

id kind claim requirement
P1 invariant overdose_sensor -> !dose_pump_run An overdose condition must stop the dosing pump in the same scan it is sensed; the property is grounded in the sensor trigger, not in dose_pump_run's relationship to the unrelated fault_lamp readout.
P2 reachability reachable: overdose_sensor && dose_pump_run Witness: overdose_sensor=1, dose_req=1 reaches dose_pump_run=1 in bomb, because dose_fault no longer latches on the overdose sensor at all.

Variants

file expected verdict violates method
clean.ld SAFE none expert
bomb.ld VIOLATION P1 fault-injection

Files

file what it is size sha256
benchmark.yml benchmark metadata 1.2 KB 21a5ff248127
bomb.ld ladder program, textual DSL 0.4 KB a457104f64e0
clean.ld ladder program, textual DSL 0.2 KB 2dde4ae8384a
props.yaml property file 0.6 KB 25d90822746a

Recorded runs

A task can carry two routes. ld is ESBMC's ladder front end reading the program directly. via C is the same solver reached through Beremiz and MatIEC, which is the only route that reaches ST, IL, FBD and SFC; see How ESBMC-PLC works.

  • chemical_feed_fault_lockout__bomb (props.yaml, expected VIOLATION): v8.4 error — ingestion gate failed on v8.4
  • chemical_feed_fault_lockout__clean (props.yaml, expected SAFE): v8.4 VIOLATION