• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
          • Isodata
          • Simplify-defun
          • Tailrec
          • Schemalg
          • Restrict
          • Expdata
            • Expdata-implementation
              • Expdata-event-generation
                • Expdata-gen-everything
                • Expdata-gen-thm-instances-to-terms-back
                  • Expdata-gen-new-fn-body-nonpred
                  • Expdata-gen-new-fn
                  • Expdata-gen-new-fn-verify-guards
                  • Expdata-gen-new-fn-verify-guards-hints-nonpred-rec-1res/mres
                  • Expdata-gen-back-of-forth-instances-to-terms-back
                  • Expdata-gen-new-fn-verify-guards-hints-nonpred-nonrec-1res/mres
                  • Expdata-gen-forth-image-instances-to-terms-back
                  • Expdata-gen-forth-guard-instances-to-terms-back
                  • Expdata-gen-new-to-old-thm-hints-rec-1res
                  • Expdata-gen-defsurj
                  • Expdata-gen-new-to-old-thm-hints-rec-mres
                  • Expdata-gen-lemma-instances-var-to-new-forth-rec-call-args-back
                  • Expdata-gen-new-fn-verify-guards-hints-pred-rec
                  • Expdata-gen-lemma-instances-x1...xn-to-forth-rec-call-args-back
                  • Expdata-gen-thm-instances-to-x1...xn
                  • Expdata-gen-newp-of-new-thm-hints
                  • Expdata-gen-all-back-guard-instances-to-mv-nth
                  • Expdata-gen-result-vars
                  • Expdata-gen-lemma-instances-x1...xn-to-rec-call-args-back
                  • Expdata-gen-new-to-old-thm-hints-rec-0res
                  • Expdata-gen-new-fn-verify-guards-hints-nonpred-rec-0res
                  • Expdata-gen-newp-of-new-thm
                  • Expdata-gen-new-to-old-thm
                  • Expdata-gen-lemma-instances-var-to-rec-calls-back
                  • Expdata-gen-new-fn-body-pred
                  • Expdata-gen-old-to-new-thm-hints-1res
                  • Expdata-gen-new-fn-verify-guards-hints-nonpred
                  • Expdata-gen-new-fn-verify-guards-hints
                  • Expdata-gen-all-back-of-forth-instances-to-terms-back
                  • Expdata-gen-old-to-new-thm
                  • Expdata-gen-new-to-old-thm-hints
                  • Expdata-gen-new-fn-verify-guards-hints-pred-nonrec
                  • Expdata-gen-all-forth-image-instances-to-terms-back
                  • Expdata-gen-all-forth-guard-instances-to-terms-back
                  • Expdata-gen-old-to-new-thm-hints-mres
                  • Expdata-gen-appconds
                  • Expdata-xform-rec-calls
                  • Expdata-gen-back-of-forth-instances-to-mv-nth
                  • Expdata-gen-lemma-instance-x1...xn-to-forth-of-x1...xn
                  • Expdata-gen-forth-image-instances-to-mv-nth
                  • Expdata-gen-forth-guard-instances-to-mv-nth
                  • Expdata-gen-back-guard-instances-to-mv-nth
                  • Expdata-gen-all-back-of-forth-instances-to-mv-nth
                  • Expdata-gen-old-to-new-thm-formula
                  • Expdata-gen-newp-guard-instances-to-x1...xn
                  • Expdata-gen-new-to-old-thm-formula
                  • Expdata-gen-new-fn-verify-guards-hints-nonpred-nonrec-0res
                  • Expdata-gen-lemma-instance-x1...xn-to-back-of-x1...xn
                  • Expdata-gen-forth-image-instances-to-x1...xn
                  • Expdata-gen-forth-image-instances-to-terms-back-aux
                  • Expdata-gen-forth-guard-instances-to-x1...xn
                  • Expdata-gen-forth-guard-instances-to-terms-back-aux
                  • Expdata-gen-back-of-forth-instances-to-x1...xn
                  • Expdata-gen-back-of-forth-instances-to-terms-back-aux
                  • Expdata-gen-back-image-instances-to-x1...xn
                  • Expdata-gen-back-guard-instances-to-x1...xn
                  • Expdata-gen-newp-of-new-thm-formula
                  • Expdata-gen-fn-of-terms
                  • Expdata-gen-oldp-of-rec-call-args-under-contexts
                  • Expdata-gen-new-fn-termination-hints
                  • Expdata-gen-old-to-new-thm-hints
                  • Expdata-gen-lemma-instance-x1...xn-to-fn-of-x1...xn
                  • Expdata-gen-old-to-new-thm-hints-0res
                  • Expdata-gen-new-fn-verify-guards-hints-pred
                  • Expdata-gen-new-to-old-thm-hints-nonrec
                  • Expdata-gen-subst-x1...xn-with-back-of-x1...xn
                  • Expdata-gen-oldp-of-terms
                  • Expdata-gen-newp-of-terms
                  • Expdata-gen-new-fn-body
                  • Expdata-gen-forth-of-terms
                  • Expdata-gen-defsurjs
                  • Expdata-gen-back-of-terms
                  • Expdata-gen-new-fn-guard
                  • Expdata-gen-result-vars-aux
                  • Expdata-gen-new-fn-measure
                  • Expdata-formal-of-newp
                  • Expdata-formal-of-forth
                  • Expdata-formal-of-back
                  • Expdata-formal-of-unary
                • Expdata-fn
                • Expdata-input-processing
                • Expdata-macro-definition
            • Casesplit
            • Simplify-term
            • Simplify-defun-sk
            • Parteval
            • Solve
            • Wrap-output
            • Propagate-iso
            • Simplify
            • Finite-difference
            • Drop-irrelevant-params
            • Copy-function
            • Lift-iso
            • Rename-params
            • Utilities
            • Simplify-term-programmatic
            • Simplify-defun-sk-programmatic
            • Simplify-defun-programmatic
            • Simplify-defun+
            • Common-options
            • Common-concepts
          • Error-checking
          • Fty-extensions
          • Isar
          • Kestrel-utilities
          • Set
          • C
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Expdata-event-generation

    Expdata-gen-thm-instances-to-terms-back

    Generate functions to generate certain kinds of lemma instances.

    The first function generated by this macro generates a list of lemma instances of the form ((:instance thm1 (var1 bterm1)) ... (:instance thmn (varn btermn))), where each thmi is one of forthi-image, backi-of-forthi, and forthi-guard, where vari is the formal parameter of forthi, and where btermi is obtained by replacing x1, ..., xn with (back1 x1), ..., (backn xn) in a term termi that is part of a list of terms term1, ..., termn supplied as input to the function. The choice of the thmi theorems is in the input of the macro, from which the choice of the vari variables is derived.

    The second function generated by this macro calls the first function once for each recursively call of old. Each such call of the first function is passed, as the terms argument, the arguments of the corresponding recursive call of old. Each call of the first function generates n lemma instances, thus if there are r recursive calls a total of r * n lemma instances are generated, which are all concatenated together in one list and returned by the second function generated by this macro.

    Macro: expdata-gen-thm-instances-to-terms-back

    (defmacro expdata-gen-thm-instances-to-terms-back (thm)
     (declare
      (xargs
           :guard (member-eq thm
                             '(forth-image back-of-forth forth-guard))))
     (b* ((name1 (packn (list 'expdata-gen-
                              thm '-instances-to-terms-back)))
          (name1-aux (packn (list name1 '-aux)))
          (name2 (packn (list 'expdata-gen-all-
                              thm '-instances-to-terms-back)))
          (name1-string (str::downcase-string (symbol-name name1)))
          (thm-selector (packn (list 'expdata-surjmap-> thm)))
          (thm-string (case thm
                        (forth-image "forthi-image")
                        (back-of-forth "backi-of-forthi")
                        (forth-guard "forthi-guard")
                        (t (impossible)))))
      (cons
       'progn
       (cons
        (cons
         'define
         (cons
          name1
          (cons
           '((terms pseudo-term-listp)
             (old$ symbolp)
             (arg-surjmaps expdata-symbol-surjmap-alistp)
             (wrld plist-worldp))
           (cons
            ':guard
            (cons
             '(= (len terms) (len arg-surjmaps))
             (cons
              ':returns
              (cons
               '(lemma-instances true-list-listp)
               (cons
                ':verify-guards
                (cons
                 'nil
                 (cons
                  ':short
                  (cons
                   (str::cat
                    "Generate @('n') lemma instances
                                  such that the @('i')-th instance
                                  is of theorem @('"
                    thm-string
                    "')
                                  and instantiates
                                  the formal parameter of @('forthi')
                                  with a given term @('termi') in which
                                  @('x1'), ..., @('xn') are replaced with
                                  @('(back1 x1)'), ..., @('(backn xn)').")
                   (cons
                    (cons
                     'b*
                     (cons
                      '((x1...xn (formals old$ wrld))
                        (back-of-x1...xn (expdata-gen-back-of-terms
                                              x1...xn arg-surjmaps)))
                      (cons (cons name1-aux
                                  '(terms arg-surjmaps
                                          x1...xn back-of-x1...xn wrld))
                            'nil)))
                    (cons
                     ':prepwork
                     (cons
                      (cons
                       (cons
                        'define
                        (cons
                         name1-aux
                         (cons
                          '((terms pseudo-term-listp)
                            (arg-surjmaps expdata-symbol-surjmap-alistp)
                            (x1...xn symbol-listp)
                            (back-of-x1...xn pseudo-term-listp)
                            (wrld plist-worldp))
                          (cons
                           ':guard
                           (cons
                            '(= (len terms) (len arg-surjmaps))
                            (cons
                             ':returns
                             (cons
                              '(lemma-instances true-list-listp)
                              (cons
                               ':verify-guards
                               (cons
                                'nil
                                (cons
                                 (cons
                                  'b*
                                  (cons
                                   (cons
                                    '((when (endp terms)) nil)
                                    (cons
                                     '(term (car terms))
                                     (cons
                                      '(surjmap (cdar arg-surjmaps))
                                      (cons
                                       (cons
                                        thm
                                        (cons
                                          (cons thm-selector '(surjmap))
                                          'nil))
                                       (cons
                                        '(var (expdata-formal-of-forth
                                                   surjmap wrld))
                                        (cons
                                         '(term-with-back
                                             (subcor-var
                                                  x1...xn
                                                  back-of-x1...xn term))
                                         (cons
                                          (cons
                                           'instance
                                           (cons
                                            (cons
                                             'list
                                             (cons
                                              ':instance
                                              (cons
                                               thm
                                               '(:extra-bindings-ok
                                                 (list
                                                     var
                                                     term-with-back)))))
                                            'nil))
                                          (cons
                                           (cons
                                            'instances
                                            (cons
                                             (cons
                                                name1-aux
                                                '((cdr terms)
                                                  (cdr arg-surjmaps)
                                                  x1...xn
                                                  back-of-x1...xn wrld))
                                             'nil))
                                           'nil))))))))
                                   '((cons instance instances))))
                                 'nil))))))))))
                       'nil)
                      'nil))))))))))))))
        (cons
         (cons
          'define
          (cons
           name2
           (cons
            '((rec-calls pseudo-tests-and-call-listp)
              (old$ symbolp)
              (arg-surjmaps expdata-symbol-surjmap-alistp)
              (wrld plist-worldp))
            (cons
             ':returns
             (cons
              '(lemma-instances true-list-listp)
              (cons
               ':verify-guards
               (cons
                'nil
                (cons
                 ':short
                 (cons
                  (str::cat
                   "Generate the concatenation of
                                  all the @('n * r') lemma instances generated by
                                  @('"
                   name1-string
                   "')
                                  for all the recursive call arguments of @('old')
                                  passed as the @('terms') input.")
                  (cons
                   (cons
                    'b*
                    (cons
                     (cons
                      '((when (endp rec-calls)) nil)
                      (cons
                       '(tests-and-call (car rec-calls))
                       (cons
                        '(rec-call
                           (access tests-and-call tests-and-call :call))
                        (cons
                         '(updates (fargs rec-call))
                         (cons
                          (cons
                           'instances
                           (cons
                            (cons
                                name1 '(updates old$ arg-surjmaps wrld))
                            'nil))
                          (cons
                            (cons 'more-instances
                                  (cons (cons name2
                                              '((cdr rec-calls)
                                                old$ arg-surjmaps wrld))
                                        'nil))
                            'nil))))))
                     '((append instances more-instances))))
                   'nil))))))))))
         'nil)))))