GitXplorerGitXplorer
g

higher-trees

public
0 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
b46d547aaf6404c70fcf027b8614e1b873175e68

Update README.md

gggreif committed 8 years ago
Unverified
55e4d43958a7a2b19836ec948df6f130435071ce

add more explanation

gggreif committed 8 years ago
Unverified
e0cf8fd3b54e249b3198bc0c5528ab9a981fcfe2

other direction

gggreif committed 8 years ago
Unverified
9b63f730f7b848b5c5b11740cdc9acc7fd5acc51

iso between Hidden RTree' and RTrees

gggreif committed 8 years ago
Unverified
3a0d82a02a4ecc00093d053a6a3593e112d9229b

add a singleton(ish) version of RTree

gggreif committed 8 years ago
Unverified
58b46c2cf8a8f869fc7e02dfdf6a2b3a2911a84b

not the signature of (the upcoming) Drop

gggreif committed 8 years ago

README

The README file for this repository.

higher-trees

Haskell library for higher dimensional trees

Build Status CircleCI

Courtesy of MuniHac2016

Image credit: http://opetopic.net A 3-dimensional tree

Disclaimer

This is not yet a library. Hopefully it will become one someday. Right now it is more of a playground for testing techniques how to deal with such objects in GHC. See e.g. the singleton branch for interesting type-level stuff (rather clumsy, I know). Also I have provoked GHC panics, so if you want to examine them, check out the panic-* branches.

Background

Higher-dimensional trees are interesting objects of study in higher-categorical calculi. As far as I know @ericfinster came up with this formulation, and he is developing a prover for diagrammatic reasoning. He utilizes opetopes as the primitives (words) of his calculus.

Higher dimensional trees are almost opetopes. They must have exactly one cell in codimension 0 to qualify as such.

Decorating

An n-dimensional tree can be decorated to obtain an (n+1)-dimensional tree.

Pointing

Point at an non-empty set {b0 .. bn} of boxes. These can be thought of as a monoid: they determine the smallest subtree that encompasses all those boxes.

The closure property is the following: if neither is a predecessor of the other, then the monoid operation includes the highest common predecessor (dominator) an all the boxes in-between.

What we get is a semi-lattice, a commutative idempotent monoid. Unit is the empty pointed set.

Sticking cards

When we have such a subtree, we can stick a card below it. For the next round this becomes another box we can mappend to. All encompassed boxes of the card are removed from the pointable set (i.e. become mempty). They are still accessible for sprouting as that process creates new boxes outside of the card.

The cards encompass an n-dimensional branching structure, thus giving rise to an (n+1)-dimensional tree (a branch of it). In fact the card cuts out a subtree of the n-dimensional original tree.

By collapsing the card to a box, the original tree gives rise to a new n-dimensional tree that is (possibly) smaller. This process can be considered an inverse substitution.

Zippers

The term pointing is made precise by the data structure of the zipper. In this case it is a path from the root leading to the box we point at.