other
(in-package "GL")
other
(include-book "gtypes")
concrete-gobjectp-indfunction
(defun concrete-gobjectp-ind (x) (if (atom x) x (and (not (g-concrete-p x)) (not (g-boolean-p x)) (not (g-integer-p x)) (not (g-ite-p x)) (not (g-apply-p x)) (not (g-var-p x)) (list (concrete-gobjectp-ind (car x)) (concrete-gobjectp-ind (cdr x))))))
other
(defthm gobject-hierarchy-lite-possibilities (or (equal (gobject-hierarchy-lite x) nil) (equal (gobject-hierarchy-lite x) 'concrete) (equal (gobject-hierarchy-lite x) 'general)) :hints (("Goal" :in-theory (enable gobject-hierarchy-lite))) :rule-classes ((:forward-chaining :trigger-terms ((gobject-hierarchy-lite x)))))
other
(defthm concrete-gobjectp-def (equal (concrete-gobjectp x) (if (atom x) t (and (not (g-concrete-p x)) (not (g-boolean-p x)) (not (g-integer-p x)) (not (g-ite-p x)) (not (g-apply-p x)) (not (g-var-p x)) (concrete-gobjectp (car x)) (concrete-gobjectp (cdr x))))) :hints (("goal" :induct (concrete-gobjectp-ind x) :expand ((gobject-hierarchy-lite x)) :in-theory (enable concrete-gobjectp))) :rule-classes :definition)
other
(defthmd eval-concrete-gobjectp (implies (concrete-gobjectp x) (equal (generic-geval x env) x)) :hints (("goal" :induct (concrete-gobjectp-ind x) :expand ((generic-geval x env)) :in-theory (e/d** (generic-geval concrete-gobjectp-ind concrete-gobjectp-def cons-car-cdr)))))
other
(defthmd gobj-depends-on-when-concrete-gobjectp (implies (concrete-gobjectp x) (not (gobj-depends-on k p x))) :hints (("goal" :induct (concrete-gobjectp-ind x) :expand ((gobj-depends-on k p x)))))
other
(in-theory (disable concrete-gobjectp-def))
other
(defthm mk-g-concrete-correct (equal (generic-geval (mk-g-concrete x) b) x) :hints (("Goal" :in-theory (enable eval-concrete-gobjectp mk-g-concrete))))
other
(defthm g-concrete-quote-correct (equal (generic-geval (g-concrete-quote x) b) x) :hints (("Goal" :in-theory (enable eval-concrete-gobjectp concrete-gobjectp-def g-concrete-quote))))
other
(defthm gobj-depends-on-of-mk-g-concrete (not (gobj-depends-on k p (mk-g-concrete x))) :hints (("Goal" :in-theory (enable gobj-depends-on mk-g-concrete gobj-depends-on-when-concrete-gobjectp))))
other
(defthm gobj-depends-on-of-g-concrete-quote (not (gobj-depends-on k p (g-concrete-quote x))) :hints (("Goal" :in-theory (enable gobj-depends-on g-concrete-quote))))
other
(defthm mk-g-ite-correct (equal (generic-geval (mk-g-ite c x y) b) (if (generic-geval c b) (generic-geval x b) (generic-geval y b))) :hints (("Goal" :in-theory (enable mk-g-ite) :do-not-induct t) (and stable-under-simplificationp '(:expand ((generic-geval c b))))) :otf-flg t)
other
(defthm gobj-depends-on-of-mk-g-ite-rw (implies (and (not (gobj-depends-on k p c)) (not (gobj-depends-on k p x)) (not (gobj-depends-on k p y))) (not (gobj-depends-on k p (mk-g-ite c x y)))) :hints (("Goal" :in-theory (enable mk-g-ite))))
other
(defthm mk-g-boolean-correct (equal (generic-geval (mk-g-boolean x) env) (bfr-eval x (car env))) :hints (("Goal" :in-theory (enable mk-g-boolean))))
other
(defthm gobj-depends-on-of-mk-g-boolean (equal (gobj-depends-on k p (mk-g-boolean x)) (pbfr-depends-on k p x)) :hints (("Goal" :in-theory (enable mk-g-boolean booleanp))))
other
(defthm bfr-eval-booleanp (implies (booleanp x) (equal (bfr-eval x env) x)) :hints (("goal" :in-theory (enable bfr-eval))) :rule-classes ((:rewrite :backchain-limit-lst 0)))
other
(local (defthm bfr-list->s-when-boolean-list (implies (and (syntaxp (not (equal env ''nil))) (boolean-listp bits)) (equal (bfr-list->s bits env) (bfr-list->s bits nil))) :hints (("Goal" :in-theory (enable bfr-list->s boolean-listp scdr)))))
other
(defthm mk-g-integer-correct (equal (generic-geval (mk-g-integer bits) env) (bfr-list->s bits (car env))) :hints (("Goal" :in-theory (enable mk-g-integer))))
other
(local (defthm pbfr-list-depends-on-of-boolean-list (implies (boolean-listp x) (not (pbfr-list-depends-on k p x))) :hints (("Goal" :in-theory (enable pbfr-list-depends-on)))))
other
(defthm gobj-depends-on-of-mk-g-integer (equal (gobj-depends-on k p (mk-g-integer x)) (pbfr-list-depends-on k p x)) :hints (("Goal" :in-theory (enable mk-g-integer))))
other
(defthm generic-geval-cons (implies (not (g-keyword-symbolp x)) (equal (generic-geval (cons x y) env) (cons (generic-geval x env) (generic-geval y env)))) :hints (("goal" :expand ((generic-geval (cons x y) env)) :in-theory (e/d (tag)))))
other
(defthm generic-geval-non-cons (implies (not (consp x)) (equal (generic-geval x env) x)) :hints (("goal" :expand ((:with generic-geval (generic-geval x env))) :do-not-induct t)) :rule-classes ((:rewrite :backchain-limit-lst 0)))
other
(defthm g-keyword-symbolp-compound-recognizer (implies (g-keyword-symbolp x) (and (symbolp x) (not (booleanp x)))) :rule-classes :compound-recognizer)
other
(defthm generic-geval-gl-cons (equal (generic-geval (gl-cons x y) env) (cons (generic-geval x env) (generic-geval y env))))
other
(defthm gobj-depends-on-of-gl-cons (equal (gobj-depends-on k p (gl-cons x y)) (or (gobj-depends-on k p x) (gobj-depends-on k p y))) :hints (("Goal" :in-theory (enable gl-cons) :expand ((gobj-depends-on k p (cons x y))))))
other
(defthm generic-geval-list-gl-cons (equal (generic-geval-list (gl-cons x y) env) (cons (generic-geval x env) (generic-geval-list y env))) :hints (("Goal" :expand ((:free (x) (generic-geval-list (cons x y) env))))))
other
(defthm gobj-list-depends-on-of-gl-cons (equal (gobj-list-depends-on k p (gl-cons x y)) (or (gobj-depends-on k p x) (gobj-list-depends-on k p y))) :hints (("Goal" :in-theory (enable gl-cons))))
other
(defthm generic-geval-list-atom (implies (not (consp x)) (equal (generic-geval-list x env) nil)) :hints (("Goal" :expand ((generic-geval-list x env)))) :rule-classes ((:rewrite :backchain-limit-lst 0)))
other
(in-theory (disable gl-cons))
other
(defthmd generic-geval-of-gobj-list (implies (and (gobj-listp x) (consp x)) (equal (generic-geval x env) (cons (generic-geval (car x) env) (generic-geval (cdr x) env)))) :hints (("Goal" :use ((:instance generic-geval-gl-cons (x (car x)) (y (cdr x)))) :in-theory (enable gl-cons gobj-listp))))
other
(defthm generic-geval-g-apply (implies (not (equal fn 'quote)) (equal (generic-geval (g-apply fn args) env) (generic-geval-ev (cons fn (kwote-lst (generic-geval-list args env))) nil))) :hints (("goal" :expand ((generic-geval (g-apply fn args) env)) :in-theory (enable generic-geval-apply))))
other
(defthmd generic-geval-g-apply-p (implies (and (g-apply-p x) (not (equal (g-apply->fn x) 'quote))) (equal (generic-geval x env) (generic-geval-ev (cons (g-apply->fn x) (kwote-lst (generic-geval-list (g-apply->args x) env))) nil))) :hints (("goal" :expand ((generic-geval x env)) :in-theory (enable generic-geval-apply))) :rule-classes ((:rewrite :backchain-limit-lst 0)))
other
(defsection gobj-depends-on (local (in-theory (enable gobj-depends-on))) (defthm gobj-list-depends-on-of-g-apply->args (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-apply)) (not (gobj-list-depends-on k p (g-apply->args x))))) (defthm gobj-depends-on-of-g-ite->test (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-ite)) (not (gobj-depends-on k p (g-ite->test x))))) (defthm gobj-depends-on-of-g-ite->then (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-ite)) (not (gobj-depends-on k p (g-ite->then x))))) (defthm gobj-depends-on-of-g-ite->else (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-ite)) (not (gobj-depends-on k p (g-ite->else x))))) (defthm gobj-depends-on-car-of-gobj-list (implies (not (gobj-list-depends-on k p x)) (not (gobj-depends-on k p (car x))))) (defthm gobj-list-depends-on-cdr-of-gobj-list (implies (not (gobj-list-depends-on k p x)) (not (gobj-list-depends-on k p (cdr x))))) (defthm gobj-list-depends-on-of-cons (equal (gobj-list-depends-on k p (cons a b)) (not (and (not (gobj-depends-on k p a)) (not (gobj-list-depends-on k p b)))))) (defthm gobj-list-depends-on-of-atom (implies (not (consp x)) (equal (gobj-list-depends-on k p x) nil)) :rule-classes ((:rewrite :backchain-limit-lst 0))) (defthm gobj-depends-on-car-of-gobj (implies (and (not (gobj-depends-on k p x)) (not (equal (tag x) :g-concrete)) (not (equal (tag x) :g-boolean)) (not (equal (tag x) :g-integer)) (not (equal (tag x) :g-ite)) (not (equal (tag x) :g-var)) (not (equal (tag x) :g-apply))) (not (gobj-depends-on k p (car x))))) (defthm gobj-depends-on-cdr-of-gobj (implies (and (not (gobj-depends-on k p x)) (not (equal (tag x) :g-concrete)) (not (equal (tag x) :g-boolean)) (not (equal (tag x) :g-integer)) (not (equal (tag x) :g-ite)) (not (equal (tag x) :g-var)) (not (equal (tag x) :g-apply))) (not (gobj-depends-on k p (cdr x))))) (defthm gobj-depends-on-of-g-boolean->bool (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-boolean)) (not (pbfr-depends-on k p (g-boolean->bool x))))) (defthm gobj-depends-on-of-g-integer->bits (implies (and (not (gobj-depends-on k p x)) (eq (tag x) :g-integer)) (not (pbfr-list-depends-on k p (g-integer->bits x))))) (defthm-gobj-flag (defthm generic-geval-of-set-var-when-gobj-depends-on (implies (and (not (gobj-depends-on k p x)) (bfr-eval p env) (bfr-eval p (bfr-set-var k v env))) (equal (generic-geval x (cons (bfr-param-env p (bfr-set-var k v env)) var-env)) (generic-geval x (cons (bfr-param-env p env) var-env)))) :hints ('(:expand ((:free (env) (:with generic-geval (generic-geval x env)))))) :flag gobj) (defthm generic-geval-list-of-set-var-when-gobj-depends-on (implies (and (not (gobj-list-depends-on k p x)) (bfr-eval p env) (bfr-eval p (bfr-set-var k v env))) (equal (generic-geval-list x (cons (bfr-param-env p (bfr-set-var k v env)) var-env)) (generic-geval-list x (cons (bfr-param-env p env) var-env)))) :hints ('(:expand ((:free (env) (generic-geval-list x env))))) :flag list)) (defthm gobj-depends-on-of-atom (implies (not (consp x)) (not (gobj-depends-on k p x))) :rule-classes ((:rewrite :backchain-limit-lst 0))) (defthm gobj-depends-on-of-cons (implies (not (g-keyword-symbolp x)) (equal (gobj-depends-on k p (cons x y)) (not (and (not (gobj-depends-on k p x)) (not (gobj-depends-on k p y)))))) :hints (("Goal" :in-theory (enable g-keyword-symbolp)))) (defthm gobj-depends-on-of-g-apply (equal (gobj-depends-on k p (g-apply fn args)) (gobj-list-depends-on k p args))) (defthm gobj-depends-on-of-g-ite (equal (gobj-depends-on k p (g-ite test then else)) (not (and (not (gobj-depends-on k p test)) (not (gobj-depends-on k p then)) (not (gobj-depends-on k p else)))))) (defthm gobj-depends-on-of-g-boolean (equal (gobj-depends-on k p (g-boolean bool)) (pbfr-depends-on k p bool))) (defthm gobj-depends-on-of-g-concrete (equal (gobj-depends-on k p (g-concrete val)) nil)) (defthm gobj-depends-on-of-g-var (equal (gobj-depends-on k p (g-var val)) nil)) (defthm gobj-depends-on-when-g-concrete (implies (equal (tag x) :g-concrete) (equal (gobj-depends-on k p x) nil)) :hints (("goal" :expand ((not (gobj-depends-on k p x))))) :rule-classes ((:rewrite :backchain-limit-lst 0))) (defthm gobj-depends-on-when-g-var (implies (equal (tag x) :g-var) (equal (gobj-depends-on k p x) nil)) :hints (("goal" :expand ((gobj-depends-on k p x)))) :rule-classes ((:rewrite :backchain-limit-lst 0))))