Quorum number for the protocol.
(quorum systate) → quorum
The execution of the protocol (i.e. the transitions in our system)
involves checking conditions that certain numbers reach quorum,
which is defined as
Some BFT literature is not always clear about
the distinction between
Function:
(defun quorum (systate) (declare (xargs :guard (system-statep systate))) (let ((__function__ 'quorum)) (declare (ignorable __function__)) (- (number-validators systate) (max-faulty systate))))
Theorem:
(defthm natp-of-quorum (b* ((quorum (quorum systate))) (natp quorum)) :rule-classes :rewrite)
Theorem:
(defthm posp-of-quorum-when-there-are-validators (implies (not (emptyp (all-addresses systate))) (posp (quorum systate))) :rule-classes (:rewrite :type-prescription))
Theorem:
(defthm quorum-when-3f+1 (implies (equal (number-validators systate) (1+ (* 3 (max-faulty systate)))) (equal (quorum systate) (1+ (* 2 (max-faulty systate))))))
Theorem:
(defthm quorum-of-system-state-fix-systate (equal (quorum (system-state-fix systate)) (quorum systate)))
Theorem:
(defthm quorum-system-state-equiv-congruence-on-systate (implies (system-state-equiv systate systate-equiv) (equal (quorum systate) (quorum systate-equiv))) :rule-classes :congruence)