• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
        • Proof-support
        • Semantics
        • Lifting
          • Lift-thm
          • Lift-thm-constr-satp-specialized-lemma
          • Lift-var-name-list
          • Lift-thm-constr-to-def-satp-specialized-lemmas
          • Lift-thm-definition-satp-specialized-lemma
            • Lift-info
            • Lift-var-name
            • Lift-thm-def-hyps
            • Lift-definition
            • Lift-expression
            • Lift-thm-asgfree-pairs
            • Lift
            • Lift-thm-free-inst
            • Lift-fn
            • Lift-thm-type-prescriptions-for-called-preds
            • Lift-rel-name
            • Lift-constraint
            • Lift-thm-omap-keys-lemma-instances
            • Lift-table-add
            • Lift-rules
            • Lift-thm-called-lift-thms
            • Lift-rel-name-set-to-list
            • Lift-gen-fep-terms
            • Lift-expression-list
            • Lift-constraint-list
            • Lift-var-name-set-to-list
            • Lift-thm-asgfree-pairs-aux
            • Current-package+
            • Lift-table
          • R1cs-subset
          • Well-formedness
          • Abstract-syntax
          • Concrete-syntax
          • R1cs-bridge
          • Parser-interface
        • 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
        • 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
    • Lifting

    Lift-thm-definition-satp-specialized-lemma

    Generate a local lemma to apply the definition of definition-satp to a specific definition.

    Signature
    (lift-thm-definition-satp-specialized-lemma def pred prime) 
      → 
    (mv thm-event thm-name)
    Arguments
    def — Guard (definitionp def).
    pred — Guard (symbolp pred).
    prime — Guard (symbolp prime).
    Returns
    thm-event — Type (pseudo-event-formp thm-event).
    thm-name — Type (symbolp thm-name).

    To prove the lifting theorem, we need to open definition-satp when applied to the name of the definition def that we are lifting. If def calls other definitions, in the course of the proof there will be other instances of definition-satp applied to the names of the called definitions. For these, definition-satp must not be opened, because we need to use the lifting theorems for those definitions. Thus, just enabling definition-satp is too coarse. In order to limit the application of this ACL2 definition, we generate a local lemma which is essentially the definition of definition-satp specialized to the name of the definition to be the one of def.

    Definitions and Theorems

    Function: lift-thm-definition-satp-specialized-lemma

    (defun lift-thm-definition-satp-specialized-lemma (def pred prime)
     (declare (xargs :guard (and (definitionp def)
                                 (symbolp pred)
                                 (symbolp prime))))
     (let ((__function__ 'lift-thm-definition-satp-specialized-lemma))
      (declare (ignorable __function__))
      (b*
       ((def-name (definition->name def))
        (thm-name (acl2::packn-pos (list 'definition-satp-of- pred)
                                   pred))
        (thm-event
         (cons
          'defruledl
          (cons
           thm-name
           (cons
            (cons
             'equal
             (cons
              (cons 'definition-satp
                    (cons (cons 'quote (cons def-name 'nil))
                          (cons 'defs
                                (cons 'vals (cons prime 'nil)))))
              (cons
               (cons
                'b*
                (cons
                 (cons
                  (cons
                    'def
                    (cons (cons 'lookup-definition
                                (cons (cons 'quote (cons def-name 'nil))
                                      '(defs)))
                          'nil))
                  (cons
                   '((unless def) nil)
                   (cons
                    '(para (definition->para def))
                    (cons
                     '((unless (equal (len vals) (len para)))
                       nil)
                     (cons
                      '(asg (omap::from-lists para vals))
                      (cons
                       (cons
                        'constr
                        (cons
                         (cons
                          'make-constraint-relation
                          (cons
                            ':name
                            (cons (cons 'quote (cons def-name 'nil))
                                  '(:args (expression-var-list para)))))
                         'nil))
                       'nil))))))
                 (cons
                      (cons 'constraint-satp
                            (cons 'constr
                                  (cons 'defs
                                        (cons 'asg (cons prime 'nil)))))
                      'nil)))
               'nil)))
            '(:in-theory '(definition-satp)))))))
       (mv thm-event thm-name))))

    Theorem: pseudo-event-formp-of-lift-thm-definition-satp-specialized-lemma.thm-event

    (defthm
     pseudo-event-formp-of-lift-thm-definition-satp-specialized-lemma.thm-event
     (b* (((mv ?thm-event ?thm-name)
           (lift-thm-definition-satp-specialized-lemma def pred prime)))
       (pseudo-event-formp thm-event))
     :rule-classes :rewrite)

    Theorem: symbolp-of-lift-thm-definition-satp-specialized-lemma.thm-name

    (defthm
         symbolp-of-lift-thm-definition-satp-specialized-lemma.thm-name
     (b* (((mv ?thm-event ?thm-name)
           (lift-thm-definition-satp-specialized-lemma def pred prime)))
       (symbolp thm-name))
     :rule-classes :rewrite)