chiark / gitweb /
wip anticommit
[topbloke-formulae.git] / article.tex
index 642190f9f823431a058f3aa1b5793bc3f1751396..01800f96132a69fb7a89ab4e9e6ab9d0a82e9519 100644 (file)
@@ -1,4 +1,5 @@
 \documentclass[a4paper,leqno]{strayman}
+\errorcontextlines=50
 \let\numberwithin=\notdef
 \usepackage{amsmath}
 \usepackage{mathabx}
 \newcommand{\haspatch}{\sqSupset}
 \newcommand{\patchisin}{\sqSubset}
 
-\newcommand{\set}[1]{\mathbb #1}
-\newcommand{\pa}[1]{\varmathbb #1}
+        \newif\ifhidehack\hidehackfalse
+        \DeclareRobustCommand\hidefromedef[2]{%
+          \hidehacktrue\ifhidehack#1\else#2\fi\hidehackfalse}
+        \newcommand{\pa}[1]{\hidefromedef{\varmathbb{#1}}{#1}}
+
+\newcommand{\set}[1]{\mathbb{#1}}
 \newcommand{\pay}[1]{\pa{#1}^+}
 \newcommand{\pan}[1]{\pa{#1}^-}
 
 \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{>}}}
@@ -219,6 +228,17 @@ in which case we repeat for $A'$.  Since there are finitely many
 commits, this terminates with $A'' \in \pends()$, ie $A'' \le M$
 by the LHS.  And $A \le A''$.
 }
+\[ \eqn{Calculation Of Ends:}{
+  \bigforall_{C \hasparents \set A}
+    \pendsof{C}{\set P} =
+       \Bigl\{ 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\}
+}\]
+XXX proof TBD.
 
 \section{Commit annotation}
 
@@ -318,6 +338,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$):
@@ -372,4 +415,38 @@ R$ so $D \le C$.  OK.
 
 $\qed$
 
+\subsection{Unique Base}
+
+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$.
+
+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 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}$.
+
+\subsubsection{For $R \in \py$:}
+
+By Unique Base of $R$ and Transitive Ancestors,
+$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}$.  
+That is, $\baseof{C} = \baseof{R}$.
+
+\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$.
+
+$\qed$
+
 \end{document}