speckl/out/ToggleSwitch.smt2
Marcus (agent-cos) 6c6daaf90f feat(compiler): Z3 SMT-LIB2 verification backend (speckl#21)
- New generator: compiler/src/generators/z3.ts (1,034 lines)
- Translates SpeckDL state → Z3 sort declarations
- Translates invariants → Z3 define-fun returning Bool
- Translates actions → Z3 transition predicates (enabled + step)
- BMC unrolling with --verify-depth=N (default: 10)
- CLI: --target=z3 or --target=all
- ToggleSwitch and TigerBeetleLedger generate valid SMT-LIB2
- KafkaKRaft spec generates valid SMT-LIB2 structure
- Complex forall/set expressions emit 'true' as placeholders (to be improved)
- All 41 existing tests still pass

This unblocks M1.2 (KRaft verification), M3.2 (Show HN), and M4.3 (OAuth verification).
2026-05-09 22:28:39 -07:00

52 lines
878 B
Text

; SpeckDL: ToggleSwitch — Z3 Verification
; Generated by speckl-compile Z3 backend
; Bounded model checking depth: 10
(set-logic ALL)
(set-option :produce-models true)
; --- State Variables ---
(declare-const isOn Bool)
; --- Invariants ---
(define-fun SwitchConsistent () Bool
(and
(or (= isOn true) (= isOn false))
)
)
; --- Action Transition Predicates ---
(define-fun TurnOnEnabled () Bool
(and
(not isOn)
)
)
(define-fun TurnOnStep () Bool
(and
(= isOn_post true)
)
)
(define-fun TurnOffEnabled () Bool
(and
isOn
)
)
(define-fun TurnOffStep () Bool
(and
(= isOn_post false)
)
)
; Next transition relation: TurnOn | TurnOff
(define-fun Next () Bool
(or
(and (TurnOnEnabled) (TurnOnStep))
(and (TurnOffEnabled) (TurnOffStep))
; Stuttering step
(and
(= isOn_post isOn)
)
)
)
(check-sat)
(get-model)