Join two spans.
The first span must come before the second one. We return a new span that goes from the start of the first span to the end of the second span.
Function:
(defun span-join (span1 span2) (declare (xargs :guard (and (spanp span1) (spanp span2)))) (make-span :start (span->start span1) :end (span->end span2)))
Theorem:
(defthm spanp-of-span-join (b* ((span (span-join span1 span2))) (spanp span)) :rule-classes :rewrite)
Theorem:
(defthm span-join-of-span-fix-span1 (equal (span-join (span-fix span1) span2) (span-join span1 span2)))
Theorem:
(defthm span-join-span-equiv-congruence-on-span1 (implies (span-equiv span1 span1-equiv) (equal (span-join span1 span2) (span-join span1-equiv span2))) :rule-classes :congruence)
Theorem:
(defthm span-join-of-span-fix-span2 (equal (span-join span1 (span-fix span2)) (span-join span1 span2)))
Theorem:
(defthm span-join-span-equiv-congruence-on-span2 (implies (span-equiv span2 span2-equiv) (equal (span-join span1 span2) (span-join span1 span2-equiv))) :rule-classes :congruence)