Oset of the keys of an omap.
Function:
(defun keys (map) (declare (xargs :guard (mapp map))) (let ((__function__ 'keys)) (declare (ignorable __function__)) (cond ((empty map) nil) (t (mv-let (key val) (head map) (declare (ignore val)) (insert key (keys (tail map))))))))
Theorem:
(defthm setp-of-keys (b* ((keys (keys map))) (setp keys)) :rule-classes :rewrite)
Theorem:
(defthm keys-when-empty (implies (empty map) (equal (keys map) nil)) :rule-classes (:rewrite :type-prescription))
Theorem:
(defthm keys-iff-not-empty (iff (keys map) (not (empty map))))
Theorem:
(defthm in-to-in-of-keys (iff (in key map) (set::in key (keys map))))
Theorem:
(defthm in-keys-when-in-forward (implies (in key map) (set::in key (keys map))) :rule-classes :forward-chaining)
Theorem:
(defthm keys-of-update (equal (keys (update key val m)) (insert key (keys m))))