\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 ) }
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}
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$):
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}$.
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}