Skip to content

Benchmarks

Protection trip cascading through a lockout latch to breaker close

suite id protection_lockout_cascade
domain power_substation
language LD-textual
difficulty medium
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 feeds a second latch, where the safety property must trace back through both hops to the original trigger.

What is proved

From benchmarks/power_substation/protection_lockout_cascade/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 protection_trip -> !breaker_close A protection trip must block breaker closure through both latch stages (trip_latch then lockout_latch); the property is grounded in the original trigger two hops upstream, not in the trip_latch/lockout_latch pair's own mutual wiring.
P2 reachability reachable: protection_trip && breaker_close Witness: protection_trip=1, close_req=1 reaches breaker_close=1 in bomb, because lockout_latch stopped reading trip_latch even though trip_latch itself still latches correctly.

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 14d7023b7c6e
bomb.ld ladder program, textual DSL 0.5 KB b19d2b08e39e
clean.ld ladder program, textual DSL 0.3 KB 40dc8e0693ee
props.yaml property file 0.6 KB bdfa70b6b563

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.

  • protection_lockout_cascade__bomb (props.yaml, expected VIOLATION): v8.4 VIOLATION
  • protection_lockout_cascade__clean (props.yaml, expected SAFE): v8.4 VIOLATION