We need a recursive @match algorithm that evaluates the sheaf algorithm on the tree that is the gluing rule.
FP(gr::GluingRule) = @match gr
CompleteGraph(n) => [1:n]
DiscreteGraph(n) => powerset(1:n)
CycleGraph(n) => [1:n]
Terminal(g) => brute_force(g)
CliqueUnion(gs) => [...]
DisjointUnion(gs) => [...]
CycleUnion(gs) => [...]
end
All of the [...] cases involve recursing with FP and merging the results.
Originally posted by @jpfairbanks in #147 (comment)