File: polynomial-lemmas.lisp

package info (click to toggle)
acl2 8.6%2Bdfsg-3
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 1,138,276 kB
  • sloc: lisp: 17,818,294; java: 125,359; python: 28,122; javascript: 23,458; cpp: 18,851; ansic: 11,569; perl: 7,678; xml: 5,591; sh: 3,978; makefile: 3,840; ruby: 2,633; yacc: 1,126; ml: 763; awk: 295; csh: 233; lex: 197; php: 178; tcl: 49; asm: 23; haskell: 17
file content (115 lines) | stat: -rw-r--r-- 3,502 bytes parent folder | download | duplicates (2)
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
115
(in-package "ACL2")

(include-book "polynomial-defuns")

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

(defthmd eval-polynomial-expt-correct-lemma
  (implies (and (real/rational-polynomial-p poly)
		(real/rationalp x)
		(integerp n)
		(<= 0 n))
	   (equal (eval-polynomial-expt-aux poly x n)
		  (* (expt x n)
		     (eval-polynomial poly x)))))

(defthmd eval-polynomial-expt-correct
  (implies (and (real/rational-polynomial-p poly)
		(real/rationalp x))
	   (equal (eval-polynomial-expt poly x)
		  (eval-polynomial poly x)))
  :hints (("Goal"
	   :use ((:instance eval-polynomial-expt-correct-lemma
			    (n 0))))))

(defthm real-polynomial-scale-polynomial
  (implies (and (real/rational-polynomial-p poly)
		(real/rationalp c))
	   (real/rational-polynomial-p (scale-polynomial poly c))))

(defthm eval-scale-polynomial
  (implies (and (real/rational-polynomial-p poly)
		(real/rationalp c))
	   (equal (eval-polynomial (scale-polynomial poly c) x)
		  (* c (eval-polynomial poly x)))))

(defthm eval-scale-expt-polynomial
  (implies (and (real/rational-polynomial-p poly)
		(real/rationalp c)
		(real/rationalp x))
	   (equal (eval-polynomial-expt (scale-polynomial poly c) x)
		  (* c (eval-polynomial-expt poly x))))
  :hints (("Goal" :do-not-induct t
	   :in-theory (e/d (eval-polynomial-expt-correct)
			   (eval-polynomial-expt
			    scale-polynomial)))))


(defthm consp-scale-polnomial
  (equal (consp (scale-polynomial poly c))
	 (consp poly)))

(defthm real-polynomial-+
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2))
	   (real/rational-polynomial-p (polynomial-+ poly1 poly2))))

(defthm eval-polynomial-+
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2)
		(real/rationalp x))
	   (equal (eval-polynomial (polynomial-+ poly1 poly2) x)
		  (+ (eval-polynomial poly1 x)
		     (eval-polynomial poly2 x)))))

(defthm eval-polynomial-expt-+
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2)
		(real/rationalp x))
	   (equal (eval-polynomial-expt (polynomial-+ poly1 poly2) x)
		  (+ (eval-polynomial-expt poly1 x)
		     (eval-polynomial-expt poly2 x))))
  :hints (("Goal"
	   :in-theory (e/d (eval-polynomial-expt-correct)
			   (eval-polynomial-expt
			    polynomial-+)))))

(defthm consp-polnomial-+
  (equal (consp (polynomial-+ poly1 poly2))
	 (or (consp poly1)
	     (consp poly2))))

(defthm real-polynomial-*
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2))
	   (real/rational-polynomial-p (polynomial-* poly1 poly2))))

(defthm eval-polynomial-*
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2)
		(real/rationalp x))
	   (equal (eval-polynomial (polynomial-* poly1 poly2) x)
		  (* (eval-polynomial poly1 x)
		     (eval-polynomial poly2 x)))))


(defthm eval-polynomial-expt-*
  (implies (and (real/rational-polynomial-p poly1)
		(real/rational-polynomial-p poly2)
		(real/rationalp x))
	   (equal (eval-polynomial-expt (polynomial-* poly1 poly2) x)
		  (* (eval-polynomial-expt poly1 x)
		     (eval-polynomial-expt poly2 x))))
  :hints (("Goal"
	   :in-theory (e/d (eval-polynomial-expt-correct)
			   (eval-polynomial-expt
			    polynomial-*)))))

(defthm consp-polnomial-*
  (equal (consp (polynomial-* poly1 poly2))
	 (consp poly1)))

(defthm numberp-car-poly
  (implies (real/rational-polynomial-p poly)
	   (equal (acl2-numberp (car poly))
		  (consp poly))))