blob: f5363bc7edfc8401d014e15f2ee62ff2ba957d2c (
plain)
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
|
("Trivial Base Cases")
(def-rule (+ @a) @a)
(def-rule (* @a) @a)
(def-rule (+ 0 ..v) (+ ..v))
(def-rule (* 1 ..v) (* ..v))
(def-rule (* 0 ..v) 0)
("Flatten argument lists")
(def-rule (+ (+ ..a) ..b) (+ ..a ..b))
(def-rule (* (* ..a) ..b) (* ..a ..b))
("Pull out constant subexpressions")
(def-rule (+ $i $j ..a) (+ (+ $i $j) ..a))
(def-rule (* $i $j ..a) (* (* $i $j) ..a))
("Algebraic simplifications")
(def-rule (+ @a (* $i @a) ..v) (+ (* (+ $i 1) @a) ..v))
(def-rule (+ (* $i @a) (* $j @a) ..v) (+ (* (+ $i $j) @a) ..v))
(def-rule (+ @a @a ..v) (+ (* 2 @a) ..v))
("Derivatives")
(def-rule (d/dx $i) 0)
(def-rule (d/dx x) 1)
(def-rule (d/dx (sin @a)) (* (cos @a) (d/dx @a)))
(def-rule (d/dx (cos @a)) (* -1 (sin @a) (d/dx @a)))
(def-rule (d/dx (* -1 (sin @a))) (* -1 (cos @a) (d/dx @a)))
(def-rule (d/dx (* -1 (cos @a))) (* (sin x) (d/dx @a)))
(def-rule (d/dx (* $i @a ..v)) (* $i (d/dx (* @a ..v))))
(def-rule (d/dx (+ @a @b ..v)) (+ (d/dx @a) (d/dx @b) (d/dx (+ ..v))))
(def-rule (d/dx (+ @a ..v)) (+ (d/dx @a) (d/dx (+ ..v))))
(def-rule (d/dx (* @a @b)) (+ (* @a (d/dx @b)) (* @b (d/dx @a))))
(def-rule (d/dx (* @a @b @c)) (+ (* (d/dx @a) @b @c) (* @a (d/dx @b) @c) (* @a @b (d/dx @c))))
|