List of values associated to a list of keys in an omap.
(list-lookup keys map) → vals
Function:
(defun list-lookup (keys map) (declare (xargs :guard (and (true-listp keys) (mapp map)))) (declare (xargs :guard (list-in keys map))) (let ((__function__ 'list-lookup)) (declare (ignorable __function__)) (cond ((endp keys) nil) (t (cons (lookup (car keys) map) (list-lookup (cdr keys) map))))))
Theorem:
(defthm true-listp-of-list-lookup (b* ((vals (list-lookup keys map))) (true-listp vals)) :rule-classes :rewrite)
Theorem:
(defthm list-lookup-of-cons (equal (list-lookup (cons key keys) map) (cons (lookup key map) (list-lookup keys map))))
Theorem:
(defthm list-lookup-of-append (equal (list-lookup (append keys1 keys2) map) (append (list-lookup keys1 map) (list-lookup keys2 map))))
Theorem:
(defthm list-lookup-of-rev (equal (list-lookup (rev keys) map) (rev (list-lookup keys map))))
Theorem:
(defthm list-lookup-of-update*-when-list-in (implies (list-in keys map1) (equal (list-lookup keys (update* map1 map2)) (list-lookup keys map1))))
Theorem:
(defthm list-lookup-of-update*-when-list-notin (implies (list-notin keys map1) (equal (list-lookup keys (update* map1 map2)) (list-lookup keys (mfix map2)))))
Theorem:
(defthm list-lookup-of-update-of-non-member (implies (not (member-equal key keys)) (equal (list-lookup keys (update key val map)) (list-lookup keys map))))
Theorem:
(defthm list-lookup-of-list-fix-keys (equal (list-lookup (list-fix keys) map) (list-lookup keys map)))
Theorem:
(defthm list-lookup-list-equiv-congruence-on-keys (implies (list-equiv keys keys-equiv) (equal (list-lookup keys map) (list-lookup keys-equiv map))) :rule-classes :congruence)
Theorem:
(defthm list-lookup-of-mfix-map (equal (list-lookup keys (mfix map)) (list-lookup keys map)))
Theorem:
(defthm list-lookup-mequiv-congruence-on-map (implies (mequiv map map-equiv) (equal (list-lookup keys map) (list-lookup keys map-equiv))) :rule-classes :congruence)