Function:
(defun relativize-path (path base) (declare (xargs :guard (and (stringp path) (stringp base)))) (b* (((reterr) "") (path (mbe :logic (acl2::str-fix path) :exec path)) (base (mbe :logic (acl2::str-fix base) :exec base)) ((unless (str::strprefixp base path)) (reterr t))) (retok (subseq (the string path) (length (the string base)) nil))))
Theorem:
(defthm booleanp-of-relativize-path.erp (b* (((mv acl2::?erp ?relative-path) (relativize-path path base))) (booleanp erp)) :rule-classes :rewrite)
Theorem:
(defthm stringp-of-relativize-path.relative-path (b* (((mv acl2::?erp ?relative-path) (relativize-path path base))) (stringp relative-path)) :rule-classes :rewrite)
Theorem:
(defthm relativize-path-of-str-fix-path (equal (relativize-path (acl2::str-fix path) base) (relativize-path path base)))
Theorem:
(defthm relativize-path-streqv-congruence-on-path (implies (acl2::streqv path path-equiv) (equal (relativize-path path base) (relativize-path path-equiv base))) :rule-classes :congruence)
Theorem:
(defthm relativize-path-of-str-fix-base (equal (relativize-path path (acl2::str-fix base)) (relativize-path path base)))
Theorem:
(defthm relativize-path-streqv-congruence-on-base (implies (acl2::streqv base base-equiv) (equal (relativize-path path base) (relativize-path path base-equiv))) :rule-classes :congruence)