Definition of the invariant: the DAGs of each pair of correct validators are mutually unequivocal.
We prove that this invariant,
which is defined as non-equivocation for two validators,
implies non-equivocation for a single validator.
This is similar to the
Theorem:
(defthm unequivocal-dags-p-necc (implies (unequivocal-dags-p systate) (implies (and (in val1 (correct-addresses systate)) (in val2 (correct-addresses systate))) (certificate-sets-unequivocalp (validator-state->dag (get-validator-state val1 systate)) (validator-state->dag (get-validator-state val2 systate))))))
Theorem:
(defthm booleanp-of-unequivocal-dags-p (b* ((yes/no (unequivocal-dags-p systate))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm unequivocal-dags-p-of-system-state-fix-systate (equal (unequivocal-dags-p (system-state-fix systate)) (unequivocal-dags-p systate)))
Theorem:
(defthm unequivocal-dags-p-system-state-equiv-congruence-on-systate (implies (system-state-equiv systate systate-equiv) (equal (unequivocal-dags-p systate) (unequivocal-dags-p systate-equiv))) :rule-classes :congruence)
Theorem:
(defthm unequivocal-dags-p-necc-single (implies (and (unequivocal-dags-p systate) (in val (correct-addresses systate))) (certificate-set-unequivocalp (validator-state->dag (get-validator-state val systate)))))