Generate certain pieces of information from the formal parameters of a function.
(simpadd0-gen-from-params params gin) → (mv okp args parargs arg-types arg-types-compst)
The results of this function are used to generate theorems about function calls.
We generate the following:
These results are generated only if all the parameters have type
Function:
(defun simpadd0-gen-from-params (params gin) (declare (xargs :guard (and (c::param-declon-listp params) (simpadd0-ginp gin)))) (let ((__function__ 'simpadd0-gen-from-params)) (declare (ignorable __function__)) (b* (((when (endp params)) (mv t nil nil nil nil)) ((c::param-declon param) (car params)) ((unless (c::tyspecseq-case param.tyspec :sint)) (mv nil nil nil nil nil)) ((unless (c::obj-declor-case param.declor :ident)) (mv nil nil nil nil nil)) (ident (c::obj-declor-ident->get param.declor)) (par (c::ident->name ident)) (arg (intern-in-package-of-symbol par (simpadd0-gin->const-new gin))) (pararg (cons 'cons (cons (cons 'c::ident (cons par 'nil)) (cons arg 'nil)))) (arg-type (cons 'and (cons (cons 'c::valuep (cons arg 'nil)) (cons (cons 'equal (cons (cons 'c::value-kind (cons arg 'nil)) '(:sint))) 'nil)))) (arg-type-compst (cons 'b* (cons (cons (cons 'var (cons (cons 'mv-nth (cons '1 (cons (cons 'c$::ldm-ident (cons (cons 'ident (cons par 'nil)) 'nil)) 'nil))) 'nil)) '((objdes (c::objdesign-of-var var compst)) (val (c::read-object objdes compst)))) '((and objdes (c::valuep val) (c::value-case val :sint)))))) ((mv okp more-args more-parargs more-arg-types more-arg-types-compst) (simpadd0-gen-from-params (cdr params) gin)) ((unless okp) (mv nil nil nil nil nil))) (mv t (cons arg more-args) (cons pararg more-parargs) (cons arg-type more-arg-types) (cons arg-type-compst more-arg-types-compst)))))
Theorem:
(defthm booleanp-of-simpadd0-gen-from-params.okp (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (booleanp okp)) :rule-classes :rewrite)
Theorem:
(defthm symbol-listp-of-simpadd0-gen-from-params.args (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (symbol-listp args)) :rule-classes :rewrite)
Theorem:
(defthm true-listp-of-simpadd0-gen-from-params.parargs (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (true-listp parargs)) :rule-classes :rewrite)
Theorem:
(defthm true-listp-of-simpadd0-gen-from-params.arg-types (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (true-listp arg-types)) :rule-classes :rewrite)
Theorem:
(defthm true-listp-of-simpadd0-gen-from-params.arg-types-compst (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (true-listp arg-types-compst)) :rule-classes :rewrite)
Theorem:
(defthm len-of-simpadd0-gen-from-params.parargs (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (equal (len parargs) (len args))))
Theorem:
(defthm len-of-simpadd0-gen-from-params.arg-types (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (equal (len arg-types) (len args))))
Theorem:
(defthm len-of-simpadd0-gen-from-params.arg-types-compst (b* (((mv ?okp acl2::?args ?parargs ?arg-types ?arg-types-compst) (simpadd0-gen-from-params params gin))) (equal (len arg-types-compst) (len args))))