X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke-formulae.git;a=blobdiff_plain;f=article.tex;h=1cf0e76e61e8b48c3eb083eafdcf590929e74891;hp=714fbd167e00d67c850ccf69d0942e9a8b3b116a;hb=0b0cb39339f1f3c4fd43e8dbfa2efd3f5b5eddf2;hpb=cc1fe9b52fdc03805d305fe1e0b74063661d5e2a diff --git a/article.tex b/article.tex index 714fbd1..1cf0e76 100644 --- a/article.tex +++ b/article.tex @@ -1,21 +1,109 @@ -\documentclass[a4paper]{article} -\usepackage{MnSymbol} +\documentclass[a4paper,leqno]{strayman} +\let\numberwithin=\notdef +\usepackage{amsmath} +\usepackage{mathabx} \usepackage{stmaryrd} \usepackage{slashed} +\usepackage{txfonts} +\usepackage{amsfonts} +\usepackage{mdwlist} +%\usepackage{accents} + +\renewcommand{\ge}{\geqslant} +\renewcommand{\le}{\leqslant} + +\newcommand{\has}{\sqsupseteq} +\newcommand{\isin}{\sqsubseteq} + +\newcommand{\nothaspatch}{\mathrel{\,\not\!\not\relax\haspatch}} +\newcommand{\notpatchisin}{\mathrel{\,\not\!\not\relax\patchisin}} +\newcommand{\haspatch}{\sqSupset} +\newcommand{\patchisin}{\sqSubset} + +\newcommand{\set}[1]{\mathbb #1} +\newcommand{\pa}[1]{\varmathbb #1} +\newcommand{\pay}[1]{\pa{#1}^+} +\newcommand{\pan}[1]{\pa{#1}^-} + +\newcommand{\p}{\pa{P}} +\newcommand{\py}{\pay{P}} +\newcommand{\pn}{\pan{P}} + +%\newcommand{\hasparents}{\underaccent{1}{>}} +%\newcommand{\hasparents}{{% +% \declareslashed{}{_{_1}}{0}{-0.8}{>}\slashed{>}}} +\newcommand{\hasparents}{>_{\mkern-7.0mu _1}} +\newcommand{\areparents}{<_{\mkern-14.0mu _1\mkern+5.0mu}} + +\renewcommand{\implies}{\Rightarrow} + +\newcommand{\pancs}[2]{{\mathcal A} ( #1 , #2 ) } +\newcommand{\pends}[2]{{\mathcal E} ( #1 , #2 ) } + +\renewcommand{\land}{\wedge} + \begin{document} -\def\iwjtest{{/\mkern-9mu\Sqsupset}} -\newcommand{\iwjtestx}{\mathrel{\ooalign{$\Sqsubset$ $\sslash$}}} -\newcommand{\iwjtesty}{{% - \declareslashed{}{\sslash}{-0.04}{0}{\Sqsubset}\slashed{\Sqsubset}}} -sponge -$ A \sqsubseteq B $ -$ A \not \sqsubseteq B $ -$ A \nsqsubseteq B $ -$ A \Sqsubset B $ -$ A \Sqsupset B $ -$ \sslash $ -$ \iwjtest $ -$ \iwjtestx $ -$ \iwjtesty $ -$ A \iwjtesty B $ + +\section{Notation} + +\begin{basedescript}{ +\desclabelwidth{5em} +\desclabelstyle{\nextlinelabel} +} +\item[ $ C \hasparents \set X $ ] +The parents of commit $C$ are exactly the set +$\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 $. + +\item[ $ C \has D $ ] +Informally, the tree at commit $C$ contains the change +made in commit $D$. Does not take account of deliberate reversions by +the user or in non-Topbloke-controlled branches; these are considered +normal, forward, commits. For merges and Topbloke-generated +anticommits, the ``change made'' is only to be thought of as any +conflict resolution. This is not a partial order because it is not +transitive. + +\item[ $ \p, \py, \pn $ ] +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 these sets are distinct. + +\item[ $ \pancs{C}{\set P} $ ] +$ \{ A \; | \; A \le C \land A \in \set P \} $ +i.e. all the ancestors of $C$ +which are in $\set P$. + +\item[ $ \pends{C}{\set P} $ ] +$ \{ E \; | \; E \in \pancs{C}{\set P} + \land \mathop{\not\exists}_{A \in \pancs{C}{\set P}} + A \neq E \land E \le A \} $ +i.e. all $\le$-maximal commits in $\pancs{C}{\set P}$. + +\end{basedescript} + +\section{Invariants} + +\[ C \has D \implies C \ge D \tag*{\mbox{No replay:}} \] + +Unique base: \[ \mathop{\forall}_{C \in \py} \pends{C}{\pn} = \{ B \} \] + +\section{Test more symbols} + +$ C \haspatch \p $ + +$ C \nothaspatch \p $ + +$ \p \patchisin C $ + +$ \p \notpatchisin C $ + +$ \{ B \} \areparents C $ + \end{document}