X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke-formulae.git;a=blobdiff_plain;f=notation.tex;h=b6b4a8cc814c01ffdb9076320796fbadfbc4bfbd;hp=966c51ec5cd64a6178b9b11bf50b367218ff77db;hb=1768ad396360b5f7145450858b4bae1e9d1c7b05;hpb=891ae7626916bde1eb7dfa38762bbb4d94b85211 diff --git a/notation.tex b/notation.tex index 966c51e..b6b4a8c 100644 --- a/notation.tex +++ b/notation.tex @@ -1,9 +1,15 @@ -\section{Notation} +\stdsection{Notation} + +Throughout, any free variables are implicitly universally quantified +at the outermost level. \begin{basedescript}{ \desclabelwidth{5em} \desclabelstyle{\nextlinelabel} } +\item[ $ C \hasparent D $ ] +Commit $C$ has commit $D$ as (one of) its parents. + \item[ $ C \hasparents \set X $ ] The parents of commit $C$ are exactly the set $\set X$. @@ -11,7 +17,7 @@ $\set X$. \item[ $ C \ge D $ ] $C$ is a descendant of $D$ in the git commit graph. This is a partial order, namely the transitive closure of -$ D \in \set X $ where $ C \hasparents \set X $. +$ \hasparent $. \item[ $ C \has D $ ] Informally, the tree at commit $C$ contains the change @@ -28,12 +34,20 @@ 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 will be disjoint by construction -(see Invariants, below). Hence: +(see Invariants, below). + +\item[ $\foreign$ ] +The set of all commits which are not part of a Topbloke branch. We +call these foreign commits. Hence: \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[ $\set A$, $\set P$, $\ldots$ ] +Arbitrary sets of commits. Maybe $\set P = \p$ i.e.\ some $\py$ or $\pn$, but +maybe not. + \item[ $ \pancsof{C}{\set P} $ ] $ \{ A \; | \; A \le C \land A \in \set P \} $ i.e. all the ancestors of $C$ @@ -75,15 +89,42 @@ 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{\stmt L}{\stmt M}{\stmt R} $ ] +The proper results of a merge. Formally, +where $\stmt L$, $\stmt M$ and $\stmt R$ are statements: +$$ + \stmtmergeof{\stmt L}{\stmt M}{\stmt R} + \equiv + \begin{cases} + (\stmt L \land \stmt R) : & \true \\ + (\neg \stmt L \land \neg \stmt R) : & \false \\ + \text{otherwise} : & \neg \stmt M + \end{cases} +$$ + +May also be used with sets: +$$ + \setmergeof{\set L}{\set M}{\set R} + = + \left\{ + \; + D \; \middle| \; + \setmergeof{ D \in \set L }{ D \in \set M }{ D \in \set R } + \; + \right\} +$$ + +\item[ $\displaystyle \commitmergeof{C}{L}{M}{R} $ ] +With $C$, $L$, $M$ and $R$ being commits, a convenience notation. +$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 \bf\commitmergename. + \end{basedescript}