feat(z3): zero-error SMT-LIB2 output + BMC verify blocks for KRaft
Some checks failed
Deploy Landing Page to Storj / deploy (push) Failing after 3s
Some checks failed
Deploy Landing Page to Storj / deploy (push) Failing after 3s
- Declare speckl_len_Int helper for list/sequence lengths - Fix infix = inside => bodies (final pass regex) - Handle prime notation: currentTerm' → currentTerm_post - Handle length() calls: length(log) → (speckl_len_Int log) - Handle min(): (ite (<= a b) a b) instead of unsupported 'min' - Handle subtraction: i-1 → (- i 1) - Declare _post state vars when invariants compare pre/post - Added 3 BMC verify blocks to KRaft spec (TermMonotonicity, CommitSafety, LeaderCompleteness) - Z3 returns clean sat with zero errors for all specs - All 37 tests pass
This commit is contained in:
parent
7e5a8fe2cb
commit
40eef36a10
7 changed files with 75 additions and 16 deletions
|
|
@ -1,9 +1,10 @@
|
|||
; SpeckDL: KafkaKRaft — Z3 Verification
|
||||
; Generated by speckl-compile Z3 backend
|
||||
; Bounded model checking depth: 10
|
||||
; Bounded model checking depth: 5
|
||||
|
||||
(set-logic ALL)
|
||||
(set-option :produce-models true)
|
||||
(declare-fun speckl_len_Int ( (Array Int Int) ) Int)
|
||||
(declare-sort State 0)
|
||||
(declare-sort Option_NodeId 0)
|
||||
(declare-sort LogEntry 0)
|
||||
|
|
@ -18,36 +19,44 @@
|
|||
(declare-const nextIndex (Array NodeId Int))
|
||||
(declare-const matchIndex (Array NodeId Int))
|
||||
(declare-const votesGranted (Array NodeId Bool))
|
||||
(declare-const currentTerm_post Int)
|
||||
(declare-const state_post State)
|
||||
(declare-const votedFor_post Option_NodeId)
|
||||
(declare-const log_post (Array Int LogEntry))
|
||||
(declare-const commitIndex_post Int)
|
||||
(declare-const nextIndex_post (Array NodeId Int))
|
||||
(declare-const matchIndex_post (Array NodeId Int))
|
||||
(declare-const votesGranted_post (Array NodeId Bool))
|
||||
|
||||
; --- Invariants ---
|
||||
(define-fun ElectionSafety () Bool
|
||||
(and
|
||||
(=> state = Leader (> currentTerm 0))
|
||||
(=> (= Leader $3) (> currentTerm 0))
|
||||
)
|
||||
)
|
||||
(define-fun LeaderCompleteness () Bool
|
||||
(and
|
||||
commitIndex <= length(log)
|
||||
commitIndex <= (speckl_len_Int log)
|
||||
)
|
||||
)
|
||||
(define-fun LogMatching () Bool
|
||||
(and
|
||||
(forall ((i Int)) (=> (and (> i 0) (and i <= length(log) (select log i-1).term = (select log i-1).term)) (select log i-1).value = (select log i-1).value))
|
||||
(forall ((i Int)) (=> (and (> i 0) (and i <= (speckl_len_Int log) (select log (- i 1)).term = (select log (- i 1)).term)) (select log (- i 1)).value = (select log (- i 1)).value))
|
||||
)
|
||||
)
|
||||
(define-fun LeaderAppendOnly () Bool
|
||||
(and
|
||||
length(log') >= length(log)
|
||||
(speckl_len_Int log_post) >= (speckl_len_Int log)
|
||||
)
|
||||
)
|
||||
(define-fun TermMonotonicity () Bool
|
||||
(and
|
||||
currentTerm' >= currentTerm
|
||||
currentTerm_post >= currentTerm
|
||||
)
|
||||
)
|
||||
(define-fun CommitSafety () Bool
|
||||
(and
|
||||
commitIndex <= length(log)
|
||||
commitIndex <= (speckl_len_Int log)
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue