• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
        • Proof-support
        • Abstract-syntax
          • Syntax-abstraction
          • Expression
          • Definition
          • Constraint
          • Definition-option
          • Abstract-syntax-operations
            • Expression-var-list
            • Lookup-definition
            • Constrel
              • Constrel-fix
                • Constrel-equiv
                • Make-constrel
                • Change-constrel
                • Constrel->name
                • Constrel->args
                • Constrelp
              • Constraint-constrels
              • Constraint-list-constrels
              • Constraint-rels
              • Constraint-list-rels
              • Expression-sub
              • Expression-const/var-listp
              • Expression-var-listp
              • Expression-neg
              • Expression-list-vars
              • Expression-vars
              • Definition-free-vars
              • Constraint-vars
              • Constraint-list-vars
              • Constrel-set
            • System
            • Convenience-constructors
            • System-result
            • Expression-result
            • Expression-list-result
            • Definition-result
            • Definition-list-result
            • Constraint-result
            • Constraint-list-result
            • Expression-list
            • Definition-list
            • Constraint-list
          • R1cs-subset
          • Semantics
          • Abstract-syntax-operations
            • Expression-var-list
            • Lookup-definition
            • Constrel
              • Constrel-fix
                • Constrel-equiv
                • Make-constrel
                • Change-constrel
                • Constrel->name
                • Constrel->args
                • Constrelp
              • Constraint-constrels
              • Constraint-list-constrels
              • Constraint-rels
              • Constraint-list-rels
              • Expression-sub
              • Expression-const/var-listp
              • Expression-var-listp
              • Expression-neg
              • Expression-list-vars
              • Expression-vars
              • Definition-free-vars
              • Constraint-vars
              • Constraint-list-vars
              • Constrel-set
            • Indexed-names
            • Well-formedness
            • Concrete-syntax
            • R1cs-bridge
            • Parser-interface
          • Legacy-defrstobj
          • Proof-checker-array
          • Soft
          • C
          • Farray
          • Rp-rewriter
          • Instant-runoff-voting
          • Imp-language
          • Sidekick
          • Leftist-trees
          • Java
          • Taspi
          • Bitcoin
          • Riscv
          • Des
          • Ethereum
          • X86isa
          • Sha-2
          • Yul
          • Zcash
          • Proof-checker-itp13
          • Regex
          • ACL2-programming-language
          • Json
          • Jfkr
          • Equational
          • Cryptography
          • Poseidon
          • Where-do-i-place-my-book
          • Axe
          • Bigmems
          • Builtins
          • Execloader
          • Aleo
          • Solidity
          • Paco
          • Concurrent-programs
          • Bls12-377-curves
        • Debugging
        • Std
        • Proof-automation
        • Macro-libraries
        • ACL2
        • Interfacing-tools
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Constrel

      Constrel-fix

      Fixing function for constrel structures.

      Signature
      (constrel-fix x) → new-x
      Arguments
      x — Guard (constrelp x).
      Returns
      new-x — Type (constrelp new-x).

      Definitions and Theorems

      Function: constrel-fix$inline

      (defun constrel-fix$inline (x)
        (declare (xargs :guard (constrelp x)))
        (let ((__function__ 'constrel-fix))
          (declare (ignorable __function__))
          (mbe :logic
               (b* ((name (str-fix (cdr (std::da-nth 0 x))))
                    (args (expression-list-fix (cdr (std::da-nth 1 x)))))
                 (list (cons 'name name)
                       (cons 'args args)))
               :exec x)))

      Theorem: constrelp-of-constrel-fix

      (defthm constrelp-of-constrel-fix
        (b* ((new-x (constrel-fix$inline x)))
          (constrelp new-x))
        :rule-classes :rewrite)

      Theorem: constrel-fix-when-constrelp

      (defthm constrel-fix-when-constrelp
        (implies (constrelp x)
                 (equal (constrel-fix x) x)))

      Function: constrel-equiv$inline

      (defun constrel-equiv$inline (acl2::x acl2::y)
        (declare (xargs :guard (and (constrelp acl2::x)
                                    (constrelp acl2::y))))
        (equal (constrel-fix acl2::x)
               (constrel-fix acl2::y)))

      Theorem: constrel-equiv-is-an-equivalence

      (defthm constrel-equiv-is-an-equivalence
        (and (booleanp (constrel-equiv x y))
             (constrel-equiv x x)
             (implies (constrel-equiv x y)
                      (constrel-equiv y x))
             (implies (and (constrel-equiv x y)
                           (constrel-equiv y z))
                      (constrel-equiv x z)))
        :rule-classes (:equivalence))

      Theorem: constrel-equiv-implies-equal-constrel-fix-1

      (defthm constrel-equiv-implies-equal-constrel-fix-1
        (implies (constrel-equiv acl2::x x-equiv)
                 (equal (constrel-fix acl2::x)
                        (constrel-fix x-equiv)))
        :rule-classes (:congruence))

      Theorem: constrel-fix-under-constrel-equiv

      (defthm constrel-fix-under-constrel-equiv
        (constrel-equiv (constrel-fix acl2::x)
                        acl2::x)
        :rule-classes (:rewrite :rewrite-quoted-constant))

      Theorem: equal-of-constrel-fix-1-forward-to-constrel-equiv

      (defthm equal-of-constrel-fix-1-forward-to-constrel-equiv
        (implies (equal (constrel-fix acl2::x) acl2::y)
                 (constrel-equiv acl2::x acl2::y))
        :rule-classes :forward-chaining)

      Theorem: equal-of-constrel-fix-2-forward-to-constrel-equiv

      (defthm equal-of-constrel-fix-2-forward-to-constrel-equiv
        (implies (equal acl2::x (constrel-fix acl2::y))
                 (constrel-equiv acl2::x acl2::y))
        :rule-classes :forward-chaining)

      Theorem: constrel-equiv-of-constrel-fix-1-forward

      (defthm constrel-equiv-of-constrel-fix-1-forward
        (implies (constrel-equiv (constrel-fix acl2::x)
                                 acl2::y)
                 (constrel-equiv acl2::x acl2::y))
        :rule-classes :forward-chaining)

      Theorem: constrel-equiv-of-constrel-fix-2-forward

      (defthm constrel-equiv-of-constrel-fix-2-forward
        (implies (constrel-equiv acl2::x (constrel-fix acl2::y))
                 (constrel-equiv acl2::x acl2::y))
        :rule-classes :forward-chaining)