from Hacker News

Data structures as topological spaces (2002) [pdf]

by cpp_frog on 2/16/24, 12:57 PM with 46 comments

  • by mjhay on 2/16/24, 4:15 PM

    Related to this, AlgebraicJulia has been doing a lot with applying concepts from algebra and category theory to data analysis and modelling.

    https://www.algebraicjulia.org/

    There's some blog posts that are also interesting:

    https://blog.algebraicjulia.org/

  • by Verdex on 2/16/24, 3:08 PM

    It feels like the following PDF better expresses what they're trying to accomplish.

    http://mgs.spatial-computing.org/PUBLICATIONS/lami-RR72--com...

    As far as I can tell, they're trying to model things like chemical reactions (and other stuff) where given a bunch of "stuff" in some solution it will combine with other "stuff" if it's in the same topological neighborhood (which I think is basically the idea that ALL of the "stuff" doesn't have to be next to each other b/c if you let a solution just sit there eventually reactions are going to react).

    It's kind of neat, but their website seems to indicate that it is not being actively supported. Or at the very least they don't seem to have any reason to make publicly available documentation after since around 2010.

    EDIT: So for example, you could use their "trans" transform primitive to implement conway's game of life by defining the birth rule as a pattern of an empty cell with three alive cells and a transform that results in the empty cell being alive and the alive cells being the same. The death rules in similar fashion. Neighbor here would be defined as being physically next to something (but the point is that because this is about topologies, then neighbor doesn't have to mean physical proximity ... although I'm not sure where that's defined ... in the collection maybe?).

    And then you just run the transform on a collection with some initial state.

    EDIT EDIT: Yeah, the notion of neighbor is defined on the collection. This allows you to use the same transform on different collection types and get the appropriate result.

    ALSO checkout figure 5 in the PDF I linked because it's an incredibly concise description of exactly what they're doing.

    EDIT EDIT EDIT:

    This also feels vaguely similar to what the Egison language is doing with their pattern matching. Documentation for Egison feels better at least to me.

    https://www.egison.org/

    However, I don't think that egison allows you to define arbitrary notions of neighbors in a collection like MGS does. But I haven't exactly tried to use it very much.

  • by hackandthink on 2/16/24, 3:19 PM

    Stephen Wolfram's ruliad seems to be some sort of concurrent topological computations.

    There are some beautiful pictures.

    https://content.wolfram.com/sites/43/2021/11/1110swimg46.png

    https://writings.stephenwolfram.com/2021/11/the-concept-of-t...

  • by misja111 on 2/16/24, 1:44 PM

    How is this fundamentally different than considering data structures as graphs?
  • by whosthatguy on 2/16/24, 5:38 PM

    > 1. selects a sub-collection B of A whose elements match the path pattern β,

    > 2. computes a new collection C as a function f of B and its neighbors,

    > 3. and specifies the insertion of C in place of B into A.

    This sounds a lot like the presentation of comonads as directed containers (e.g. https://arxiv.org/abs/1408.5809).

  • by reuben364 on 2/16/24, 2:06 PM

    I'm left confused as to what the gluing in the rule replacement is. Must the boundary of a rule match on both sides? Also what examples there would be of what an example would of having topology that is not induced from a graph if it is at all possible.
  • by andoando on 2/16/24, 6:17 PM

    This is very interesting. Has anyone considered using paths/vectors in 2d/3d space as data structures?
  • by anon291 on 2/16/24, 1:48 PM

    I wonder if this article is related to homotopy type theory at all, since they propose similar ideas.
  • by HackerThemAll on 2/16/24, 2:54 PM

    > So, the expression

    > 1, 1+1, 2+1, ():set

    > builds the set with the three elements 1, 2 and 3

    Regarding the "():set" part, and the "():something" idiom repeating in the article, is that from the same competition for the most absurd syntax where Golang got most of its awkwardness?