\documentclass[99-notes-packed.tex]{subfiles}

\begin{document}
\paragraph*{Concurrency Semantics} Define the following semantics of interest wrt. concurrency theory: 
\begin{enumerate}
    \item {
        \textbf{Interleaving Semantics}: concurrent actions $a$, $b$ occur in one of the following orders: 
        \begin{itemize}
            \item $a; b$
            \item $b; a$
        \end{itemize}
    }
    \item {
        \textbf{Step Semantics}: concurrent actions $a$, $b$ occur in one of the following orders: 
        \begin{itemize}
            \item $a; b$
            \item $b; a$
            \item $a || b$ (in parallel)
        \end{itemize}
    }
    \item {
        \textbf{Interval Semantics}: concurrent actions $a$, $b$ occur in continuous time, such that $a$, $b$ may occur in parallel for a subset of total runtime. 
    }
    \item {
        \textbf{Partial-order (aka. Causal) Semantics}: concurrent actions $a$, $b$ not only can occur in parallel for some continuous time interval, but can also intersperse as unspecified segments (e.g., OS scheduling). 

        Nevertheless, causal relationships between $a, b, \dots$ are preserved -- $a$ calling e.g. \texttt{fork()} will posit a partial ordering before the spawned task $b$, though the exact concurrency behaviors leave much leeway to the OS scheduler.
    }
\end{enumerate}

\begin{definition}[Pomset]
    A \textbf{pomset (partial-ordered multiset)} defines a $(E, <, l)$-tuple where:
    \begin{itemize}
        \item $E$ a set of ``events'' -- corresponding to each occurrence of action. 
        \item $<$ a partial-order of E -- $e_i$ happens before $e_j$, or incomparable, etc.
        \item $l: E \rightarrow A$ a mapping between events to their actions. 
    \end{itemize}

    A normal trace thus becomes a totally ordered multiset of actions, compared to a pomset representation. 
\end{definition}

\paragraph*{Petri Net} captures the dynamism within parallel systems. It defines a $(S, T, F, I)$-tuple where: 
\begin{itemize}
    \item $S, T$ define \underline{places} and actions grouped in bipartite form. 
    \item $F \subseteq (S \times T) \cup (T \times S)$ set of transitions.
    \item $I: S \rightarrow \mathbb{N}$ (initial marking) defines the initial state of control, via allocating tokens to initial states. Subsequent states of control is referred to as \textbf{marking} in general.
\end{itemize}

\begin{definition}[Control \& Tokens]
    Petri nets encode control at runtime. A \textbf{control} simply refers to the state at which the system is currently at. It is symbolized by a \textbf{token} for each concurrent state. 
\end{definition}

\end{document}