chiark / gitweb /
tiny clarification
[topbloke-formulae.git] / article.tex
index b71bb326c09fcf3eb8387c075b3f7ded903087b6..3db83bfeec3b23a2adf57dfe5548411873f4051b 100644 (file)
@@ -10,6 +10,8 @@
 
 \renewcommand{\ge}{\geqslant}
 \renewcommand{\le}{\leqslant}
+\newcommand{\nge}{\ngeqslant}
+\newcommand{\nle}{\nleqslant}
 
 \newcommand{\has}{\sqsupseteq}
 \newcommand{\isin}{\sqsubseteq}
@@ -53,7 +55,8 @@
 \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{\patch}{{\mathcal P}}
@@ -78,7 +81,8 @@
 \newcommand{\Largenexists}{\mathop{\hbox{\Large$\nexists$}}}
 
 \newcommand{\qed}{\square}
-\newcommand{\proof}[1]{{\it Proof.} #1 $\qed$}
+\newcommand{\proofstarts}{{\it Proof:}}
+\newcommand{\proof}[1]{\proofstarts #1 $\qed$}
 
 \newcommand{\gathbegin}{\begin{gather} \tag*{}}
 \newcommand{\gathnext}{\\ \tag*{}}
@@ -152,7 +156,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
@@ -259,15 +263,15 @@ XXX proof TBD.
 
 \subsection{No Replay for Merge Results}
 
-If we are constructing $C$, given
+If we are constructing $C$, with,
 \gathbegin
-  \merge{C}{L}{M}{R}
+  \mergeof{C}{L}{M}{R}
 \gathnext
   L \le C
 \gathnext
   R \le C
 \end{gather}
-No Replay is preserved.  {\it Proof:}
+No Replay is preserved.  \proofstarts
 
 \subsubsection{For $D=C$:} $D \isin C, D \le C$.  OK.
 
@@ -397,7 +401,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}
@@ -420,19 +424,37 @@ Merge Results applies. $\qed$
 
 \subsection{Desired Contents}
 
-\[ $D \isin C \equiv [ D \not\in \pry \land D \isin L$ ] \lor D = C \]
-{\it Proof.}
+\[ D \isin C \equiv [ D \notin \pry \land D \isin L ] \lor D = C \]
+\proofstarts
 
 \subsubsection{For $D = C$:}
 
 Trivially $D \isin C$.  OK.
 
-\subsubsection{For $D \not\le C$:}
+\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$:}
 
-\subsubsection{For $D \in R^+$:}
-By Currently Included, 
+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}
 
@@ -440,6 +462,8 @@ Need to consider only $C \in \py$, ie $L \in \py$.
 
 xxx tbd
 
+xxx need to finish anticommit
+
 \section{Merge}
 
 Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
@@ -448,7 +472,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}
@@ -502,4 +526,42 @@ That is, $\baseof{C} = R$.
 
 $\qed$
 
+\subsection{Coherence and patch inclusion}
+
+Need to determine $C \haspatch P$ based on $L,M,R \haspatch P$.
+This involves considering $D \in \py$.  
+
+We will use $X,Y$ s.t. $\{X,Y\} = \{L,R\}$.
+
+\subsubsection{For $L \nothaspatch P, R \nothaspatch P$:}
+$D \not\isin L \land D \not\isin R$.  $C \not\in \py$ (otherwise $L
+\in \py$ ie $L \haspatch P$ by Tip Self Inpatch).  So $D \neq C$.
+Applying $\merge$ gives $D \not\isin C$ i.e. $C \nothaspatch P$.
+
+\subsubsection{For $L \haspatch P, R \haspatch P$:}
+$D \isin L \equiv D \le L$ and $D \isin R \equiv D \le R$.
+(Likewise $D \isin X \equiv D \le X$ and $D \isin Y \equiv D \le Y$.)
+
+Consider $D = C$: $D \isin C$, $D \le C$, OK for $C \haspatch P$.
+
+For $D \neq C$: $D \le C \equiv D \le L \lor D \le R
+ \equiv D \isin L \lor D \isin R$.  
+(Likewise $D \le C \equiv D \le X \lor D \le Y$.)
+
+Consider $D \neq C, D \isin X \land D \isin Y$:
+By $\merge$, $D \isin C$.  Also $D \le X$ 
+so $D \le C$.  OK for $C \haspatch P$.
+
+Consider $D \neq C, D \not\isin X \land D \not\isin Y$:
+By $\merge$, $D \not\isin C$.  
+And $D \not\le X \land D \not\le Y$ so $D \not\le C$.  
+OK for $C \haspatch P$.
+
+Remaining case, wlog, is $D \not\isin X \land D \isin Y$.
+$D \not\le X$ so $D \not\le M$ so $D \not\isin M$.  
+Thus by $\merge$, $D \isin C$.  And $D \le Y$ so $D \le C$.
+OK for $C \haspatch P$.
+
+So indeed $L \haspatch P \land R \haspatch P \implies C \haspatch P$.
+
 \end{document}