chiark / gitweb /
formatting fix
[topbloke-formulae.git] / article.tex
index 4c487f77c7b1d1c0099f37dc7d70116f5c29e4da..4c5f6751682c83a13e478fdb11d64496abd1bd22 100644 (file)
@@ -1,4 +1,5 @@
 \documentclass[a4paper,leqno]{strayman}
 \documentclass[a4paper,leqno]{strayman}
+\errorcontextlines=50
 \let\numberwithin=\notdef
 \usepackage{amsmath}
 \usepackage{mathabx}
 \let\numberwithin=\notdef
 \usepackage{amsmath}
 \usepackage{mathabx}
 \newcommand{\py}{\pay{P}}
 \newcommand{\pn}{\pan{P}}
 
 \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{>}}}
 %\newcommand{\hasparents}{\underaccent{1}{>}}
 %\newcommand{\hasparents}{{%
 %  \declareslashed{}{_{_1}}{0}{-0.8}{>}\slashed{>}}}
 \newcommand{\pancsof}[2]{\pancs ( #1 , #2 ) }
 \newcommand{\pendsof}[2]{\pends ( #1 , #2 ) }
 
 \newcommand{\pancsof}[2]{\pancs ( #1 , #2 ) }
 \newcommand{\pendsof}[2]{\pends ( #1 , #2 ) }
 
-\newcommand{\patchof}[1]{{\mathcal P} ( #1 ) }
-\newcommand{\baseof}[1]{{\mathcal B} ( #1 ) }
+\newcommand{\merge}[4]{{\mathcal M}(#1,#2,#3,#4)}
+%\newcommand{\merge}[4]{{#2 {{\frac{ #1 }{ #3 } #4}}}}
+
+\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.}} }
 
 \newcommand{\eqn}[2]{ #2 \tag*{\mbox{\bf #1}} }
 \newcommand{\corrolary}[1]{ #1 \tag*{\mbox{\it Corrolary.}} }
@@ -141,6 +152,17 @@ 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.
 
 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} $ ]
+The contents of a git merge result:
+
+$\displaystyle D \isin C \equiv
+  \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}
+$ 
+
 \end{basedescript}
 \newpage
 \section{Invariants}
 \end{basedescript}
 \newpage
 \section{Invariants}
@@ -226,15 +248,46 @@ by the LHS.  And $A \le A''$.
 \[ \eqn{Calculation Of Ends:}{
   \bigforall_{C \hasparents \set A}
     \pendsof{C}{\set P} =
 \[ \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]
            \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.
 
 }\]
 XXX proof TBD.
 
+\subsection{No Replay for Merge Results}
+
+If we are constructing $C$, given
+\gathbegin
+  \merge{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.
+
+\subsubsection{For $D \isin L \land D \isin R$:}
+$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 \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
+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$.  OK.
+
+$\qed$
+
 \section{Commit annotation}
 
 We annotate each Topbloke commit $C$ with:
 \section{Commit annotation}
 
 We annotate each Topbloke commit $C$ with:
@@ -333,6 +386,45 @@ $\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$
 
 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
+$R^+ \in \pry, R^- = \baseof{R^+}$.  
+Construct $C$ which has $\pr$ removed.
+Used for removing a branch dependency.
+\gathbegin
+ C \hasparents \{ L \}
+\gathnext
+ \patchof{C} = \patchof{L}
+\gathnext
+ \merge{C}{L}{R^+}{R^-}
+\end{gather}
+
+\subsection{Conditions}
+
+\[ \eqn{ Unique Tip }{
+ \pendsof{L}{\pry} = \{ R^+ \}
+}\]
+\[ \eqn{ Currently Included }{
+ L \haspatch \pry
+}\]
+
+\subsection{Desired Contents}
+
+xxx need to prove $D \isin C \equiv D \not\in \pry \land D \isin L$.
+
+\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{Unique Base}
+
+Need to consider only $C \in \py$, ie $L \in \py$.
+
+xxx tbd
+
 \section{Merge}
 
 Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
 \section{Merge}
 
 Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
@@ -341,12 +433,7 @@ Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
 \gathnext
  \patchof{C} = \patchof{L}
 \gathnext
 \gathnext
  \patchof{C} = \patchof{L}
 \gathnext
- D \isin C \equiv
-  \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}
+ \merge{C}{L}{M}{R}
 \end{gather}
 
 \subsection{Conditions}
 \end{gather}
 
 \subsection{Conditions}
@@ -364,28 +451,7 @@ Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
 
 \subsection{No Replay}
 
 
 \subsection{No Replay}
 
-\subsubsection{For $D=C$:} $D \isin C, D \le C$.  OK.
-
-\subsubsection{For $D \isin L \land D \isin R$:}
-$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
-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.
-
-$\qed$
+See No Replay for Merge Results.
 
 \subsection{Unique Base}
 
 
 \subsection{Unique Base}
 
@@ -393,9 +459,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$.
 
 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$.  
 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}$.
 
 By Unique Base of L and Transitive Ancestors,
 $A \le L \equiv A \le \baseof{L}$.
@@ -407,32 +473,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
 
 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
+$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}$.
 
 
-By Tip Merge, $A \le $
+\subsubsection{For $R \in \pn$:}
 
 
-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 
+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$.
 
 
-Let $A \in \pends{C}{\pn}$.  
-Then by Calculation Of Ends $A \in \pendsof{L,\pn} \lor A \in
-\pendsof{R,\pn}$.
-
-
-
-%$\pends{C,
-
-%%\subsubsection{For $R \in \py$:}
+$\qed$
 
 \end{document}
 
 \end{document}