This file is indexed.

/usr/share/acl2-4.3/books/unicode/revappend.lisp is in acl2-books-source 4.3-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
;; Processing Unicode Files with ACL2
;; Copyright (C) 2005-2006 by Jared Davis <jared@cs.utexas.edu>
;;
;; This program is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the Free
;; Software Foundation; either version 2 of the License, or (at your option)
;; any later version.
;;
;; This program is distributed in the hope that it will be useful but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
;; more details.
;;
;; You should have received a copy of the GNU General Public License along with
;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
;; Place - Suite 330, Boston, MA 02111-1307, USA.

(in-package "ACL2")
(set-verify-guards-eagerness 2)

(local (include-book "arithmetic/top" :dir :system))

(local (defthm len-when-consp
         (implies (consp x)
                  (< 0 (len x)))
         :rule-classes ((:linear) (:rewrite))))

(defthm true-listp-of-revappend
  (equal (true-listp (revappend x y))
         (true-listp y)))

(defthm consp-of-revappend
  (equal (consp (revappend x y))
         (or (consp x)
             (consp y))))

(defthm len-of-revappend
  (equal (len (revappend x y))
         (+ (len x)
            (len y))))

(defthm nth-of-revappend
  (equal (nth n (revappend x y))
         (if (<= (len x) (nfix n))
             (nth (- (nfix n) (len x))
                  y)
           (nth (+ (1- (len x)) (- (nfix n)))
                x))))

(defthm equal-when-revappend-same
  (equal (equal (revappend x y1)
                (revappend x y2))
         (equal y1 y2)))


(local (defthm revappend-last-is-car
         (implies (consp x)
                  (equal (nth (1- (len x))
                              (revappend x y))
                         (car x)))))

(local (defthm revappend-lengths-x
         (implies (not (equal (len x1) (len x2)))
                  (not (equal (revappend x1 y)
                              (revappend x2 y))))
         :hints(("Goal" :use ((:instance len (x (revappend x1 y)))
                              (:instance len (x (revappend x2 y))))))))

(local (defthm revappend-equal-x-cdrs-lemma
         (implies (and (true-listp x1) (consp x1)
                       (true-listp x2) (consp x2)
                       (not (equal x1 x2))
                       (equal (cdr x1) (cdr x2)))
                  (not (equal (revappend x1 y)
                              (revappend x2 y))))))

(local (defthm revappend-equal-x-cars-lemma
         (implies (and (true-listp x1) (consp x1)
                       (true-listp x2) (consp x2)
                       (not (equal (car x1) (car x2))))
                  (not (equal (revappend x1 y)
                              (revappend x2 y))))
         :hints(("Goal"
                 :in-theory (disable revappend-lengths-x
                                     revappend-last-is-car)
                 :use ((:instance revappend-lengths-x)
                       (:instance revappend-last-is-car (x x1))
                       (:instance revappend-last-is-car (x x2)))))))

(local (defthm revappend-nonempty-list
         (implies (consp x)
                  (not (equal (revappend x y) y)))
         :hints(("Goal" :use ((:instance len (x (revappend x y)))
                              (:instance len (x y)))))))

(local (defun revappend-induction-2 (x y acc)
         (if (and (consp x)
                  (consp y))
             (revappend-induction-2 (cdr x) (cdr y) (cons (car x) acc))
           (list x y acc))))

(defthm equal-of-revappends-when-true-listps
  (implies (and (true-listp x1)
                (true-listp x2))
           (equal (equal (revappend x1 y)
                         (revappend x2 y))
                  (equal x1 x2)))
  :hints(("Goal"
          :induct (revappend-induction-2 x1 x2 y))
         ("Subgoal *1/1"
          :in-theory (disable revappend-equal-x-cdrs-lemma
                              revappend-equal-x-cars-lemma)
          :use ((:instance revappend-equal-x-cdrs-lemma)
                (:instance revappend-equal-x-cars-lemma)))))