Included Books
other
(in-package "ACL2")
local
(local (include-book "system/apply/apply" :dir :system))
apply$-badgep-propertiestheorem
(defthm apply$-badgep-properties (implies (apply$-badgep x) (and (consp x) (natp (access apply$-badge x :arity)) (natp (access apply$-badge x :out-arity)) (or (eq (access apply$-badge x :ilks) t) (and (true-listp (access apply$-badge x :ilks)) (equal (len (access apply$-badge x :ilks)) (access apply$-badge x :arity)))))) :rule-classes ((:compound-recognizer :corollary (implies (apply$-badgep x) (consp x))) (:linear :corollary (implies (apply$-badgep x) (<= 0 (car (cdr x))))) (:rewrite :corollary (implies (apply$-badgep x) (integerp (car (cdr x))))) (:linear :corollary (implies (apply$-badgep x) (<= 0 (car (cdr (cdr x)))))) (:rewrite :corollary (implies (apply$-badgep x) (integerp (car (cdr (cdr x)))))) (:rewrite :corollary (implies (and (apply$-badgep x) (not (eq (cdr (cdr (cdr x))) t))) (and (true-listp (cdr (cdr (cdr x)))) (equal (len (cdr (cdr (cdr x)))) (car (cdr x))))))))
badge-prim-typetheorem
(defthm badge-prim-type (implies (apply$-primp fn) (and (apply$-badgep (badge-prim fn)) (eq (cdr (cdr (cdr (badge-prim fn)))) t))) :hints (("Goal" :use (:instance check-it!-works (alist *badge-prim-falist*)) :in-theory (disable check-it! hons-get))) :rule-classes ((:rewrite :corollary (implies (apply$-primp fn) (and (apply$-badgep (badge-prim fn)) (eq (cdr (cdr (cdr (badge-prim fn)))) t)))) (:forward-chaining :corollary (implies (apply$-primp fn) (apply$-badgep (badge-prim fn))))))
other
(set-rewrite-stack-limit 4000)
meta-apply$-primfunction
(defun meta-apply$-prim (term) (declare (xargs :guard (pseudo-termp term) :verify-guards nil)) (cond ((and (consp term) (eq (ffn-symb term) 'apply$-prim) (quotep (fargn term 1)) (symbolp (cadr (fargn term 1)))) (let* ((fn (cadr (fargn term 1))) (args (fargn term 2)) (temp (hons-get fn *badge-prim-falist*))) (cond ((null temp) term) (t (if (int= (access apply$-badge (cdr temp) :out-arity) 1) `(,FN ,@(N-CAR-CADR-CADDR-ETC (ACCESS APPLY$-BADGE (CDR TEMP) :ARITY) ARGS)) `(mv-list ',(ACCESS APPLY$-BADGE (CDR TEMP) :OUT-ARITY) (,FN ,@(N-CAR-CADR-CADDR-ETC (ACCESS APPLY$-BADGE (CDR TEMP) :ARITY) ARGS)))))))) (t term)))
other
(verify-guards meta-apply$-prim)
other
(make-event `(encapsulate nil (with-output :off (prove event) (defevaluator apply$-prim-meta-fn-ev apply$-prim-meta-fn-ev-list ((apply$-prim fn args) ,@(STRIP-CARS *FIRST-ORDER-LIKE-TERMS-AND-OUT-ARITIES*)))) (local (defthm n-car-cadr-caddr-etc-opener (implies (natp n) (equal (n-car-cadr-caddr-etc (+ 1 n) args) (cons (list 'car args) (n-car-cadr-caddr-etc n (list 'cdr args))))))) (with-output :off (prove event) (defthm apply$-prim-meta-fn-correct (equal (apply$-prim-meta-fn-ev term alist) (apply$-prim-meta-fn-ev (meta-apply$-prim term) alist)) :hints (("Goal" :in-theory (disable (:executable-counterpart break$)))) :rule-classes ((:meta :trigger-fns (apply$-prim))))) (defthm apply$-primp-implies-symbolp (implies (apply$-primp fn) (symbolp fn)) :rule-classes :forward-chaining)))
badge-typetheorem
(defthm badge-type (or (null (badge fn)) (apply$-badgep (badge fn))) :rule-classes ((:forward-chaining :corollary (implies (badge fn) (apply$-badgep (badge fn))))))
suitably-tamep-listp-inductionfunction
(defun suitably-tamep-listp-induction (n flags args) (cond ((zp n) (list flags args)) (t (suitably-tamep-listp-induction (- n 1) (cdr flags) (cdr args)))))
suitably-tamep-listp-implicant-1theorem
(defthm suitably-tamep-listp-implicant-1 (implies (and (suitably-tamep-listp n flags args) (natp n)) (and (true-listp args) (equal (len args) n))) :hints (("Goal" :induct (suitably-tamep-listp-induction n flags args))) :rule-classes :forward-chaining)
tamep-implicant-1theorem
(defthm tamep-implicant-1 (implies (and (tamep x) (consp x)) (true-listp x)) :hints (("Goal" :expand (tamep x) :use ((:instance badge-type (fn (car x)))))) :rule-classes :forward-chaining)
apply$-lambda-openertheorem
(defthm apply$-lambda-opener (equal (apply$-lambda fn args) (ev$ (lambda-object-body fn) (pairlis$ (lambda-object-formals fn) args))))
in-theory
(in-theory (enable ev$ ev$-list badge (:executable-counterpart badge) apply$ (:executable-counterpart apply$)))
ev$-def-factencapsulate
(encapsulate nil (defthm ev$-def-fact (implies (tamep x) (equal (ev$ x a) (cond ((variablep x) (cdr (assoc x a))) ((fquotep x) (cadr x)) ((eq (car x) 'if) (if (ev$ (cadr x) a) (ev$ (caddr x) a) (ev$ (cadddr x) a))) (t (apply$ (car x) (ev$-list (cdr x) a)))))) :hints (("Goal" :expand ((ev$ x a)))) :rule-classes nil) (local (defthm ev$-def (implies (tamep x) (equal (ev$ x a) (cond ((variablep x) (cdr (assoc x a))) ((fquotep x) (cadr x)) ((eq (car x) 'if) (if (ev$ (cadr x) a) (ev$ (caddr x) a) (ev$ (cadddr x) a))) (t (apply$ (car x) (ev$-list (cdr x) a)))))) :hints (("Goal" :use ev$-def-fact)) :rule-classes (:definition))) (defthm ev$-opener (and (implies (symbolp x) (equal (ev$ x a) (cdr (assoc x a)))) (equal (ev$ (list 'quote obj) a) obj) (implies (suitably-tamep-listp 3 nil args) (equal (ev$ (cons 'if args) a) (if (ev$ (car args) a) (ev$ (cadr args) a) (ev$ (caddr args) a)))) (implies (and (not (eq fn 'quote)) (not (eq fn 'if)) (tamep (cons fn args))) (equal (ev$ (cons fn args) a) (apply$ fn (ev$-list args a))))) :hints (("Subgoal 1" :expand (ev$ (cons fn args) a)))))
ev$-list-deftheorem
(defthm ev$-list-def (equal (ev$-list x a) (cond ((endp x) nil) (t (cons (ev$ (car x) a) (ev$-list (cdr x) a))))) :rule-classes ((:definition)))
in-theory
(in-theory (disable ev$ ev$-list))
beta-reductiontheorem
(defthm beta-reduction (and (equal (apply$ (list 'lambda vars body) args) (ev$ body (pairlis$ vars args))) (equal (apply$ (list 'lambda vars dcl body) args) (ev$ body (pairlis$ vars args)))))
apply$-primp-badgetheorem
(defthm apply$-primp-badge (implies (apply$-primp fn) (equal (badge fn) (badge-prim fn))) :hints (("Goal" :in-theory (enable badge))))
badge-badgetheorem
(defthm badge-badge (equal (badge 'badge) *generic-tame-badge-1*))
badge-tameptheorem
(defthm badge-tamep (equal (badge 'tamep) *generic-tame-badge-1*))
badge-tamep-functionptheorem
(defthm badge-tamep-functionp (equal (badge 'tamep-functionp) *generic-tame-badge-1*))
badge-suitably-tamep-listptheorem
(defthm badge-suitably-tamep-listp (equal (badge 'suitably-tamep-listp) *generic-tame-badge-3*))
badge-apply$theorem
(defthm badge-apply$ (equal (badge 'apply$) *apply$-badge*))
apply$-primitivetheorem
(defthm apply$-primitive (implies (apply$-primp fn) (equal (apply$ fn args) (apply$-prim fn args))))
apply$-tamep-functionptheorem
(defthm apply$-tamep-functionp (equal (apply$ 'tamep-functionp args) (tamep-functionp (car args))))
apply$-suitably-tamep-listptheorem
(defthm apply$-suitably-tamep-listp (equal (apply$ 'suitably-tamep-listp args) (suitably-tamep-listp (car args) (cadr args) (caddr args))))
apply$-apply$theorem
(defthm apply$-apply$ (implies (tamep-functionp (car args)) (equal (apply$ 'apply$ args) (apply$ (car args) (cadr args)))) :hints (("Goal" :in-theory (enable apply$))))
apply$-ev$theorem
(defthm apply$-ev$ (implies (tamep (car args)) (equal (apply$ 'ev$ args) (ev$ (car args) (cadr args)))) :hints (("Goal" :in-theory (enable apply$))))
alternative-takeencapsulate
(encapsulate nil (local (defun take1 (n args) (cond ((zp n) nil) (t (cons (car args) (take1 (- n 1) (cdr args))))))) (local (defthm take1-take-gen (equal (first-n-ac n lst ac) (revappend ac (take1 n lst))))) (defthm alternative-take (equal (take n lst) (if (zp n) nil (cons (car lst) (take (- n 1) (cdr lst))))) :rule-classes :definition) (in-theory (disable take)) (defthm take-opener (implies (syntaxp (quotep n)) (equal (take n lst) (if (zp n) nil (cons (car lst) (take (- n 1) (cdr lst)))))) :rule-classes :rewrite))
pairlis$-takes-arity-argstheorem
(defthm pairlis$-takes-arity-args (equal (pairlis$ x (take (len x) y)) (pairlis$ x y)))
apply$-lambda-takes-arity-argstheorem
(defthm apply$-lambda-takes-arity-args (implies (consp fn) (equal (apply$-lambda fn args) (apply$-lambda fn (take (len (cadr fn)) args)))) :hints (("Goal" :expand ((apply$-lambda fn args) (apply$-lambda fn (take (len (cadr fn)) args))))) :rule-classes nil)
apply$-lambda-arity-1theorem
(defthm apply$-lambda-arity-1 (implies (and (consp fn) (equal (len (cadr fn)) 1)) (equal (apply$-lambda fn (list (car args))) (apply$-lambda fn args))) :hints (("Goal" :use apply$-lambda-takes-arity-args)))
apply$-prim-takes-arity-argstheorem
(defthm apply$-prim-takes-arity-args (implies (apply$-primp fn) (equal (apply$-prim fn args) (apply$-prim fn (take (apply$-badge-arity (badge-prim fn)) args)))) :hints (("Goal" :in-theory '(apply$-prim apply$-primp badge-prim take-opener (:executable-counterpart zp) car-cons cdr-cons hons-get (:executable-counterpart hons-assoc-equal) hide-is-identity))) :rule-classes nil)
apply$-prim-arity-1theorem
(defthm apply$-prim-arity-1 (implies (and (apply$-primp fn) (equal (apply$-badge-arity (badge-prim fn)) 1)) (equal (apply$-prim fn (list (car args))) (apply$-prim fn args))) :hints (("Goal" :use apply$-prim-takes-arity-args)))
apply$-userfn-arity-1theorem
(defthm apply$-userfn-arity-1 (implies (and (badge-userfn fn) (equal (apply$-badge-arity (badge-userfn fn)) 1)) (equal (apply$-userfn fn (list (car args))) (apply$-userfn fn args))) :hints (("Goal" :use apply$-userfn-takes-arity-args)))
apply$-symbol-arity-1theorem
(defthm apply$-symbol-arity-1 (implies (and (symbolp fn) (badge fn) (equal (apply$-badge-arity (badge fn)) 1)) (equal (apply$ fn (list (car args))) (apply$ fn args))) :hints (("Goal" :in-theory (enable apply$ badge))))
equal-len-0theorem
(defthm equal-len-0 (equal (equal (len x) 0) (not (consp x))))
equal-len-1theorem
(defthm equal-len-1 (equal (equal (len x) 1) (and (consp x) (not (consp (cdr x))))))
apply$-consp-arity-1theorem
(defthm apply$-consp-arity-1 (implies (and (consp fn) (equal (len (lambda-object-formals fn)) 1)) (equal (apply$ fn (list (car args))) (apply$ fn args))) :hints (("Goal" :expand ((apply$ fn (list (car args)))))))
consp-lambencapsulate
(encapsulate nil (defthm consp-lamb (and (consp (lamb args body)) (true-listp (lamb args body))) :rule-classes :type-prescription) (defthm consp-cdr-lamb (consp (cdr (lamb args body)))) (defthm consp-cddr-lamb (consp (cddr (lamb args body)))) (defthm cdddr-lamb (equal (cdddr (lamb args body)) nil)) (defthm car-lamb (equal (car (lamb args body)) 'lambda)) (defthm lambda-formals-lamb (equal (lambda-formals (lamb args body)) args)) (defthm lambda-body-lamb (equal (lambda-body (lamb args body)) body)) (defthm lamb-reduction (equal (apply$ (lamb vars body) args) (ev$ body (pairlis$ vars args))) :hints (("Goal" :in-theory (enable apply$)))))
in-theory
(in-theory (disable lamb (:executable-counterpart lamb)))
lamb-v-v-is-identitytheorem
(defthm lamb-v-v-is-identity (implies (symbolp v) (fn-equal (lamb (list v) v) 'identity)) :hints (("goal" :in-theory (enable fn-equal))))
lambda-v-fn-v-is-fntheorem
(defthm lambda-v-fn-v-is-fn (implies (and (symbolp v) (equal (apply$-badge-arity (badge fn)) 1) (not (eq fn 'quote)) (tamep (list fn v))) (fn-equal (lamb (list v) (list fn v)) fn)) :hints (("Goal" :in-theory (e/d (fn-equal badge) (badge-type apply$-badgep-properties)) :use ((:instance badge-type (fn fn))) :expand ((tamep (list fn v)) (ev$ (list fn v) (list (cons v (car (apply$-equivalence-witness (lamb (list v) (list fn v)) fn)))))))))
other
(defun$ compose (f g) (lamb '(v) `(,F (,G v))))
ok-fnp-composetheorem
(defthm ok-fnp-compose (implies (and (ok-fnp f) (ok-fnp g)) (ok-fnp (compose f g))) :hints (("Goal" :in-theory (e/d (lamb) (badge)) :expand ((tamep (cons g '(x))) (tamep (cons g '(v))) (tamep (list f (cons g '(v))))))))
apply$-compositiontheorem
(defthm apply$-composition (implies (and (ok-fnp f) (ok-fnp g)) (equal (apply$ (compose f g) (list a)) (apply$ f (list (apply$ g (list a)))))) :hints (("Goal" :in-theory (e/d (lamb) (badge)) :expand ((ev$ (list f (cons g '(v))) (list (cons 'v a))) (ev$ (cons g '(v)) (list (cons 'v a))) (tamep (cons g '(x))) (tamep (cons f '(x))) (tamep (list f (cons g '(v))))))))
in-theory
(in-theory (disable compose))
in-theory
(in-theory (disable (:definition fn-equal) (:definition ev$-list) (:definition ev$) (:definition apply$) (:definition badge) (:definition apply$-prim) (:definition badge-prim) (:definition apply$-primp) (:executable-counterpart apply$-equivalence) (:executable-counterpart apply$) (:executable-counterpart suitably-tamep-listp) (:executable-counterpart tamep-functionp) (:executable-counterpart tamep) (:executable-counterpart badge)))