chiark / gitweb /
anticommit conditions into conditions
[topbloke-formulae.git] / article.tex
index 7f55e4fea15e0ba20f05978cfe052a2f5dee1101..008229a17c249447403c8039618b8914ffc6f224 100644 (file)
@@ -252,6 +252,7 @@ $ \bigforall_{C \in \py}\bigforall_{D \in \py}
     ( \mathop{\hbox{\huge{$\vee$}}}_{R \in \set R} D \le R )
     \lor D = C
 }\]
+xxx proof tbd
 
 \[ \eqn{Transitive Ancestors:}{
   \left[ \bigforall_{ E \in \pendsof{C}{\set P} } E \le M \right] \equiv
@@ -270,17 +271,23 @@ 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} =
+      \begin{cases}
+       C \in \p : & \{ C \}
+      \\
+       C \not\in \p : & \displaystyle
        \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]
        \right\}
+      \end{cases}
 }\]
-XXX proof TBD.
+xxx proof tbd
 
 \subsection{No Replay for Merge Results}
 
@@ -327,10 +334,25 @@ We annotate each Topbloke commit $C$ with:
  \bigforall_{\pay{Q} \not\ni C} \pendsof{C}{\pay{Q}}
 \end{gather}
 
+$\patchof{C}$, for each kind of Topbloke-generated commit, is stated
+in the summary in the section for that kind of commit.
+
+Whether $\baseof{C}$ is required, and if so what the value is, is
+stated in the proof of Unique Base for each kind of commit.
+
+$C \haspatch \pa{Q}$ or $\nothaspatch \pa{Q}$ is represented as the
+set $\{ \pa{Q} | C \haspatch \pa{Q} \}$.  Whether $C \haspatch \pa{Q}$
+is in stated
+(in terms of $I \haspatch \pa{Q}$ or $I \nothaspatch \pa{Q}$
+for the ingredients $I$),
+in the proof of Coherence for each kind of commit.
+
+$\pendsof{C}{\pa{Q}^+}$ is computed, for all Topbloke-generated commits,
+using the lemma Calculation of Ends, above.
 We do not annotate $\pendsof{C}{\py}$ for $C \in \py$.  Doing so would
 make it wrong to make plain commits with git because the recorded $\pends$
-would have to be updated.  The annotation is not needed because
-$\forall_{\py \ni C} \; \pendsof{C}{\py} = \{C\}$.
+would have to be updated.  The annotation is not needed in that case
+because $\forall_{\py \ni C} \; \pendsof{C}{\py} = \{C\}$.
 
 \section{Simple commit}
 
@@ -347,7 +369,10 @@ Topbloke strips the metadata when exporting.
 Trivial.
 
 \subsection{Unique Base}
-If $A, C \in \py$ then $\baseof{C} = \baseof{A}$. $\qed$
+If $A, C \in \py$ then by Calculation of Ends for
+$C, \py, C \not\in \py$:
+$\pendsof{C}{\pn} = \pendsof{A}{\pn}$ so
+$\baseof{C} = \baseof{A}$. $\qed$
 
 \subsection{Tip Contents}
 We need to consider only $A, C \in \py$.  From Tip Contents for $A$:
@@ -374,7 +399,9 @@ Need to consider only $A, C \in \pn$.
 For $D = C$: $D \in \pn$ so $D \not\in \py$. OK.
 
 For $D \neq C$: $D \isin C \equiv D \isin A$, so by Base Acyclic for
-$A$, $D \isin C \implies D \not\in \py$. $\qed$
+$A$, $D \isin C \implies D \not\in \py$.
+
+$\qed$
 
 \subsection{Coherence and patch inclusion}
 
@@ -413,10 +440,17 @@ $\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{Create Base}
+
+xxx tbd
+
+\section{Create Tip}
+
+xxx tbd\
+
 \section{Anticommit}
 
-Given $L, R^+, R^-$ where
-$R^+ \in \pry, R^- = \baseof{R^+}$.  
+Given $L$ and $\pr$ as represented by $R^+, R^-$.
 Construct $C$ which has $\pr$ removed.
 Used for removing a branch dependency.
 \gathbegin
@@ -429,6 +463,9 @@ Used for removing a branch dependency.
 
 \subsection{Conditions}
 
+\[ \eqn{ Ingredients }{
+R^+ \in \pry \land R^- = \baseof{R^+}
+}\]
 \[ \eqn{ Into Base }{
  L \in \pn
 }\]
@@ -443,6 +480,10 @@ Used for removing a branch dependency.
 
 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$.
+$\qed$
+
+(Note that the merge base $R^+ \not\le R^-$, i.e. the merge base is
+later than one of the branches to be merged.)
 
 \subsection{No Replay}
 
@@ -517,6 +558,19 @@ So $L \nothaspatch \p \implies C \nothaspatch \p$.
 Whereas if $L \haspatch \p$, $D \isin L \equiv D \le L$.
 so $L \haspatch \p \implies C \haspatch \p$.
 
+$\qed$
+
+\section{Foreign Inclusion}
+
+Consider some $D$ s.t. $\patchof{D} = \bot$.  $D \neq C$.
+So by Desired Contents $D \isin C \equiv D \isin L$.
+By Foreign Inclusion of $D$ in $L$, $D \isin L \equiv D \le L$.
+
+And $D \le C \equiv D \le L$.
+Thus $D \isin C \equiv D \le C$.
+
+$\qed$
+
 \section{Merge}
 
 Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
@@ -574,7 +628,7 @@ Merge Ends condition applies.  Good.
 
 \subsection{No Replay}
 
-See No Replay for Merge Results.
+No Replay for Merge Results applies.  $\qed$
 
 \subsection{Unique Base}
 
@@ -693,7 +747,9 @@ $C \in \pn$ when $L \in \pn$ so by Merge Acyclic, $R \nothaspatch \p$.
 Consider some $D \in \py$.
 
 By Base Acyclic of $L$, $D \not\isin L$.  By the above, $D \not\isin
-R$.  And $D \neq C$.  So $D \not\isin C$.  $\qed$
+R$.  And $D \neq C$.  So $D \not\isin C$.
+
+$\qed$
 
 \subsection{Tip Contents}