Aude

An automated differentiation solver with a Lisp-like functional programming language

``text === Aude 0.2 === Typehelp` for more information.

mul

mul

ty: (fun (tup f64 f64) f64)

D: (lam (tup f64 f64) (tup mul($0) (lin_lam (tup f64 f64) add((tup mul((tup fst(f64)(f64)($0) fst(f64)(f64)($1))) mul((tup snd(f64)(f64)($0) snd(f64)(f64)($1)))))))) ```

To run Aude from your Terminal, type:

cargo install --example aude aude

Then, to run:

aude

References

The Simple Essence of Automatic Differentiation

Design

Aude uses a Lisp-like syntax, to avoid pain during translating to and from other programming languages.

For example, instead of f64 -> f64, Aude uses (ty f64 f64).

Function application uses the syntax <function>(<argument>), e.g. sin(0).

Variables uses De Bruijn indices, e.g. $0 refers to the lambda argument.

All operators take 2 arguments, e.g. (fun f64 f64).

Features

| Function | Description | | -------- | ------------------------- | | add | Addition | | cos | Cosine (trigonometry) | | fst | First tuple component | | fstpar | First parallel component | | id | Identity | | neg | Negation | | mul | Multiplication | | sin | Sine (trigonometry) | | snd | Second tuple component | | sndpar | Second parallel component |

| Op | Description | Example | | -------- | ------------------------- | ------------------------------- | | comp | Composes functions | g . f = (comp g f) | | lincomp | Composes linear functions | g . f = (lin_comp g f) | | fun | Function type | f64 -> f64 = (fun f64 f64) | | lin | Linear function type | f64 -o f64 = (lin f64 f64) | | lam | Lambda expression | \x:f64.x = (lam f64 $0) | | lamlin | Linear lambda expression | \x:f64.x = (lin_lam f64 $0) | | par | Parallel tuple | f x g = (par f g) | | tup | Tuple | (f, g) = (tup f g) | | ty | Type | x : f64 = (ty x f64) |