New system state resulting from a
(propose-next prop dests systate) → new-systate
The
If the author of the proposal is faulty, the only change is to the network: a message with the proposal is added for each destination. If the author of the proposal is correct, the same happens to the network, and in addition the validator adds the proposal to the map of pending proposals, with associated the empty set, because the proposal has no endorsements yet.
Function:
(defun propose-next (prop dests systate) (declare (xargs :guard (and (proposalp prop) (address-setp dests) (system-statep systate)))) (declare (xargs :guard (propose-possiblep prop dests systate))) (let ((__function__ 'propose-next)) (declare (ignorable __function__)) (b* (((proposal prop) prop) (network (get-network-state systate)) (msgs (make-proposal-messages prop dests)) (new-network (union network msgs)) (systate (update-network-state new-network systate)) ((unless (in prop.author (correct-addresses systate))) systate) ((validator-state vstate) (get-validator-state prop.author systate)) (new-proposed (omap::update (proposal-fix prop) nil vstate.proposed)) (new-vstate (change-validator-state vstate :proposed new-proposed)) (systate (update-validator-state prop.author new-vstate systate))) systate)))
Theorem:
(defthm system-statep-of-propose-next (b* ((new-systate (propose-next prop dests systate))) (system-statep new-systate)) :rule-classes :rewrite)
Theorem:
(defthm correct-addresses-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (correct-addresses new-systate) (correct-addresses systate))))
Theorem:
(defthm validator-state->round-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->round (get-validator-state val new-systate)) (validator-state->round (get-validator-state val systate)))))
Theorem:
(defthm validator-state->dag-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->dag (get-validator-state val new-systate)) (validator-state->dag (get-validator-state val systate)))))
Theorem:
(defthm validator-state->proposed-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->proposed (get-validator-state val new-systate)) (if (and (equal (address-fix val) (proposal->author prop)) (in (address-fix val) (correct-addresses systate))) (omap::update (proposal-fix prop) nil (validator-state->proposed (get-validator-state val systate))) (validator-state->proposed (get-validator-state val systate))))))
Theorem:
(defthm validator-state->endorsed-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->endorsed (get-validator-state val new-systate)) (validator-state->endorsed (get-validator-state val systate)))))
Theorem:
(defthm validator-state->last-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->last (get-validator-state val new-systate)) (validator-state->last (get-validator-state val systate)))))
Theorem:
(defthm validator-state->blockchain-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->blockchain (get-validator-state val new-systate)) (validator-state->blockchain (get-validator-state val systate)))))
Theorem:
(defthm validator-state->committed-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (validator-state->committed (get-validator-state val new-systate)) (validator-state->committed (get-validator-state val systate)))))
Theorem:
(defthm get-network-state-of-propose-next (b* ((?new-systate (propose-next prop dests systate))) (equal (get-network-state new-systate) (union (get-network-state systate) (make-proposal-messages prop dests)))))
Theorem:
(defthm propose-next-of-proposal-fix-prop (equal (propose-next (proposal-fix prop) dests systate) (propose-next prop dests systate)))
Theorem:
(defthm propose-next-proposal-equiv-congruence-on-prop (implies (proposal-equiv prop prop-equiv) (equal (propose-next prop dests systate) (propose-next prop-equiv dests systate))) :rule-classes :congruence)
Theorem:
(defthm propose-next-of-address-set-fix-dests (equal (propose-next prop (address-set-fix dests) systate) (propose-next prop dests systate)))
Theorem:
(defthm propose-next-address-set-equiv-congruence-on-dests (implies (address-set-equiv dests dests-equiv) (equal (propose-next prop dests systate) (propose-next prop dests-equiv systate))) :rule-classes :congruence)
Theorem:
(defthm propose-next-of-system-state-fix-systate (equal (propose-next prop dests (system-state-fix systate)) (propose-next prop dests systate)))
Theorem:
(defthm propose-next-system-state-equiv-congruence-on-systate (implies (system-state-equiv systate systate-equiv) (equal (propose-next prop dests systate) (propose-next prop dests systate-equiv))) :rule-classes :congruence)