Elementary Structures in Petri Nets
Petri nets are powerful tools for modeling systems where multiple events interact over time. Although they can represent highly sophisticated behaviors, every Petri net is built from a few elementary structures that define how events unfold.
These core patterns describe the flow of events and the possible evolutions of a system. They fall into four categories: sequence, concurrency, synchronization, and conflict.
By combining these building blocks, we can construct all the more advanced Petri nets used in software engineering, workflow design, distributed systems, process control, and other real-world applications.
Sequential Petri Net
A sequential Petri net models a scenario where events occur in a fixed and predetermined order.
Each transition fires only after the preceding one has completed, creating a linear and predictable flow of execution.
Example

Event t2 becomes enabled only after t1 has fired. In the same way, t3 can occur only after t2. This structure is clear, simple, and ideal when tasks must follow a strict order.
Parallel Petri Net
A parallel Petri net models situations where events can occur independently, without a predefined order.
This structure, also called structural concurrency, allows transitions to fire either one after another or simultaneously. The event flow is nondeterministic, meaning that multiple valid execution paths are possible.
To work properly, concurrent events must not cause structural conflicts within the net.
Note. If parallelism originates from a specific initial transition (called a parallel begin or par begin), then the transitions that follow (the fork branches) become enabled only after this initial trigger has fired.
A practical example
In this case, transition t1 acts as the par begin transition.

Once t1 fires, transitions t2 and t3 become enabled at the same time. They represent the fork branches of the process.
From this point on, the execution flow is flexible. The system might fire t2 first and then t3, or the opposite. Both outcomes are valid.
Synchronized Petri Net
A synchronized Petri net requires certain events to be completed before another event can occur. This mechanism is known as a join operation.
Synchronization is often used together with concurrency, especially when separate branches must later rejoin into a single coordinated point.
The convergence transition, called parallel end (or par end), fires only when all required transitions leading into it have already occurred.
A practical example
Here, transition t3 becomes enabled only after both t1 and t2 have fired.

In this scenario, t3 is the par end transition. If either t1 or t2 has not yet occurred, the flow remains blocked and cannot move forward.
Petri Net with Structural Conflict
A structural conflict introduces a choice between multiple possible events. Only one of the enabled transitions may fire, forcing the system to decide among alternative paths.
A practical example
In the example below, two transitions are enabled at the same time, but only one can occur.

If t1 fires, t2 is disabled, and vice versa. The flow will follow only the branch associated with the chosen transition.
Note. This example shows a choice between two alternatives, but the same logic applies to three, four, or more concurrent possibilities. When one transition fires, all competing alternatives are disabled.
This mechanism allows Petri nets to model decision points, uncertainty, and mutually exclusive behaviors in complex systems.
