Index trees underlying key trees.
As defined later, a key tree includes a tree of indices, represented as a closed non-empty set of paths.
Extending a path of an index tree results in a index tree, because the extension preserves non-emptiness and prefix closure.
Function:
(defun bip32-index-treep (x) (declare (xargs :guard t)) (and (bip32-path-setp x) (not (emptyp x)) (bip32-path-set-closedp x)))
Theorem:
(defthm booleanp-of-bip32-index-treep (b* ((yes/no (bip32-index-treep x))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm bip32-path-setp-when-bip32-index-treep (implies (bip32-index-treep x) (bip32-path-setp x)) :rule-classes (:rewrite :forward-chaining))
Theorem:
(defthm bip32-index-treep-of-singleton-empty-path (bip32-index-treep '(nil)))
Function:
(defun bip32-index-tree-fix (x) (declare (xargs :guard (bip32-index-treep x))) (mbe :logic (if (bip32-index-treep x) x (list nil)) :exec x))
Theorem:
(defthm bip32-index-treep-of-bip32-index-tree-fix (b* ((fixed-x (bip32-index-tree-fix x))) (bip32-index-treep fixed-x)) :rule-classes :rewrite)
Theorem:
(defthm bip32-index-tree-fix-when-bip32-index-treep (implies (bip32-index-treep x) (equal (bip32-index-tree-fix x) x)))
Function:
(defun bip32-index-tree-equiv$inline (acl2::x acl2::y) (declare (xargs :guard (and (bip32-index-treep acl2::x) (bip32-index-treep acl2::y)))) (equal (bip32-index-tree-fix acl2::x) (bip32-index-tree-fix acl2::y)))
Theorem:
(defthm bip32-index-tree-equiv-is-an-equivalence (and (booleanp (bip32-index-tree-equiv x y)) (bip32-index-tree-equiv x x) (implies (bip32-index-tree-equiv x y) (bip32-index-tree-equiv y x)) (implies (and (bip32-index-tree-equiv x y) (bip32-index-tree-equiv y z)) (bip32-index-tree-equiv x z))) :rule-classes (:equivalence))
Theorem:
(defthm bip32-index-tree-equiv-implies-equal-bip32-index-tree-fix-1 (implies (bip32-index-tree-equiv acl2::x x-equiv) (equal (bip32-index-tree-fix acl2::x) (bip32-index-tree-fix x-equiv))) :rule-classes (:congruence))
Theorem:
(defthm bip32-index-tree-fix-under-bip32-index-tree-equiv (bip32-index-tree-equiv (bip32-index-tree-fix acl2::x) acl2::x) :rule-classes (:rewrite :rewrite-quoted-constant))
Theorem:
(defthm equal-of-bip32-index-tree-fix-1-forward-to-bip32-index-tree-equiv (implies (equal (bip32-index-tree-fix acl2::x) acl2::y) (bip32-index-tree-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm equal-of-bip32-index-tree-fix-2-forward-to-bip32-index-tree-equiv (implies (equal acl2::x (bip32-index-tree-fix acl2::y)) (bip32-index-tree-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm bip32-index-tree-equiv-of-bip32-index-tree-fix-1-forward (implies (bip32-index-tree-equiv (bip32-index-tree-fix acl2::x) acl2::y) (bip32-index-tree-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm bip32-index-tree-equiv-of-bip32-index-tree-fix-2-forward (implies (bip32-index-tree-equiv acl2::x (bip32-index-tree-fix acl2::y)) (bip32-index-tree-equiv acl2::x acl2::y)) :rule-classes :forward-chaining)
Theorem:
(defthm bip32-index-treep-of-insert-of-rcons (implies (and (bip32-index-treep paths) (in path paths) (ubyte32p index)) (bip32-index-treep (insert (rcons index path) paths))))