From 456d92924b93b80e43c32b9a5046b5a47600be2d Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 1 Mar 2012 03:22:24 +0000 Subject: [PATCH] ends, work, etc. --- article.tex | 58 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/article.tex b/article.tex index 9ca8012..992f0d4 100644 --- a/article.tex +++ b/article.tex @@ -38,8 +38,11 @@ \renewcommand{\land}{\wedge} \renewcommand{\lor}{\vee} -\newcommand{\pancs}[2]{{\mathcal A} ( #1 , #2 ) } -\newcommand{\pends}[2]{{\mathcal E} ( #1 , #2 ) } +\newcommand{\pancs}{{\mathcal A}} +\newcommand{\pends}{{\mathcal E}} + +\newcommand{\pancsof}[2]{\pancs ( #1 , #2 ) } +\newcommand{\pendsof}[2]{\pends ( #1 , #2 ) } \newcommand{\patchof}[1]{{\mathcal P} ( #1 ) } \newcommand{\baseof}[1]{{\mathcal B} ( #1 ) } @@ -93,21 +96,21 @@ All these sets are distinct. Hence: \item[ $ \patchof{ C } $ ] Either $\p$ s.t. $ C \in \p $, or $\bot$. -A function from commits to sets $\p$. +A function from commits to patches' sets $\p$. -\item[ $ \pancs{C}{\set P} $ ] +\item[ $ \pancsof{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}} +\item[ $ \pendsof{C}{\set P} $ ] +$ \{ E \; | \; E \in \pancsof{C}{\set P} + \land \mathop{\not\exists}_{A \in \pancsof{C}{\set P}} A \neq E \land E \le A \} $ -i.e. all $\le$-maximal commits in $\pancs{C}{\set P}$. +i.e. all $\le$-maximal commits in $\pancsof{C}{\set P}$. \item[ $ \baseof{C} $ ] -$ \pends{C}{\pn} = \{ \baseof{C} \} $ where $ C \in \py $. +$ \pendsof{C}{\pn} = \{ \baseof{C} \} $ where $ C \in \py $. A partial function from commits to commits. See ``unique base'', below. @@ -131,7 +134,7 @@ it, we hope that git's merge algorithm will DTRT. C \has D \implies C \ge D }\] \[\eqn{Unique Base:}{ - \bigforall_{C \in \py} \pends{C}{\pn} = \{ B \} + \bigforall_{C \in \py} \pendsof{C}{\pn} = \{ B \} }\] \[\eqn{Tip Contents:}{ \bigforall_{C \in \py} D \isin C \equiv @@ -141,6 +144,9 @@ it, we hope that git's merge algorithm will DTRT. \[\eqn{Base Acyclic:}{ \bigforall_{B \in \pn} D \isin B \implies D \notin \py }\] +\[\eqn{Coherence:}{ + \bigforall_{C,\p} C \haspatch \p \lor C \nothaspatch \p +}\] \section{Some lemmas} @@ -182,18 +188,38 @@ $ \bigforall_{C \in \py}\bigforall_{D \in \py} }\] \[ \eqn{Transitive Ancestors:}{ - \left[ \bigforall_{ E \in \pends{C}{\set P} } E \le C \right] \implies - \left[ \bigforall_{ A \in \pancs{C}{\set P} } A \le C \right] + \left[ \bigforall_{ E \in \pendsof{C}{\set P} } E \le M \right] \equiv + \left[ \bigforall_{ A \in \pancsof{C}{\set P} } A \le M \right] }\] \proof{ -By the definition of $\mathcal E$, -for every such $A$, either $A \in \pends{C}{\set P}$ which implies -$A \le C$, or $\exists_{A' \in \pancs{C}{\set P}} \; A' \neq A \land A \le C $ +The implication from right to left is trivial because +$ \pends() \subset \pancs() $. +For the implication from left to right: +by the definition of $\mathcal E$, +for every such $A$, either $A \in \pends()$ which implies +$A \le C$, or $\exists_{A' \in \pancs()} \; A' \neq A \land A \le A' $ in which case we repeat for $A'$. Since there are finitely many -commits, this terminates. +commits, this terminates with $A'' \in \pends()$, ie $A'' \le M$ +by the LHS. And $A \le A''$. } +\section{Commit annotation} + +We annotate each Topbloke commit $C$ with: +\begin{gather} +\tag*{} \patchof{C} \\ +\tag*{} \baseof{C}, \text{ if } C \in \py \\ +\tag*{} \bigforall_{\pa{Q}} + \text{ either } C \haspatch \pa{Q} \text{ or } C \nothaspatch \pa{Q} \\ +\tag*{} \bigforall_{\pay{Q} \not\ni C} \pendsof{C}{\pay{Q}} +\end{gather} + +We do not annotate $\pendsof{C}{\py}$ for $C \in \py$ doing so would +break making plain commits with git because the recorded $\pends$ +would have to be updated. The annotation is not needed because +$\forall_{\py \ni C} \pendsof{C}{\py} = \{C\}$. + \section{Test more symbols} $ C \haspatch \p $ -- 2.30.2