Concurrent programming is used in all large and complex computer systems.
However, concurrency errors and system failures (ex: crashes and deadlocks) are
common. We find that Petri nets can be used to model concurrent systems and
find and remove errors ahead of time. We introduce a novel generalization of
Petri nets with nondeterministic transition nodes to match real systems. These
allow for a compact way to construct, optimize, and prove computer programs at
the concurrency level. Petri net programs can also be optimized by
automatically solving for maximal concurrency, where the maximum number of
valid threads is determined by the structure of the Petri net prior to
execution. We discuss an algorithm to compute the state graph of a given Petri
net start state pair. We introduce our open source software framework which
implements this theory as a general purpose concurrency focused middle-ware