\documentclass[99-notes-packed.tex]{subfiles} \begin{document} \paragraph*{CCS} Define the set of operations and semantics: \begin{itemize} \item { $0$ (inaction): $0$ represents a graph with 1 (initial) state, 0 transitions. } \item { $a, \bar{a}$ (complementary actions): Complementary actions are assumed to communicate / synchronize with one another. } \item { $a.P$ (action prefix) for each action $a$, process $P$, which: \begin{enumerate} \item Define new initial state $\mathsf{i}$. \item Creates transition $\mathsf{i} \xrightarrow{a} I_P$. \end{enumerate} } \item { $P + Q$ (summation / choice / alternative composition), where: \begin{itemize} \item Define new initial state $\mathsf{root}$. \item $\mathrm{States}(P + Q) \coloneqq \mathrm{States}(P) \cup \mathrm{States}(Q) \cup \{\mathsf{root}\}$ \item Replace all $I_P \xrightarrow{a} s$ with $\mathsf{root} \xrightarrow{a} s$. \item Replace all $I_Q \xrightarrow{a} s$ with $\mathsf{root} \xrightarrow{a} s$. \end{itemize} } \item { $P | Q$ (parallel composition). This takes the cartesian product of the states of $P, Q$, such that: \begin{itemize} \item $s \xrightarrow{a} s^{'} \in P \implies \forall t \in Q: (s, t) \xrightarrow{a} (s^{'}, t)$ \item $t \xrightarrow{a} t^{'} \in Q \implies \forall s \in P: (s, t) \xrightarrow{a} (s, t^{'})$ \item $(s \xrightarrow{a} s^{'} \in P) \wedge (t \xrightarrow{\bar{a}} t^{'} \in Q) \implies (s, t) \xrightarrow{\tau} (s^{'}, t^{'})$ \end{itemize} Note that \textbf{CCS adheres strictly to a handshaking communication format} -- this differs from ACP which gives greater leeway to implementation, via the use of $\gamma$ operator. } \item { $P{\backslash}a$ (restriction) for each action $a$. This produces copy of $P$ such that all actions $a, \bar{a}$ are omitted. This is useful to remove unsuccessful communication. } \item { $P[f]$ (relabelling) for each function $f: A \rightarrow A$. This replaces each label $a, \bar{a}$ by $f(a), \overline{f(a)}$. } \end{itemize} \paragraph*{Recursion} \begin{definition}[process names and expressions] Suppose we bind names $X, Y, Z, \dots$ to some expression in the CCS language: \begin{equation*} X = P_X \end{equation*} Here, $P_X$ represents ANY expression in the language, possibly including $X$. It is trivial to see this can cause recursive definitions: \begin{equation*} X = a.X \end{equation*} \end{definition} \begin{definition}[recursive specification] Define \textbf{recursive specification} as partial function $s: X \rightarrow E$: \begin{itemize} \item $X$: \textbf{recursion variables}. \item $E$: \textbf{recursion equations} of form $x = P_x$. \end{itemize} In general, recursive spec.s are written as follows: \begin{equation*} \langle x | s \rangle \end{equation*} which reads as ``process $x$ satisfying equation $s$''. \end{definition} \begin{definition}[guarded recursion] A recursion is \textbf{guarded} if each occurrence of a process name in $P_X$ occurs within the scope of a subexpression $a.P^{'}_X$. Think of it as being unwind-able such that progress is guaranteed. \end{definition} \paragraph*{Structural Operational Semantics (CCS)} \begin{center} \begin{tabular}{cc} $ \begin{prooftree} \infer0{a.E \xrightarrow{a} E} \end{prooftree} $ & $ \begin{prooftree} \hypo{E_j \xrightarrow{a} E_j^{'}} \infer1{\sum_{i \in I}E_i \xrightarrow{a} E_j^{'}} \end{prooftree}\ (j \in I) $ \\ \\ $ \begin{prooftree} \hypo{E \xrightarrow{a} E^{'}} \infer1{E | F \xrightarrow{a} E^{'} | F} \end{prooftree} $ & $ \begin{prooftree} \hypo{E \xrightarrow{a} E^{'}} \hypo{F \xrightarrow{\overline{a}} F^{'}} \infer2{E | F \xrightarrow{\tau} E^{'} | F^{'}} \end{prooftree} $ \\ \\ $ \begin{prooftree} \hypo{E \xrightarrow{a} E^{'}} \hypo{a \notin L \cup \overline{L}} \infer2{E{\backslash}L \xrightarrow{a} E^{'}{\backslash}L} \end{prooftree} $ & $ \begin{prooftree} \hypo{E \xrightarrow{a} E^{'}} \infer1{E[f] \xrightarrow{f(a)} E^{'}[f]} \end{prooftree} $ \\ \\ \end{tabular} \end{center} \end{document}