chiark / gitweb /
notation: remove notation test file
[topbloke-formulae.git] / notation.tex
index 2f310bd612d6437700709b3b6d2b9a524f5a20f2..82a2e647dbac266a769374a422727af8c92e6663 100644 (file)
@@ -1,4 +1,7 @@
-\section{Notation}
+\stdsection{Notation}
+
+Throughout, any free variables are implicitly universally quantified
+at the outermost level.
 
 \begin{basedescript}{
 \desclabelwidth{5em}
@@ -27,10 +30,19 @@ A patch $\p$ consists of two sets of commits $\pn$ and $\py$, which
 are respectively the base and tip git branches.  $\p$ may be used
 where the context requires a set, in which case the statement
 is to be taken as applying to both $\py$ and $\pn$.
-All of these sets are disjoint.  Hence:
+All of these sets will be disjoint by construction
+(see Invariants, below).  Hence:
+
+\item[ $\foreign$ ]
+The set of all commits which are not part of a Topbloke branch.  We
+call these foreign commits.
+
+\item[ $\set A$, $\set P$, $\ldots$ ]
+Arbitrary sets of commits.  Maybe $\set P = \p$ i.e.\ some $\py$ or $\pn$, but
+maybe not.
 
 \item[ $ \patchof{ C } $ ]
-Either $\p$ s.t. $ C \in \p $, or $\bot$.
+Either $\p$ s.t. $ C \in \p $, or $\foreign$.
 A function from commits to patches' sets $\p$.
 
 \item[ $ \pancsof{C}{\set P} $ ]
@@ -49,15 +61,22 @@ $ \pendsof{C}{\pn} = \{ \baseof{C} \} $ where $ C \in \py $.
 A partial function from commits to commits.
 See Unique Base, below.
 
-\item[ $ C \haspatch \p $ ]
-$\displaystyle \bigforall_{D \in \py} D \isin C \equiv D \le C $.
-~ Informally, $C$ has all the reachable contents of $\p$.
-
 \item[ $ C \nothaspatch \p $ ]
 $\displaystyle \bigforall_{D \in \py} D \not\isin C $.
 ~ Informally, $C$ has none of the contents of $\p$.
 
-Note that $\haspatch$ and $\nothaspatch$ are not mutually exclusive.
+\item[ $ C \zhaspatch \p $ ]
+$\displaystyle \bigforall_{D \in \py} D \isin C \equiv D \le C $.
+~ Informally, $C$ has all the reachable contents of $\p$.
+
+\item[ $ C \haspatch \p $ ]
+$\displaystyle C \zhaspatch \p \land \exists_{F \in \py} F \le C $.
+~ Informally, $C$ nontrivially has all the reachable contents of $\p$.
+
+Note that $\zhaspatch$ and $\nothaspatch$ are neither
+mutually exclusive nor exhaustive.
+$\haspatch$ and $\nothaspatch$ are mutually exclusive but not
+necessarily exhaustive.
 
 Commits on Non-Topbloke branches are $\nothaspatch \p$ for all $\p$.  This
 includes commits on plain git branches made by applying a Topbloke
@@ -67,15 +86,41 @@ the relevant Topbloke branches, we hope that
 if the user still cares about the Topbloke patch,
 git's merge algorithm will DTRT when trying to re-apply the changes.
 
-\item[ $\displaystyle \mergeof{C}{L}{M}{R} $ ]
-The contents of a git merge result:
+\item[ $\displaystyle \stmtmergeof{L}{M}{R} $ ]
+The proper results of a merge.  Formally,
+where $L$, $M$ and $R$ are statements:
+$$
+  \stmtmergeof{L}{M}{R}
+    \equiv
+  \begin{cases}
+         (L \land R)      : & \true \\
+    (\neg L \land \neg R) : & \false \\
+    \text{otherwise} : & \neg M
+  \end{cases}
+$$
+
+May also be used where $L$, $M$ and $R$ are sets, in which case
+$$
+  \setmergeof{L}{M}{R}
+     =
+  \left\{
+    \;
+    D \; \middle| \;
+      \setmergeof{ D \in L }{ D \in M }{ D \in R }
+    \;
+  \right\}
+$$
+
+\item[ $\displaystyle \commitmergeof{C}{L}{M}{R} $ ]
+$C$ has exactly the contents of a git merge result:
 
 $\displaystyle D \isin C \equiv
   \begin{cases}
-    (D \isin L \land D \isin R) \lor D = C : & \true \\
-    (D \not\isin L \land D \not\isin R) \land D \neq C : & \false \\
-    \text{otherwise} : & D \not\isin M
+    D = C : & \true \\
+    D \neq C : & \stmtmergeof{ D \isin L }{ D \isin M }{ D \isin R }
   \end{cases}
 $
 
+We will refer to this as \commitmergename.
+
 \end{basedescript}