Simplify the problem a. Breaking down the problem into component problems b. Model the problem with less resolution 2. Solve the simplified problem(s) recursively 3. Solve the initial problem
Simplify the problem a. Breaking down the problem into component problems b. Model the problem with less resolution 2. Solve the simplified problem(s) recursively 3. Solve the initial problem
Simplify the problem a. Breaking down the problem into component problems b. Model the problem with less resolution 2. Solve the simplified problem(s) recursively 3. Solve the initial problem a. Combine solutions b. Increase resolution for the solution
ML (of the ISWIM kind) - 2017 * just don’t look under the lambda λ>> let x = Matrix(2,2) of float32 WithInit(GlorotN) λ>> let y = Matrix(2,2) of float32 WithInit(Uniform) λ>> let z = mul x y λ>> :∂ z (* manually trigger differentiation of z wrt its inputs *) λ>> (:deriv x) = y (* check that the partial deriv of x is equal to y *) True λ>> let id = fun x -> x in id x ...
2018 Commands, Commands Commands λ>> x = Matrix((2,2), Float32, WithInit(GlorotN)) λ>> y = Matrix((2,2), Float32, WithInit(Uniform)) λ>> z = MatMul(x, y) λ>> x.∂ == y // check that the partial deriv of x is equal to y true λ>> func id(x [a]) [a] { return x } id(x): ∀[a]: a → a ...
traditional APLs (GNU APL or Dyalog APL) • Tree Calculus-like semantics and a Jay-style shapely type system • More symbols: ◦ ⚠ - Mark function as unsafe ◦ ∇ - Auto differentiation (𝖄 is used for recursion instead) ◦ ∂ - Partial derivative of a value ◦ 🀱 - Horizontal stack ◦ 🁣 - Vertical stack ◦ ⌘ - Command/Escape hatch ◦ ⍼ - Plot ◦ ⎄ - Unpivot
New Notation • Rediscovery of differentiation by means of skolemization of dual numbers. • S(·) → + → × → ✳ • Various isomorphisms that may be useful for developing neural networks.
and implementation ◦ Type language vs term language ◦ Googlers Protobuf transformers • Mixed computational models ◦ Regular expressions ◦ SQL • Hierarchical use ◦ Functional core, imperative shell ◦ Imperative core, functional BAU (e.g. NaughtyDog’s Game Oriented Assembly Lisp )
the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience.” - Albert Einstein
solve your specific problem. • Invent multiple languages to solve one problem. • Take a hundred metre view: ◦ Survey similarities ◦ Examine exceptions ◦ Understand unifiers
elements that the rules work on. • Solving problems := establishing rules/constraints on a bunch of things. • Notation := how language is written. • Changing the way we write changes the way we solve problems. • Use more different notations to help us think through and solve problems. • Don’t add more cruft to the already fragile ecosystem.
Why not lisp/Have you heard of Racket? ◦ (((o(°▽°)o))) • Why not Rust? ◦ People keep comparing Rust to Go. They should really compare Rust with chess. Both are tactical games. Go is more of a strategy game. • Why not Haskell/Ocaml? ◦ Both are pure functional programming languages. Ocaml is pure, and Haskell is extra virgin. I can’t afford the purity because I have a day job. • Why don’t you use Dyalog APL? ◦ I don’t understand their business model, which appears to be stuck 20 years in the past. Plus, I control my own language.
and APLs • How do you type INiGo or APL code? ◦ With a keyboard. Specifically, all the keyboards I use either have QMK or ZMK as a firmware. The QMK keyboards have a special APL layer, which allows direct input. • Are the symbols necessary? ◦ Yes and no. They may be replaced by words or any other combination of symbols on a keyboard (like J-lang does). But I feel the symbols are especially well thought out and are suggestive of what they do. ◦ e.g ⍉ is transpose and ⌽ is reverse/rotate along the Y axis. These give visual cues as to what you’re doing.
text background in the first slide? ◦ Book 10 of the Rig Veda, on knowledge ◦ The verse reads: “Bṛhaspati, when the wise established name-giving - the first principles of Vāc (Language) - all that was excellent and pure was brought forth to light” • What is the Chinese text in the background of the Language slide? ◦ The White Horse Dialogue by Gongsun Long (320-250 B.C) ◦ The words observes a linguistic paradox - that a white horse is not a horse ◦ The crux of the paradox is summed up by Bill Clinton: “that depends on what your definition of ‘is’ is”.
• Have you heard of Dyna? Yes. I have also used it. It’s a declarative language for maths that I feel is better than traditional mathematical language. • The mathematical notations on neural networks aren’t all equally showing the same information! First, that’s not a question. And yes, I am aware of that. Surely I get to bias things a little to make my point.
scary head picture on the ALGOL slide? ◦ Algol is known as the demon star in the constellation of Perseus. ◦ Perseus killed Medusa, a Gorgon. The demon star refers to Medusa. ◦ Gorgonia was named after the Gorgons.
we already go through this with the mess of UML and the like in the 90s? You want us to go back to writing specs like that? Yes. We lacked wisdom then. We are wiser now. Knowing when to use things like UML for problem solving and when to use it for specification is wisdom.
Arithmetic Universe is about to Change Traditionally: • Repeated S ⇒ + • Repeated + ⇒ × • Repeated × ⇒ * But: ab ≠ ba Compiler writers love the commutativity trick!
Arithmetic Universe is about to Change Is there an operation ✳ that is a “next level”, and still maintains commutativity, associativity and distributivity?
Arithmetic Universe is about to Change Is there an operation ✳ that is a “next level”, and still maintains commutativity, associativity and distributivity? a ✳ b = aln b
Arithmetic Universe is about to Change Is there an operation ✳ that is a “next level”, and still maintains commutativity, associativity and distributivity? a ✳ b = aln b ✓ (a ✳ b) ✳ c = a ✳ (b ✳ c) ✓ a ✳ b = b ✳ a ✓ a ✳ (b × c) = a ✳ b × a ✳ c Identity: e Inverse Identity: e1/ln(a)
Arithmetic Universe is about to Change Is there an operation ✳ that is a “next level”, and still maintains commutativity, associativity and distributivity? a ✳ b = aln b ✓ (a ✳ b) ✳ c = a ✳ (b ✳ c) ✓ a ✳ b = b ✳ a ✓ a ✳ (b × c) = a ✳ b × a ✳ c Identity: e Inverse Identity: e1/ln(a) a, b, c > 0