Function:
(defun smt-typep (term) (declare (xargs :guard t)) (let ((acl2::__function__ 'smt-typep)) (declare (ignorable acl2::__function__)) (symbolp term)))
Theorem:
(defthm booleanp-of-smt-typep (b* ((valid-type? (smt-typep term))) (booleanp valid-type?)) :rule-classes :rewrite)
Function:
(defun argument-syntax-p (term) (declare (xargs :guard t)) (let ((acl2::__function__ 'argument-syntax-p)) (declare (ignorable acl2::__function__)) (or (and (atom term) (equal term nil)) (and (true-listp term) (car term) (not (cdr term)) (symbolp (car term))) (and (true-listp term) (car term) (cadr term) (not (cddr term)) (symbolp (car term)) (smt-typep (cadr term))) (and (true-listp term) (car term) (cadr term) (not (cddddr term)) (symbolp (car term)) (smt-typep (cadr term)) (equal ':hints (caddr term)) (hints-syntax-p (cadddr term))))))
Theorem:
(defthm booleanp-of-argument-syntax-p (b* ((syntax-good? (argument-syntax-p term))) (booleanp syntax-good?)) :rule-classes :rewrite)
Function:
(defun argument-syntax-fix (term) (declare (xargs :guard (argument-syntax-p term))) (let ((acl2::__function__ 'argument-syntax-fix)) (declare (ignorable acl2::__function__)) (mbe :logic (if (argument-syntax-p term) term nil) :exec term)))
Theorem:
(defthm argument-syntax-p-of-argument-syntax-fix (b* ((fixed-term (argument-syntax-fix term))) (argument-syntax-p fixed-term)) :rule-classes :rewrite)
Function:
(defun argument-syntax-equiv$inline (acl2::x acl2::y) (declare (xargs :guard (and (argument-syntax-p acl2::x) (argument-syntax-p acl2::y)))) (equal (argument-syntax-fix acl2::x) (argument-syntax-fix acl2::y)))
Theorem:
(defthm argument-syntax-equiv-is-an-equivalence (and (booleanp (argument-syntax-equiv x y)) (argument-syntax-equiv x x) (implies (argument-syntax-equiv x y) (argument-syntax-equiv y x)) (implies (and (argument-syntax-equiv x y) (argument-syntax-equiv y z)) (argument-syntax-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm argument-syntax-equiv-implies-equal-argument-syntax-fix-1 (implies (argument-syntax-equiv acl2::x x-equiv) (equal (argument-syntax-fix acl2::x) (argument-syntax-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm argument-syntax-fix-under-argument-syntax-equiv (argument-syntax-equiv (argument-syntax-fix acl2::x) acl2::x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm equal-of-argument-syntax-fix-1-forward-to-argument-syntax-equiv (implies (equal (argument-syntax-fix acl2::x) acl2::y) (argument-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm equal-of-argument-syntax-fix-2-forward-to-argument-syntax-equiv (implies (equal acl2::x (argument-syntax-fix acl2::y)) (argument-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm argument-syntax-equiv-of-argument-syntax-fix-1-forward (implies (argument-syntax-equiv (argument-syntax-fix acl2::x) acl2::y) (argument-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm argument-syntax-equiv-of-argument-syntax-fix-2-forward (implies (argument-syntax-equiv acl2::x (argument-syntax-fix acl2::y)) (argument-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Function:
(defun argument-lst-syntax-p (term) (declare (xargs :guard t)) (let ((acl2::__function__ 'argument-lst-syntax-p)) (declare (ignorable acl2::__function__)) (b* (((if (atom term)) (equal term nil)) ((cons first rest) term)) (and (argument-syntax-p first) (argument-lst-syntax-p rest)))))
Theorem:
(defthm booleanp-of-argument-lst-syntax-p (b* ((syntax-good? (argument-lst-syntax-p term))) (booleanp syntax-good?)) :rule-classes :rewrite)
Function:
(defun argument-lst-syntax-fix (term) (declare (xargs :guard (argument-lst-syntax-p term))) (let ((acl2::__function__ 'argument-lst-syntax-fix)) (declare (ignorable acl2::__function__)) (mbe :logic (if (consp term) (cons (argument-syntax-fix (car term)) (argument-lst-syntax-fix (cdr term))) nil) :exec term)))
Theorem:
(defthm argument-lst-syntax-p-of-argument-lst-syntax-fix (b* ((fixed-term (argument-lst-syntax-fix term))) (argument-lst-syntax-p fixed-term)) :rule-classes :rewrite)
Function:
(defun argument-lst-syntax-equiv$inline (acl2::x acl2::y) (declare (xargs :guard (and (argument-lst-syntax-p acl2::x) (argument-lst-syntax-p acl2::y)))) (equal (argument-lst-syntax-fix acl2::x) (argument-lst-syntax-fix acl2::y)))
Theorem:
(defthm argument-lst-syntax-equiv-is-an-equivalence (and (booleanp (argument-lst-syntax-equiv x y)) (argument-lst-syntax-equiv x x) (implies (argument-lst-syntax-equiv x y) (argument-lst-syntax-equiv y x)) (implies (and (argument-lst-syntax-equiv x y) (argument-lst-syntax-equiv y z)) (argument-lst-syntax-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm argument-lst-syntax-equiv-implies-equal-argument-lst-syntax-fix-1 (implies (argument-lst-syntax-equiv acl2::x x-equiv) (equal (argument-lst-syntax-fix acl2::x) (argument-lst-syntax-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm argument-lst-syntax-fix-under-argument-lst-syntax-equiv (argument-lst-syntax-equiv (argument-lst-syntax-fix acl2::x) acl2::x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm equal-of-argument-lst-syntax-fix-1-forward-to-argument-lst-syntax-equiv (implies (equal (argument-lst-syntax-fix acl2::x) acl2::y) (argument-lst-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm equal-of-argument-lst-syntax-fix-2-forward-to-argument-lst-syntax-equiv (implies (equal acl2::x (argument-lst-syntax-fix acl2::y)) (argument-lst-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm argument-lst-syntax-equiv-of-argument-lst-syntax-fix-1-forward (implies (argument-lst-syntax-equiv (argument-lst-syntax-fix acl2::x) acl2::y) (argument-lst-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm argument-lst-syntax-equiv-of-argument-lst-syntax-fix-2-forward (implies (argument-lst-syntax-equiv acl2::x (argument-lst-syntax-fix acl2::y)) (argument-lst-syntax-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)