File: term-ordered-perms.lisp

package info (click to toggle)
acl2 8.5dfsg-5
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 991,452 kB
  • sloc: lisp: 15,567,759; javascript: 22,820; cpp: 13,929; ansic: 12,092; perl: 7,150; java: 4,405; xml: 3,884; makefile: 3,507; sh: 3,187; ruby: 2,633; ml: 763; python: 746; yacc: 723; awk: 295; csh: 186; php: 171; lex: 154; tcl: 49; asm: 23; haskell: 17
file content (52 lines) | stat: -rw-r--r-- 1,448 bytes parent folder | download | duplicates (3)
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
; (certify-book "term-ordered-perms")

(in-package "ACL2")

(include-book "sorting/perm" :dir :system)

(defun term-orderedp (x)
       (if (endp x)
           t
         (if (endp (cdr x))
             t
           (and (term-order (car x) (car (cdr x)))
                (term-orderedp (cdr x))))))

(encapsulate nil
  (local (defthm term-orderedp-rm
           (implies (term-orderedp a)
                    (term-orderedp (rm e a)))))

  (local (defthm term-orderedp-memb
           (implies (and (term-orderedp a)
                         (not (equal e (car a)))
                         (term-order e (car a)))
                    (not (memb e a)))))

  (local (defthm equal-cons
           (equal (equal (cons a b) x)
                  (and (consp x)
                       (equal a (car x))
                       (equal b (cdr x))))))

  (local (defthm car-rm
           (equal (car (rm e a))
                  (if (consp a)
                      (if (equal e (car a))
                          (cadr a)
                          (car a))
                      nil))))

  (local (defthm true-listp-rm
           (implies (true-listp a)
                    (true-listp (rm e a)))))

  (defthm term-ordered-perms
    (implies (and (true-listp a)
                  (true-listp b)
                  (term-orderedp a)
                  (term-orderedp b))
             (equal (equal a b)
                    (perm a b)))
    :rule-classes nil))