• 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
        • Aleovm
          • Circuits
            • Circuits-pfcs
            • Circuits-r1cs
            • Field-div-flagged
            • Boolean-assert-true
            • Field-inv-flagged
              • Field-inv-flagged-correctness
                • Field-inv-flagged-spec
                • Field-inv-flagged-circuit
                • Field-inv-flagged-lifting
              • Boolean-assert
              • Field-div-unchecked
              • Field-neq
              • Boolean-not
              • Boolean-assert-all
              • Boolean-if
              • Field-if
              • Boolean-xor
              • Boolean-or
              • Boolean-nor
              • Boolean-and
              • Boolean-nand
              • Boolean-neq
              • Boolean-eq
              • Field-div-checked
              • Field-inv-checked
              • Boolean-assert-neq
              • Boolean-assert-eq
              • Field-eq
              • Field-assert-neq
              • Field-assert-eq
              • Field-mul
              • Field-sub
              • Field-square
              • Field-neg
              • Field-double
              • Field-add
            • Language
          • 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
    • Field-inv-flagged

    Field-inv-flagged-correctness

    Correctness of the circuit.

    Soundness is proved automatically via the prime field library rules.

    Completeness is proved via the suff theorem for the existentially quantified predicate. As witness for the internal variable w, we use the inverse of x if x \neq 0, otherwise we use 0 (but other values would work for this case).

    The extension to the circuit is boilerplate.

    Definitions and Theorems

    Theorem: field-inv-flagged-pred-soundness

    (defthm field-inv-flagged-pred-soundness
      (implies (and (primep prime)
                    (pfield::fep x prime)
                    (pfield::fep y prime)
                    (pfield::fep e prime))
               (implies (field-inv-flagged-pred x y e prime)
                        (field-inv-flagged-spec x y e prime))))

    Theorem: field-inv-flagged-pred-completeness

    (defthm field-inv-flagged-pred-completeness
      (implies (and (primep prime)
                    (pfield::fep x prime)
                    (pfield::fep y prime)
                    (pfield::fep e prime))
               (implies (field-inv-flagged-spec x y e prime)
                        (field-inv-flagged-pred x y e prime))))

    Theorem: field-inv-flagged-pred-to-spec

    (defthm field-inv-flagged-pred-to-spec
      (implies (and (primep prime)
                    (pfield::fep x prime)
                    (pfield::fep y prime)
                    (pfield::fep e prime))
               (equal (field-inv-flagged-pred x y e prime)
                      (field-inv-flagged-spec x y e prime))))

    Theorem: field-inv-flagged-circuit-to-spec

    (defthm field-inv-flagged-circuit-to-spec
     (implies
       (and (equal (pfcs::lookup-definition (pfname "field_inv_flagged")
                                            defs)
                   (field-inv-flagged-circuit))
            (primep prime)
            (pfield::fep x prime)
            (pfield::fep y prime)
            (pfield::fep e prime))
       (equal (pfcs::definition-satp (pfname "field_inv_flagged")
                                     defs (list x y e)
                                     prime)
              (field-inv-flagged-spec x y e prime))))