Join two maps from identifiers to types.
(simpadd0-join-vartys vartys1 vartys2) → vartys
This is used on maps that must be compatible, so we throw a hard error if that is not the case.
Function:
(defun simpadd0-join-vartys (vartys1 vartys2) (declare (xargs :guard (and (ident-type-mapp vartys1) (ident-type-mapp vartys2)))) (let ((__function__ 'simpadd0-join-vartys)) (declare (ignorable __function__)) (b* ((vartys1 (ident-type-map-fix vartys1)) (vartys2 (ident-type-map-fix vartys2))) (if (omap::compatiblep vartys1 vartys2) (omap::update* vartys1 vartys2) (raise "Internal error: ~ incompatible variable-type maps ~x0 and ~x1" vartys1 vartys2)))))
Theorem:
(defthm ident-type-mapp-of-simpadd0-join-vartys (b* ((vartys (simpadd0-join-vartys vartys1 vartys2))) (ident-type-mapp vartys)) :rule-classes :rewrite)
Theorem:
(defthm simpadd0-join-vartys-of-ident-type-map-fix-vartys1 (equal (simpadd0-join-vartys (ident-type-map-fix vartys1) vartys2) (simpadd0-join-vartys vartys1 vartys2)))
Theorem:
(defthm simpadd0-join-vartys-ident-type-map-equiv-congruence-on-vartys1 (implies (c$::ident-type-map-equiv vartys1 vartys1-equiv) (equal (simpadd0-join-vartys vartys1 vartys2) (simpadd0-join-vartys vartys1-equiv vartys2))) :rule-classes :congruence)
Theorem:
(defthm simpadd0-join-vartys-of-ident-type-map-fix-vartys2 (equal (simpadd0-join-vartys vartys1 (ident-type-map-fix vartys2)) (simpadd0-join-vartys vartys1 vartys2)))
Theorem:
(defthm simpadd0-join-vartys-ident-type-map-equiv-congruence-on-vartys2 (implies (c$::ident-type-map-equiv vartys2 vartys2-equiv) (equal (simpadd0-join-vartys vartys1 vartys2) (simpadd0-join-vartys vartys1 vartys2-equiv))) :rule-classes :congruence)