Conwayβs Game of Life implemented in PURE (no scummy Apps Script) Google Sheets
(also related my β admittedly less dynamic β Cellular Automata Google Sheet)
Hey future of coding folks,
I want to advertise the idea of non-abelian spreadsheets. The idea has slowly drifted into the center of my thinking this last year. I'm not sure if its a good idea or not. It kinda depends on how you build on it. So for now I just want to convey the general idea.
Picture in your mind a normal spreadsheet. In some sense it is 'abelian' (commutative) because from any cell going down and then right is the same as going right and then going down. If we make it non-abelian, so the order we go right and down matters, we get something like the picture attached below.
If you tilt your head slightly you may recognize it as the infinite binary tree. So an infinite binary tree is just the non-abelian version of the usual grid-based spreadsheet. The nodes of the tree are the cells. We can also think of finite binary trees as the analogue of tables.
A key feature of regular spreadsheets is the ability to write formulas with relative references. For instance in a regular spreadsheet you can use relative references so a formula always refers to the cell to the right of the given one, and in a tree you can write a formula that always refers to the cell you get by going down and to the right from the given cell.
Another key feature of spreadsheets is that you put stuff in cells! And we do that with trees all the time. For example if we write down the syntax tree for (a+b)*c what we are doing is putting each of the symbols into a cell of the tree.
We can push this analogy to account for all trees (in particular all syntax trees). This tree can't really be visualized because it branches infinitely at each node. It is much easier to describe algebraically. I'll use the term 'free monoid on a set X', which if you aren't in the know just means the set of strings made out of the elements of X regarded as distinct characters. The infinite binary tree, or more precisely the set of nodes of the infinite binary tree, can be described as the free monoid on a two element set {L, R}. e.g. RLL describes the node you get by going right, then left, and then left again. Now let X_n denote a set with n elements and X the disjoint union of the X_n for all n. It suffices to take the free monoid on X.
A reasonable question at this point is what is the interface for an infinitely branching tree? You would think it is even worse than an infinite dimensional grid, which is the abelian version. But if we are restricting ourselves to trees coming from symbolic expressions then for the most part we already have the interface. It is just the symbolic expressions we would have written down in the first place.
I'll leave it at that.
If you want to go in all four directions (like down, right, and then up) you'll need to have a four-ways infinite tree, like the diagram shown here of the free group on two generators.
I don't know if this is relevant to what you're getting at, cuz I don't know what you're getting at.
Oh rad, I see why it's the free monoid, since the parse tree is built up by concatenation (no inverse required).
I agree that there's a few different thesis statements here that have accreted over time and are now duking it out. I like the claim that parse trees are readily represented by spreadsheets, if only we throw out commutativity.
For my part, I'd like the tree itself to work as a paper tool, e.g. if I'm authoring a generative grammar in a Tracery-style IDE with progressive disclosure. artbot.club is playing with these ideas, but I hit overwhelm much faster than I would in a (non)commutative spreadsheet.
Joshua Horowitz I was trying to avoid 'getting at anything'. I definitely have ideas for what you can do with this kind of a spreadsheet, but I wanted to convey the idea of this kind of a spreadsheet independently.
But the diagram you included is totally another example of a 'non-abelian' spreadsheet I have in mind. In general you can model a spreadsheet on any monoid* (so the cells of the spreadsheet are the elements of the monoid) and still have relative references. If you take the free group on two generators then it is also a monoid and it can be visualized as that diagram. For fun: if you take the abelian group (Z/nZ) \times (Z/mZ), the corresponding spreadsheet can be visualized on a torus. I don't know why you would ever do that, but I think its kinda amusing.
(* not 100% sure of this, but it works for a handful)
@Jari The example with (a+b)*c is the closest I have to 'simple and real'.
@Jasmine Otto Its been a while since I've seen generative grammar stuff. Cool link!
I created a wiki page about Propagators any resource you would add? Do you know of related ideas?
do scoped propagators count?
π Orion Reed
My research investigates the intersection of computing, human-system interfaces, and emancipatory politics. I am interested in the potential of computing as a medium for thought, as a tool for collective action, and as a means of emancipation.
Dennis is working on a propagator network project called holograph
[July 26th, 2024 1:18 PM] dhansen909: Hello- little update on http://www.holograph.so|www.holograph.so - formerly known as the <https://futureofcoding.slack.com/archives/CCL5VVBAN/p1716413598853019|propagator simulator>- I am working on performance had had the nerdiest proud moment ever and figured of all people, ya'll would appreciate it.
I built a propagation speed profiler in holograph to test how fast propagation was occurring for a little recursively incrementing loop (in the grey box). Im using a buffer to collect and average the values over time and another buffer to collect and display averages as a chart. You can see the propagation speed and compare it with the total Propagations Per Second (PPS in the top left). Before this work i was at a hard cap of 60 pps and now total pps often gets over 300. Still a long road ahead but it feels like a big win right now :tada:
In any case, this example demonstrates major stuff added since my first post here: β’ Get and set shape properties β’ Trigger click events β’ Dashed arrows that don't fire propagators β’ Async functions/fetch/await syntax β’ Lots of cool examples to explore- including some made my folk here :) Hope ya'll enjoyed the update! If ya'll find anything wonky or have ideas let me know !
Thanks for the mention Christopher Shank . Also Edward Kmett did a Haskell implementation github.com/ekmett/propagators
Turnstyle is a graphical esoteric programming language loosely inspired by Piet. Both encode programs as images, however, the similarities end at the syntax level.
Where Piet is really a stack machine in disguise, Turnstyle is an encoding of the (untyped) Lambda calculus. This allows for building more reusable images at a higher level of abstraction, while still keeping the specification small, making it relatively easy to develop new interpreters.
π Turnstyle
Turnstyle is an graphical esoteric programming language based on lambda calculus.