X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke-formulae.git;a=blobdiff_plain;f=article.tex;h=cf68f3111441d9078fb011da5ab259579c841523;hp=b152332fb67833f3cf039d45805f09b90395f7fa;hb=a2d8c7bf9f1582d62c7a26ab2d953675606e8299;hpb=acb7988d6386288e78024013461f0042db4e3f51 diff --git a/article.tex b/article.tex index b152332..cf68f31 100644 --- a/article.tex +++ b/article.tex @@ -1,10 +1,11 @@ -\documentclass[a4paper]{article} +\documentclass[a4paper]{strayman} +\let\numberwithin=\notdef \usepackage{MnSymbol} \usepackage{stmaryrd} \usepackage{slashed} \usepackage{txfonts} -\usepackage{accents} -\begin{document} +\usepackage{amsfonts} +%\usepackage{accents} \renewcommand{\ge}{\geqslant} \renewcommand{\le}{\leqslant} @@ -19,7 +20,8 @@ \newcommand{\haspatch}{\Sqsupset} \newcommand{\patchisin}{\Sqsubset} -\newcommand{\pa}[1]{\mathbb #1} +\newcommand{\set}[1]{\mathbb #1} +\newcommand{\pa}[1]{\varmathbb #1} \newcommand{\pay}[1]{\pa{#1}^+} \newcommand{\pan}[1]{\pa{#1}^-} @@ -33,24 +35,42 @@ \newcommand{\hasparents}{>_{\mkern-7.0mu _1}} \newcommand{\areparents}{<_{\mkern-14.0mu _1\mkern+5.0mu}} -sponge -$ C \hasparents X $ -$ C > X $ -$ X \areparents C $ -$ X < C $ -$ D \isin C $ -$ A \sqsubseteq B $ -$ A \not \sqsubseteq B $ -$ A \nsqsubseteq B $ -$ A \le B $ -$ A \Sqsubset B $ -$ A \Sqsupset B $ -$ A \haspatch B $ -$ A \nothaspatch B $ -$ A \patchisin B $ -$ A \notpatchisin B $ -$ A \nothaspatch \pa{C} $ -$ A \nothaspatch \py $ -$ A \nothaspatch \p_C^+ $ -$ A \nothaspatch \pan{C} $ +\renewcommand{\implies}{\Rightarrow} + +\newcommand{\pancs}[2]{{\mathcal A} ( #1 , #2 ) } +\newcommand{\pends}[2]{{\mathcal E} ( #1 , #2 ) } + +\begin{document} + +\section{Notation} + +$ C \hasparents \set X $ The parents of commit $C$ are exactly the set +$\set X$. + +$ 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 $. + +$ 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. + +\section{Invariants} + +No replay: \[ C \has D \implies C \ge D \] + +Unique base: \[ \mathop{\forall}_{C \in \py} \pends{C}{\pn} = \{ B \} \] + +\section{Test more symbols} + +$ C \haspatch \p $ + +$ C \nothaspatch \p $ + +$ \{ B \} \areparents C $ + \end{document}