Basic equivalence relation for any-nat-map structures.
Function:
(defun any-nat-mequiv$inline (x y) (declare (xargs :guard (and (any-nat-mapp x) (any-nat-mapp y)))) (equal (any-nat-mfix x) (any-nat-mfix y)))
Theorem:
(defthm any-nat-mequiv-is-an-equivalence (and (booleanp (any-nat-mequiv x y)) (any-nat-mequiv x x) (implies (any-nat-mequiv x y) (any-nat-mequiv y x)) (implies (and (any-nat-mequiv x y) (any-nat-mequiv y z)) (any-nat-mequiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm any-nat-mequiv-implies-equal-any-nat-mfix-1 (implies (any-nat-mequiv x x-equiv) (equal (any-nat-mfix x) (any-nat-mfix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm any-nat-mfix-under-any-nat-mequiv (any-nat-mequiv (any-nat-mfix x) x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm equal-of-any-nat-mfix-1-forward-to-any-nat-mequiv (implies (equal (any-nat-mfix x) y) (any-nat-mequiv x y)) :rule-classes :forward-chaining)
Theorem:
(defthm equal-of-any-nat-mfix-2-forward-to-any-nat-mequiv (implies (equal x (any-nat-mfix y)) (any-nat-mequiv x y)) :rule-classes :forward-chaining)
Theorem:
(defthm any-nat-mequiv-of-any-nat-mfix-1-forward (implies (any-nat-mequiv (any-nat-mfix x) y) (any-nat-mequiv x y)) :rule-classes :forward-chaining)
Theorem:
(defthm any-nat-mequiv-of-any-nat-mfix-2-forward (implies (any-nat-mequiv x (any-nat-mfix y)) (any-nat-mequiv x y)) :rule-classes :forward-chaining)