• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • C
      • Proof-checker-array
      • Soft
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Ethereum
      • Leftist-trees
      • Java
      • Riscv
      • Taspi
      • Bitcoin
      • Zcash
      • Des
      • X86isa
      • Sha-2
      • Yul
      • Proof-checker-itp13
      • Regex
      • ACL2-programming-language
      • Json
      • Jfkr
      • Equational
      • Cryptography
      • Axe
      • Poseidon
      • Where-do-i-place-my-book
      • Aleo
        • Aleobft
          • Correctness
            • Unequivocal-dags-def-and-init
            • Same-committees-def-and-implied
            • Dag-omni-paths
            • Signer-records
            • Unequivocal-dags-next
            • Quorum-intersection
            • Dag-previous-quorum-def-and-init-and-next
            • Unequivocal-signed-certificates
              • Not-signer-record-p-when-create-possiblep
                • Unequivocal-signed-certs-p-of-next
                • Signer-record-p-when-author+round-in-signed-certs
                • Unequivocal-signed-certs-p
                • Unequivocal-signed-certs-p-when-init
                • Unequivocal-signed-certs-p-of-events-next
                • Unequivocal-signed-certs-p-when-reachable
              • Signed-previous-quorum
              • Nonforking-anchors-def-and-init-and-next
              • Successor-predecessor-intersection
              • Fault-tolerance
              • Last-anchor-voters-def-and-init-and-next
              • Signer-quorum
              • Committed-redundant-def-and-init-and-next
              • Nonforking-blockchains-def-and-init
              • Blockchain-redundant-def-and-init-and-next
              • No-self-endorsed
              • Last-anchor-present
              • Anchors-extension
              • Nonforking-blockchains-next
              • Backward-closure
              • Last-blockchain-round
              • Dag-certificate-next
              • Omni-paths-def-and-implied
              • Ordered-blockchain
              • Simultaneous-induction
              • System-certificates
              • Last-anchor-def-and-init
              • Last-anchor-next
              • Dag-previous-quorum
              • Signed-certificates
              • Committed-anchor-sequences
              • Omni-paths
              • Last-anchor-voters
              • Unequivocal-dags
              • Nonforking-blockchains
              • Nonforking-anchors
              • Committed-redundant
              • Same-committees
              • Blockchain-redundant
            • Definition
            • Library-extensions
          • Aleovm
          • Leo
        • Bigmems
        • Builtins
        • Execloader
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Community
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Unequivocal-signed-certificates

    Not-signer-record-p-when-create-possiblep

    If create-possiblep holds, then signer-record-p is false for its correct signers.

    This is a key fact needed to prove our invariant. It says that, in order for a new certificate to be created, its correct signers must have no record of its author and round. This is then used to show that equivocation is not possible for the set of certificates signed by a validator.

    This fact follows from the definition of create-possiblep, as well as from another previously proved system invariant.

    Consider the author first. For the author, create-possiblep requires that no certificates in the DAG have the author and round of the new certificates. It says nothing endorsed pairs, but an invariant come to the rescue here: no-self-endorsed tells us that the certificate's author's endorsed pairs include no pair whose first component is this validator, and so in particular the pair consisting of this validator plus the certificate's round. All together, these facts tell us that signer-record-p does not hold.

    Consider an endorser next. Here create-possiblep directly requires the negation of all the disjunctions of signer-record-p, which therefore is false.

    We prove theorems for the predicates that make up create-possiblep, culminating with the one for create-possiblep. In the theorem about create-author-possiblep, we add hypotheses corresponding to part of the body of no-self-endorsed-p, which, in the theorem about create-possiblep, get discharged via the -necc rule of the invariant.

    Definitions and Theorems

    Theorem: not-signer-record-p-when-create-author-possiblep

    (defthm not-signer-record-p-when-create-author-possiblep
      (implies (and (create-author-possiblep cert vstate)
                    (equal (address+pos-pairs-with-address
                                (certificate->author cert)
                                (validator-state->endorsed vstate))
                           nil))
               (not (signer-record-p (certificate->author cert)
                                     (certificate->round cert)
                                     vstate))))

    Theorem: not-signer-record-p-when-create-endorser-possiblep

    (defthm not-signer-record-p-when-create-endorser-possiblep
      (implies (create-endorser-possiblep cert vstate)
               (not (signer-record-p (certificate->author cert)
                                     (certificate->round cert)
                                     vstate))))

    Theorem: not-signer-record-p-when-create-endorsers-possiblep-loop

    (defthm not-signer-record-p-when-create-endorsers-possiblep-loop
     (implies
        (and (create-endorsers-possiblep-loop cert endorsers systate)
             (in endorser endorsers)
             (in endorser (correct-addresses systate)))
        (not (signer-record-p (certificate->author cert)
                              (certificate->round cert)
                              (get-validator-state endorser systate)))))

    Theorem: not-signer-record-p-when-create-endorsers-possiblep

    (defthm not-signer-record-p-when-create-endorsers-possiblep
     (implies
        (and (create-endorsers-possiblep cert systate)
             (in endorser (certificate->endorsers cert))
             (in endorser (correct-addresses systate)))
        (not (signer-record-p (certificate->author cert)
                              (certificate->round cert)
                              (get-validator-state endorser systate)))))

    Theorem: not-signer-record-p-when-create-possiblep

    (defthm not-signer-record-p-when-create-possiblep
     (implies
          (and (create-possiblep cert systate)
               (in signer (certificate->signers cert))
               (in signer (correct-addresses systate))
               (no-self-endorsed-p systate))
          (not (signer-record-p (certificate->author cert)
                                (certificate->round cert)
                                (get-validator-state signer systate)))))