Fixing function for plexeme structures.
Function:
(defun plexeme-fix$inline (x) (declare (xargs :guard (plexemep x))) (mbe :logic (case (plexeme-kind x) (:header (b* ((name (header-name-fix (std::da-nth 0 (cdr x))))) (cons :header (list name)))) (:ident (b* ((ident (ident-fix (std::da-nth 0 (cdr x))))) (cons :ident (list ident)))) (:number (b* ((number (pnumber-fix (std::da-nth 0 (cdr x))))) (cons :number (list number)))) (:char (b* ((const (cconst-fix (std::da-nth 0 (cdr x))))) (cons :char (list const)))) (:string (b* ((literal (stringlit-fix (std::da-nth 0 (cdr x))))) (cons :string (list literal)))) (:punctuator (b* ((punctuator (acl2::str-fix (std::da-nth 0 (cdr x))))) (cons :punctuator (list punctuator)))) (:other (b* ((char (nfix (std::da-nth 0 (cdr x))))) (cons :other (list char)))) (:block-comment (b* ((content (nat-list-fix (std::da-nth 0 (cdr x))))) (cons :block-comment (list content)))) (:line-comment (b* ((content (nat-list-fix (std::da-nth 0 (cdr x))))) (cons :line-comment (list content)))) (:newline (b* ((chars (newline-fix (std::da-nth 0 (cdr x))))) (cons :newline (list chars)))) (:spaces (b* ((count (pos-fix (std::da-nth 0 (cdr x))))) (cons :spaces (list count)))) (:horizontal-tab (cons :horizontal-tab (list))) (:vertical-tab (cons :vertical-tab (list))) (:form-feed (cons :form-feed (list)))) :exec x))
Theorem:
(defthm plexemep-of-plexeme-fix (b* ((new-x (plexeme-fix$inline x))) (plexemep new-x)) :rule-classes :rewrite)
Theorem:
(defthm plexeme-fix-when-plexemep (implies (plexemep x) (equal (plexeme-fix x) x)))
Function:
(defun plexeme-equiv$inline (acl2::x acl2::y) (declare (xargs :guard (and (plexemep acl2::x) (plexemep acl2::y)))) (equal (plexeme-fix acl2::x) (plexeme-fix acl2::y)))
Theorem:
(defthm plexeme-equiv-is-an-equivalence (and (booleanp (plexeme-equiv x y)) (plexeme-equiv x x) (implies (plexeme-equiv x y) (plexeme-equiv y x)) (implies (and (plexeme-equiv x y) (plexeme-equiv y z)) (plexeme-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm plexeme-equiv-implies-equal-plexeme-fix-1 (implies (plexeme-equiv acl2::x x-equiv) (equal (plexeme-fix acl2::x) (plexeme-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm plexeme-fix-under-plexeme-equiv (plexeme-equiv (plexeme-fix acl2::x) acl2::x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm equal-of-plexeme-fix-1-forward-to-plexeme-equiv (implies (equal (plexeme-fix acl2::x) acl2::y) (plexeme-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm equal-of-plexeme-fix-2-forward-to-plexeme-equiv (implies (equal acl2::x (plexeme-fix acl2::y)) (plexeme-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm plexeme-equiv-of-plexeme-fix-1-forward (implies (plexeme-equiv (plexeme-fix acl2::x) acl2::y) (plexeme-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm plexeme-equiv-of-plexeme-fix-2-forward (implies (plexeme-equiv acl2::x (plexeme-fix acl2::y)) (plexeme-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm plexeme-kind$inline-of-plexeme-fix-x (equal (plexeme-kind$inline (plexeme-fix x)) (plexeme-kind$inline x)))
Theorem:
(defthm plexeme-kind$inline-plexeme-equiv-congruence-on-x (implies (plexeme-equiv x x-equiv) (equal (plexeme-kind$inline x) (plexeme-kind$inline x-equiv))) :rule-classes :congruence)
Theorem:
(defthm consp-of-plexeme-fix (consp (plexeme-fix x)) :rule-classes :type-prescription)
Theorem:
(defthm plexeme-fix$inline-of-plexeme-fix-x (equal (plexeme-fix$inline (plexeme-fix x)) (plexeme-fix$inline x)))
Theorem:
(defthm plexeme-fix$inline-plexeme-equiv-congruence-on-x (implies (plexeme-equiv x x-equiv) (equal (plexeme-fix$inline x) (plexeme-fix$inline x-equiv))) :rule-classes :congruence)