X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topbloke-formulae.git;a=blobdiff_plain;f=article.tex;h=4c7f22cbc50446b5a2997c39107e60932727085c;hp=674e5936f60fc6ae27161506b57b458b7517ccab;hb=0186895a1fa260b40e49b33d826e13226bbe0931;hpb=fe4881a01172df0a21e3951fc1f01e73f17c50cc diff --git a/article.tex b/article.tex index 674e593..4c7f22c 100644 --- a/article.tex +++ b/article.tex @@ -10,6 +10,8 @@ \renewcommand{\ge}{\geqslant} \renewcommand{\le}{\leqslant} +\newcommand{\nge}{\ngeqslant} +\newcommand{\nle}{\nleqslant} \newcommand{\has}{\sqsupseteq} \newcommand{\isin}{\sqsubseteq} @@ -53,11 +55,15 @@ \newcommand{\pancsof}[2]{\pancs ( #1 , #2 ) } \newcommand{\pendsof}[2]{\pends ( #1 , #2 ) } -\newcommand{\merge}[4]{{\mathcal M}(#1,#2,#3,#4)} +\newcommand{\merge}{{\mathcal M}} +\newcommand{\mergeof}[4]{\merge(#1,#2,#3,#4)} %\newcommand{\merge}[4]{{#2 {{\frac{ #1 }{ #3 } #4}}}} -\newcommand{\patchof}[1]{{\mathcal P} ( #1 ) } -\newcommand{\baseof}[1]{{\mathcal B} ( #1 ) } +\newcommand{\patch}{{\mathcal P}} +\newcommand{\base}{{\mathcal B}} + +\newcommand{\patchof}[1]{\patch ( #1 ) } +\newcommand{\baseof}[1]{\base ( #1 ) } \newcommand{\eqn}[2]{ #2 \tag*{\mbox{\bf #1}} } \newcommand{\corrolary}[1]{ #1 \tag*{\mbox{\it Corrolary.}} } @@ -149,7 +155,7 @@ 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[ $\displaystyle \merge{C}{L}{M}{R} $ ] +\item[ $\displaystyle \mergeof{C}{L}{M}{R} $ ] The contents of a git merge result: $\displaystyle D \isin C \equiv @@ -245,19 +251,26 @@ by the LHS. And $A \le A''$. \[ \eqn{Calculation Of Ends:}{ \bigforall_{C \hasparents \set A} \pendsof{C}{\set P} = - \Bigl\{ E \Big| + \left\{ E \Big| \Bigl[ \Largeexists_{A \in \set A} E \in \pendsof{A}{\set P} \Bigr] \land \Bigl[ \Largenexists_{B \in \set A} E \neq B \land E \le B \Bigr] - \Bigr\} + \right\} }\] XXX proof TBD. \subsection{No Replay for Merge Results} -If we are constructing $C$ such that $\merge{C}{L}{M}{R}$, No Replay -is preserved. {\it Proof:} +If we are constructing $C$, given +\gathbegin + \mergeof{C}{L}{M}{R} +\gathnext + L \le C +\gathnext + R \le C +\end{gather} +No Replay is preserved. {\it Proof:} \subsubsection{For $D=C$:} $D \isin C, D \le C$. OK. @@ -267,9 +280,6 @@ $D \isin C$. And $D \isin L \implies D \le L \implies D \le C$. OK. \subsubsection{For $D \neq C \land D \not\isin L \land D \not\isin R$:} $D \not\isin C$. OK. -\subsubsection{For $D \neq C \land D \not\isin L \land D \not\isin R$:} -$D \not\isin C$. OK. - \subsubsection{For $D \neq C \land (D \isin L \equiv D \not\isin R) \land D \not\isin M$:} $D \isin C$. Also $D \isin L \lor D \isin R$ so $D \le L \lor D \le @@ -277,8 +287,7 @@ R$ so $D \le C$. OK. \subsubsection{For $D \neq C \land (D \isin L \equiv D \not\isin R) \land D \isin M$:} -$D \not\isin C$. Also $D \isin L \lor D \isin R$ so $D \le L \lor D \le -R$ so $D \le C$. OK. +$D \not\isin C$. OK. $\qed$ @@ -383,7 +392,7 @@ $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$. +$R^+ \in \pry, R^- = \baseof{R^+}$. Construct $C$ which has $\pr$ removed. Used for removing a branch dependency. \gathbegin @@ -391,7 +400,7 @@ Used for removing a branch dependency. \gathnext \patchof{C} = \patchof{L} \gathnext - \merge{C}{L}{R^+}{R^-} + \mergeof{C}{L}{R^+}{R^-} \end{gather} \subsection{Conditions} @@ -399,16 +408,58 @@ Used for removing a branch dependency. \[ \eqn{ Unique Tip }{ \pendsof{L}{\pry} = \{ R^+ \} }\] -\[ \eqn{ Correct Base }{ - \baseof{R^+} = R^- -}\] \[ \eqn{ Currently Included }{ L \haspatch \pry }\] +\[ \eqn{ Not Self }{ + L \not\in \{ R^+ \} +}\] + +\subsection{No Replay} + +By Unique Tip, $R^+ \le L$. By definition of $\base$, $R^- \le R^+$ +so $R^- \le L$. So $R^+ \le C$ and $R^- \le C$ and No Replay for +Merge Results applies. $\qed$ + +\subsection{Desired Contents} + +\[ D \isin C \equiv [ D \notin \pry \land D \isin L ] \lor D = C \] +{\it Proof.} +\subsubsection{For $D = C$:} +Trivially $D \isin C$. OK. -xxx want to prove $D \isin C \equiv D \not\in \pry \land D \isin L$. +\subsubsection{For $D \neq C, D \not\le L$:} + +By No Replay $D \not\isin L$. Also $D \not\le R^-$ hence +$D \not\isin R^-$. Thus $D \not\isin C$. OK. + +\subsubsection{For $D \neq C, D \le L, D \in \pry$:} + +By Currently Included, $D \isin L$. + +By Tip Self Inpatch, $D \isin R^+ \equiv D \le R^+$, but by +by Unique Tip, $D \le R^+ \equiv D \le L$. +So $D \isin R^+$. + +By Base Acyclic, $D \not\isin R^-$. + +Apply $\merge$: $D \not\isin C$. OK. + +\subsubsection{For $D \neq C, D \le L, D \notin \pry$:} + +By Tip Contents for $R^+$, $D \isin R^+ \equiv D \isin R^-$. + +Apply $\merge$: $D \isin C \equiv D \isin L$. OK. + +$\qed$ + +\subsection{Unique Base} + +Need to consider only $C \in \py$, ie $L \in \py$. + +xxx tbd \section{Merge} @@ -418,7 +469,7 @@ Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$): \gathnext \patchof{C} = \patchof{L} \gathnext - \merge{C}{L}{M}{R} + \mergeof{C}{L}{M}{R} \end{gather} \subsection{Conditions} @@ -434,9 +485,9 @@ Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$): \end{cases} }\] -\subsection{Merge Results} +\subsection{No Replay} -As above. +See No Replay for Merge Results. \subsection{Unique Base}