X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke-formulae.git;a=blobdiff_plain;f=article.tex;h=fde6e2f5cccd274528791679a0be616000352cca;hp=44647ffb2815e1cdf51b340ad1ad27ddacd47318;hb=139e1dd4dce6fcbc306dc4798f4cac017a0a4897;hpb=0441cd4ab4a06905f519c1b1338dad1118aadd4b diff --git a/article.tex b/article.tex index 44647ff..fde6e2f 100644 --- a/article.tex +++ b/article.tex @@ -32,6 +32,10 @@ \newcommand{\py}{\pay{P}} \newcommand{\pn}{\pan{P}} +\newcommand{\pr}{\pa{R}} +\newcommand{\pry}{\pay{R}} +\newcommand{\prn}{\pan{R}} + %\newcommand{\hasparents}{\underaccent{1}{>}} %\newcommand{\hasparents}{{% % \declareslashed{}{_{_1}}{0}{-0.8}{>}\slashed{>}}} @@ -45,9 +49,11 @@ \newcommand{\pancs}{{\mathcal A}} \newcommand{\pends}{{\mathcal E}} +\newcommand{\merge}{{\mathcal M}} \newcommand{\pancsof}[2]{\pancs ( #1 , #2 ) } \newcommand{\pendsof}[2]{\pends ( #1 , #2 ) } +\newcommand{\mergeof}[3]{\merge ( #1 , #2, #3 ) } \newcommand{\patchof}[1]{{\mathcal P} ( #1 ) } \newcommand{\baseof}[1]{{\mathcal B} ( #1 ) } @@ -142,6 +148,15 @@ 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. +\item[ $ \mergeof{L}{M}{R} $ ] +$\displaystyle \left\{ C \middle| + \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 + \end{cases} + \right\} $ + \end{basedescript} \newpage \section{Invariants} @@ -334,6 +349,29 @@ $\qed$ If $D = C$, trivial. For $D \neq C$: $D \isin C \equiv D \isin A \equiv D \le A \equiv D \le C$. $\qed$ +\section{Anticommit} + +Given $L, R^+, R^-$ where +$\patchof{R^+} = \pry, \patchof{R^-} = \prn$. +Construct $C$ which has $\pr$ removed. +Used for removing a branch dependency. +\gathbegin + C \hasparents \{ L \} +\gathnext + \patchof{C} = \patchof{L} +\gathnext + D \isin C \equiv + \begin{cases} + R \in \py : & \baseof{R} \ge \baseof{L} + \land [\baseof{L} = M \lor \baseof{L} = \baseof{M}] \\ + R \in \pn : & R \ge \baseof{L} + \land M = \baseof{L} \\ + \text{otherwise} : & \false + \end{cases} +\end{gather} + +xxx want to prove $D \isin C \equiv D \not\in pry \land D \isin L$. + \section{Merge} Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$): @@ -394,9 +432,9 @@ Need to consider only $C \in \py$, ie $L \in \py$, and calculate $\pendsof{C}{\pn}$. So we will consider some putative ancestor $A \in \pn$ and see whether $A \le C$. -$A \le C \equiv A \le L \lor A \le R \lor A = C$. +By Exact Ancestors for C, $A \le C \equiv A \le L \lor A \le R \lor A = C$. But $C \in py$ and $A \in \pn$ so $A \neq C$. -Thus $A \le L \lor A \le R$. +Thus $A \le C \equiv A \le L \lor A \le R$. By Unique Base of L and Transitive Ancestors, $A \le L \equiv A \le \baseof{L}$. @@ -408,32 +446,18 @@ $A \le R \equiv A \le \baseof{R}$. But by Tip Merge condition on $\baseof{R}$, $A \le \baseof{L} \implies A \le \baseof{R}$, so -$A \le \baseof{R} \lor A \le \baseof{R} \equiv A \le \baseof{R}$. -Thus $A \le C \equiv A \le \baseof{R}$. Ie, $\baseof{C} = -\baseof{R}$. - -UP TO HERE - -By Tip Merge, $A \le $ - -Let $S = - \begin{cases} - R \in \py : & \baseof{R} \\ - R \in \pn : & R - \end{cases}$. -Then by Tip Merge $S \ge \baseof{L}$, and $R \ge S$ so $C \ge S$. - -Consider some $A \in \pn$. If $A \le S$ then $A \le C$. -If $A \not\le S$ then +$A \le \baseof{R} \lor A \le \baseof{L} \equiv A \le \baseof{R}$. +Thus $A \le C \equiv A \le \baseof{R}$. +That is, $\baseof{C} = \baseof{R}$. -Let $A \in \pends{C}{\pn}$. -Then by Calculation Of Ends $A \in \pendsof{L,\pn} \lor A \in -\pendsof{R,\pn}$. +\subsubsection{For $R \in \pn$:} +By Tip Merge condition on $R$, +$A \le \baseof{L} \implies A \le R$, so +$A \le R \lor A \le \baseof{L} \equiv A \le R$. +Thus $A \le C \equiv A \le R$. +That is, $\baseof{C} = R$. - -%$\pends{C, - -%%\subsubsection{For $R \in \py$:} +$\qed$ \end{document}