Generate lemma instances where
a variable is instantiated with
each recursive call of
(expdata-gen-lemma-instances-var-to-rec-calls-back lemma var old$ rec-calls arg-surjmaps wrld) → lemma-instances
Function:
(defun expdata-gen-lemma-instances-var-to-rec-calls-back (lemma var old$ rec-calls arg-surjmaps wrld) (declare (xargs :guard (and (symbolp lemma) (symbolp var) (symbolp old$) (pseudo-tests-and-call-listp rec-calls) (expdata-symbol-surjmap-alistp arg-surjmaps) (plist-worldp wrld)))) (let ((__function__ 'expdata-gen-lemma-instances-var-to-rec-calls-back)) (declare (ignorable __function__)) (b* (((when (endp rec-calls)) nil) (tests-and-call (car rec-calls)) (rec-call (access tests-and-call tests-and-call :call)) (x1...xn (formals old$ wrld)) (back-of-x1...xn (expdata-gen-back-of-terms x1...xn arg-surjmaps)) (rec-call-back (subcor-var x1...xn back-of-x1...xn rec-call)) (instance (cons ':instance (cons lemma (cons ':extra-bindings-ok (cons (cons var (cons rec-call-back 'nil)) 'nil))))) (instances (expdata-gen-lemma-instances-var-to-rec-calls-back lemma var old$ (cdr rec-calls) arg-surjmaps wrld))) (cons instance instances))))
Theorem:
(defthm true-list-listp-of-expdata-gen-lemma-instances-var-to-rec-calls-back (b* ((lemma-instances (expdata-gen-lemma-instances-var-to-rec-calls-back lemma var old$ rec-calls arg-surjmaps wrld))) (true-list-listp lemma-instances)) :rule-classes :rewrite)