Check if all the certificates that are at least two rounds after a given certificate have a path to that certificate.
This is the predicate expressing the key property that we prove here,
where
The certificate
We prove that if the DAG has at least one certificate at least two rounds after the given one, then the given certificate must be in the DAG, because there is at least one path to it.
Theorem:
(defthm dag-omni-paths-p-necc (implies (dag-omni-paths-p cert dag) (implies (and (in cert1 dag) (>= (certificate->round cert1) (+ 2 (certificate->round cert)))) (equal (path-to-author+round cert1 (certificate->author cert) (certificate->round cert) dag) cert))))
Theorem:
(defthm booleanp-of-dag-omni-paths-p (b* ((yes/no (dag-omni-paths-p cert dag))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm in-dag-when-dag-omni-paths-p (implies (and (certificate-setp dag) (dag-omni-paths-p cert dag) (in cert1 dag) (>= (certificate->round cert1) (+ 2 (certificate->round cert))) cert) (in cert dag)))