collaborators = FileAttachment("collaborators.sema").text()
import { GraphApp } from "/main.js"
div = document.getElementById("collaborator-semagram")
GraphApp.main(div, collaborators)
Halter et al. (2020)
(made with Semagrams)
Package | Description |
---|---|
Catlab.jl | Data structures, algorithms, visualization, computer algebra |
AlgebraicDynamics.jl | Open dynamical systems |
AlgebraicPetri.jl | Petri nets operations, including rate equation simulation |
AlgebraicRewriting.jl | Rewriting systems for combinatorial data structures |
AlgebraicRelations.jl | Database integration |
CombinatorialSpaces.jl | Meshes for PDEs |
Decapodes.jl | Discrete Exterior Calculus |
StockFlow.jl | Stockflow diagrams and simulations |
Semagrams.jl | User interfaces built around graphical syntax (Scala.js+Julia) |
Libkind, Baas, Patterson, et al. (2022)
(Vagner, Spivak, and Lerman (2015)) An open dynamical system consists of a state manifold \(X\), an input manifold \(X_{in}\), an output manifold \(X_{out}\), a readout function \(X \to X_{out}\) and an evolution function \(X \times X_{in} \to T X\).
Open dynamical systems form an operad algebra of the operad of undirected wiring diagrams.
Patterson et al. (2022)
What does it mean to “do category theory” on a computer?
In the category \(\mathsf{FinSet}\), the pushout of the above diagram is given by:
\[ X \sqcup_Z Y = (X + Y)/\sim \]
where \(\sim\) is the equivalence relation generated by \(f(z) \sim g(z)\) for all \(z \in Z\).
We want to actually compute pushouts!
We first need to represent finite sets on the computer
Julia has a data structure for representing a partition of \(\{1,\ldots,n\}\).
function pushout(X::FinSet, Y::FinSet, Z::FinSet,
f::FinFunction, g::FinFunction)
# Start with the singleton partition of {1,...,|X|+|Y|}
a = Partition(X.n + Y.n)
# Construct the partition we want: f(z) ~ g(z) for all z ∈ Z
for z in 1:Z.n
union!(a, f.values[z], g.values[z])
end
# Return a FinSet of size the number of unique roots
FinSet(length(unique!([find_root!(i) for i in 1:length(a)])))
end
This runs in time \(\mathcal{O}(m \log m)\), where m = X.n + Y.n
.
Exercise: extend this code to also compute the legs of the cocone for pushout!
Patterson, Lynch, and Fairbanks (2022)
Halter et al. (2020)
Domain | Funders and Collaborators |
---|---|
Epidemiology | ASKEM DARPA Project, University of Saskatchewan, DARPA YFA award (PI: Fairbanks) |
Multiphysics | ASKEM DARPA Project |
Task modeling and planning | PTG DARPA Project |
Industrial process and data management | CMU, NIST, Chevron |
Compositional statistical modeling | AFOSR YIP award (PI: Patterson) |
Education and outreach | Mozilla |
…if you will be on the job market soon:
Topos Institute and James’s lab at University of Florida are growing and will be looking for researchers over the next couple years. There may not be positions lining up precisely with the timing of when you are looking, but keep in touch with us if this is something you are interested in.
…if you want to use AlgebraicJulia?
Read papers and blog posts on algebraicjulia.org, and then ask us questions in the Julia Zulip: julialang.zulipchat.com.
…if you want to make your math be useful for scientists?
There’s no magic bullet, but the two things that will help are
Computational Category Theory in Applied Mathematics