Hacker Newsnew | past | comments | ask | show | jobs | submit | chombier's commentslogin

That of the underlying, hypothetical universal brain topology?


And what would that be?


Talk starts as 6:01:10


> pull out Hodge Duals every time you want to do something that involves the metric, but I'm also unconvinced that geometric algebra is the answer here.

I don't know, I recently tried to work out how the metric on vectors/1-forms induces a metric on higher-degree forms, and if the geometric product magically gives this for free I'd say it's a win (same for the Hodge star).


Both differential forms and geometric algebra are awkward for that sort of thing. I'd just stick with abstract index notation most of the time.


That comes from exterior algebra on its own, it's the k'th exterior power of the metric. Best not to conflate that with GA (unless I'm misunderstanding what you're talking about).


IIRC there's a fairly natural positive definite quadratic form on GA (used as the canonical norm) that takes the scalar part of the geometric product of a multi-vector and its reverse.

On the other hand, there's the k-th exterior power of the metric where one asks that wedge/interior products be adjoint in order to extend the metric to higher-degree forms.

I was under the impression that these metrics are the same, but maybe I'm completely wrong? Assuming I'm not, then the GA approach seems more natural to me.


The two should be the same up to possibly some factors of k! depending on your definitions.

Just as an example, suppose you have two multivectors (abc) and (xyz) with all the vectors orthogonal (for simplicity). The geometric product

(abc)(xyz)

has its scalar part created by

(abc)(xyz) = (ab) (c.x) (yz) = (c.x) (ab) (yz) = (c.x) a (b.y) (z) = (c.x) (b.y) (a) (z) = (a.z) (b.y) (c.x)

You can see how the dot product (which uses the metric internally) is being applied "in-to-out" : the adjacent terms are dotted, at which point they become commuting scalars; then the next terms, etc. Which, frankly, is dumb. This is why the GA version of a scalar product has the "reverse" operation involved... because the GP is doing this in-to-out thing, the scalar product has to undo it by defining (abc) . (xyz) = (abc) (xyz)^~ = (abc) (zyx) = (a.x) (b.y) (c.z), with ^~ meaning reverse.

Whereas the standard exterior algebra inner product is always left-to-right, giving

(abc).(xyz) = (a.x) (b.y) (c.z)

IMO the GA version is a mess because it's conflating two concepts. When the GP works, it is composing operators, so AB = A ∘ B. But the inner product, at its core, is more like division---it wants to have (a).(a) = 1, since its job is to say say "how many copies of (a) are there in (a)?" To make this work for multivectors (ab).(ab), it needs to be left-to-right. GA does in-to-out to copy quaternions with their i^2 = -1, but that's not necessary -- i^2 = -1 follows from the fact that for a rotation, R ∘ R = -I, so it is composing two rotations, not measuring one in terms of the other. Really i^2 = -1 should not be interpreted as a dot product at all. This is very clear when a metric is involved: R_xy ∘ R_xy = -I is a degree-two tensor which transforms with two factors of the metric, whereas (xy).(xy) = 1 is a degree-zero tensor, a coordinate-invariant scalar. They are just different operations, which happen to overlap in simple cases.


If you ever wondered how to write a programming language, this is probably the best resource to get started (and then of course Crafting Interpreters).

See also part 2 https://norvig.com/lispy2.html


I've always found MAL ("Make-A-Lisp" https://github.com/kanaka/mal) a bit more approachable, probably because I was out after creating my own programming language before I've written much Python. It's language agnostic, and really easy to follow along with most programming languages out there, explaining everything as you progress.

That it's language agnostic and somehow matters feels weird now a lot of time (and experience I suppose) afterwards, but back when I only knew 1-2 languages by heart, also having to face understanding Python at the same time from Norvigs guide/reference made it slightly more complicated for me.

I use this as a litmus test now when coming across new languages (implementing MAL in the new language), as it's such an easy approach to practically test large parts of the new language, and there is always host-language-specific tricks you can learn along the way.


Gimbal lock?


I was a bit curious to learn what the differences are between this and the actor model, and I found this lobste.rs discussion to be helpful: https://lobste.rs/s/gsjskz/behavior_oriented_concurrency_for

> In BoC, the equivalent of a message is received by multiple actors and operates with exclusive access to the message and all of the receivers.

(emphasis mine)

IIUC with actors, messages are processed by exactly one actor so it can be difficult to express transactions (e.g. transferring funds from A to B cannot be done atomically). Erlang somewhat fixes this with "selective receive" which re-introduces the possibility of deadlocks. BoC fixes both issues.


Apart from installation problems/crash issues, do you have some feedback about type checking with ty vs. pyrefly? Which is stricter, soundness issues, etc?

Both are rust/open-source/new/fast so it's difficult to understand why I should choose one over the other.


For inextensible cloth there's also "Efficient simulation of inextensible cloth" [0] that is particularly clever and efficient

[0] https://dl.acm.org/doi/10.1145/1276377.1276438


Also check out Jean Gallier's notes (available online) https://www.cis.upenn.edu/~jean/gbooks/manif.html


Nice! It would be interesting to visualize the total momentum vector, IIRC Verlet being symplectic should be good at preserving symmetries, whereas RK4 is good at conserving energy.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: