summaryrefslogtreecommitdiff
path: root/base.rules
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-06-14 16:41:52 -0500
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-06-14 16:41:52 -0500
commit3a03bdd7e7a2dbe1d83c33f5fbe8e94d6bac9f71 (patch)
treee814112f8ed166eddfca24426649ad48906d9339 /base.rules
parente9469f6e7c4ff04cdc939030c5af4c1516a0271b (diff)
messy codeHEADmain
Diffstat (limited to 'base.rules')
-rw-r--r--base.rules35
1 files changed, 32 insertions, 3 deletions
diff --git a/base.rules b/base.rules
index aa14298..f5363bc 100644
--- a/base.rules
+++ b/base.rules
@@ -1,5 +1,34 @@
+("Trivial Base Cases")
(def-rule (+ @a) @a)
(def-rule (* @a) @a)
-(def-rule (+ @a @a .) (+ (* 2 @a) .))
-(def-rule (+ @a (* $i @a) .) (+ (* (+ $i 1) @a) .))
-(def-rule (+ (* $i @a) (* $j @a) .) (+ (* (+ $i $j) @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))))