Filtering...

show-diff-lines

books/tools/show-diff-lines
other
(in-package "ACL2")
newline-beforefunction
(defun newline-before
  (s p n)
  (declare (type string s)
    (type (integer 0 *) p n)
    (xargs :guard (<= p (length s))))
  (cond ((zp p) 0)
    (t (let ((p-1 (1- p)))
        (cond ((eql (char s p-1) #\
) (if (zp n)
              p
              (newline-before s p-1 (1- n))))
          (t (newline-before s p-1 n)))))))
newline-afterfunction
(defun newline-after
  (s p n len)
  (declare (type string s)
    (type (integer 0 *) p n len)
    (xargs :guard (and (= len (length s)) (<= p len))
      :measure (if (and (natp p) (natp n) (natp len) (< p len))
        (- (1+ len) p)
        0)))
  (cond ((mbe :logic (not (and (natp p) (natp n) (natp len) (< p len)))
       :exec (= p len)) len)
    ((eql (char s p) #\
) (if (zp n)
        (1+ p)
        (newline-after s (1+ p) (1- n) len)))
    (t (newline-after s (1+ p) n len))))
newline-before-is-smallertheorem
(defthm newline-before-is-smaller
  (implies (natp p) (<= (newline-before s p n) p))
  :rule-classes :linear)
newline-after-is-biggertheorem
(defthm newline-after-is-bigger
  (implies (<= p len) (<= p (newline-after s p n len)))
  :rule-classes :linear)
newline-after-is-smallertheorem
(defthm newline-after-is-smaller
  (implies (<= p len) (<= (newline-after s p n len) len))
  :rule-classes :linear)
surrounding-linesfunction
(defun surrounding-lines
  (s p n1 n2)
  (declare (type string s)
    (type (integer 0 *) p n1 n2)
    (xargs :guard (<= p (length s))))
  (let* ((len (length s)) (n1 (if (and (< p (length s)) (eql (char s p) #\
))
          (1+ n1)
          n1)))
    (subseq s
      (newline-before s p n1)
      (newline-after s p n2 len))))
first-diff-position-recfunction
(defun first-diff-position-rec
  (s1 s2 p len1 len2)
  (declare (type string s1 s2)
    (type (integer 0 *) p len1 len2)
    (xargs :guard (and (equal len1 (length s1))
        (equal len2 (length s2))
        (<= p len1)
        (<= p len2))
      :measure (if (and (natp p) (natp len1) (< p len1))
        (- len1 p)
        0)))
  (cond ((mbe :logic (not (and (stringp s1)
           (stringp s2)
           (natp p)
           (equal len1 (length s1))
           (equal len2 (length s2))
           (< p len1)
           (< p len2)))
       :exec (or (= p len1) (= p len2))) p)
    ((eql (char s1 p) (char s2 p)) (first-diff-position-rec s1 s2 (1+ p) len1 len2))
    (t p)))
first-diff-positionfunction
(defun first-diff-position
  (s1 s2)
  (declare (type string s1 s2))
  (first-diff-position-rec s1 s2 0 (length s1) (length s2)))
first-diff-position-is-small-weak-lemmatheorem
(defthm first-diff-position-is-small-weak-lemma
  (implies (and (<= p (length s1)) (<= p (length s2)))
    (and (<= (first-diff-position-rec s1 s2 p (length s1) (length s2))
        (length s1))
      (<= (first-diff-position-rec s1 s2 p (length s1) (length s2))
        (length s2))))
  :rule-classes :linear)
first-diff-position-is-small-weaktheorem
(defthm first-diff-position-is-small-weak
  (and (<= (first-diff-position s1 s2) (length s1))
    (<= (first-diff-position s1 s2) (length s2)))
  :hints (("Goal" :in-theory (disable length)))
  :rule-classes :linear)