From b49f4a4167ff535af48ccaba87e7ff8a02b77347 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 1 Mar 2012 03:42:01 +0000 Subject: [PATCH] fixes --- article.tex | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/article.tex b/article.tex index 992f0d4..4cb6c96 100644 --- a/article.tex +++ b/article.tex @@ -81,11 +81,11 @@ $ 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. +the user or reversion, rebasing or rewinding in +non-Topbloke-controlled branches. For merges and Topbloke-generated +anticommits or re-commits, 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 @@ -122,14 +122,16 @@ $\displaystyle \bigforall_{D \in \py} D \isin C \equiv D \le C $. $\displaystyle \bigforall_{D \in \py} D \not\isin C $. ~ Informally, $C$ has none of the contents of $\p$. -Non-Topbloke commits are $\nothaspatch \p$ for all $\p$; if -a patch is merged into a non-Topbloke branch and we inherit -it, we hope that git's merge algorithm will DTRT. +Non-Topbloke commits are $\nothaspatch \p$ for all $\p$; if a Topbloke +patch is applied to a non-Topbloke branch and then bubbles back to +the Topbloke patch itself, we hope that git's merge algorithm will +DTRT or that the user will no longer care about the Topbloke patch. \end{basedescript} - +\newpage \section{Invariants} +We maintain these each time we construct a new commit. \\ \[ \eqn{No Replay:}{ C \has D \implies C \ge D }\] @@ -147,13 +149,16 @@ it, we hope that git's merge algorithm will DTRT. \[\eqn{Coherence:}{ \bigforall_{C,\p} C \haspatch \p \lor C \nothaspatch \p }\] +\[\eqn{Foreign Inclusion:}{ + \bigforall_{D \text{ s.t. } \patchof{D} = \bot} D \isin C \equiv D \leq C +}\] \section{Some lemmas} \[ \eqn{Exclusive Tip Contents:}{ \bigforall_{C \in \py} - \neg \left[ D \isin \baseof{C} \land (D \in \py \land D \le C - \right )] + \neg \Bigl[ D \isin \baseof{C} \land ( D \in \py \land D \le C ) + \Bigr] }\] Ie, the two limbs of the RHS of Tip Contents are mutually exclusive. @@ -198,7 +203,8 @@ $ \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' $ +$A \le M$ by the LHS directly, +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 with $A'' \in \pends()$, ie $A'' \le M$ by the LHS. And $A \le A''$. @@ -215,10 +221,10 @@ We annotate each Topbloke commit $C$ with: \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$ +We do not annotate $\pendsof{C}{\py}$ for $C \in \py$. Doing so would +make it wrong to make 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\}$. +$\forall_{\py \ni C} \; \pendsof{C}{\py} = \{C\}$. \section{Test more symbols} -- 2.30.2