chiark / gitweb /
wip experiment merge
[topbloke-formulae.git] / article.tex
index 4e114f280985d82f5c68d8ce1e2e639193cc560b..fde6e2f5cccd274528791679a0be616000352cca 100644 (file)
 \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{\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 $fixme this is not really the right thing 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}$.
@@ -409,33 +447,17 @@ $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{L} \equiv A \le \baseof{R}$.
-Thus $A \le C \equiv A \le \baseof{R}$.  Ie, $\baseof{C} =
-\baseof{R}$.
+Thus $A \le C \equiv A \le \baseof{R}$.  
+That is, $\baseof{C} = \baseof{R}$.
 
 \subsubsection{For $R \in \pn$:}
 
-UP TO HERE
+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$.
 
-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 
-
-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}