chiark / gitweb /
fix some headings
[topbloke-formulae.git] / article.tex
index 5b86fbc1ea74b068429236d2889686eac7e2b055..f69420fc071f170952b9e5a60ca9a60916658ec5 100644 (file)
@@ -196,6 +196,10 @@ We maintain these each time we construct a new commit. \\
 \[\eqn{Foreign Inclusion:}{
   \bigforall_{D \text{ s.t. } \patchof{D} = \bot} D \isin C \equiv D \leq C
 }\]
+\[\eqn{Foreign Contents:}{
+  \bigforall_{C \text{ s.t. } \patchof{C} = \bot}
+    D \le C \implies \patchof{D} = \bot
+}\]
 
 \section{Some lemmas}
 
@@ -289,6 +293,21 @@ by the LHS.  And $A \le A''$.
 }\]
 xxx proof tbd
 
+\[ \eqn{Totally Foreign Contents:}{
+  \bigforall_{C \hasparents \set A}
+   \left[
+    \patchof{C} = \bot \land
+      \bigforall_{A \in \set A} \patchof{A} = \bot
+   \right]
+  \implies
+   \left[
+    D \isin C
+   \implies
+    \patchof{D} = \bot
+   \right]
+}\]
+xxx proof tbd
+
 \subsection{No Replay for Merge Results}
 
 If we are constructing $C$, with,
@@ -440,18 +459,62 @@ $\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$
 
+\subsection{Foreign Contents:}
+
+Only relevant if $\patchof{C} = \bot$.  Trivial by Foreign Contents of
+$A$.  $\qed$
+
+xxx fixme not trivial use Totally Foreign Contents
+
 \section{Create Base}
 
-xxx tbd
+Given $L$, create a Topbloke base branch initial commit $B$.
+\gathbegin
+ B \hasparents \{ L \}
+\gathnext
+ \patchof{B} = \pa{B}
+\gathnext
+ D \isin B \equiv D \isin L \lor D = B
+\end{gather}
+
+\subsection{Conditions}
+
+\[ \eqn{ Ingredients }{
+ \patchof{L} = \pa{L} \lor \patchof{L} = \bot
+}\]
+\[ \eqn{ Non-recursion }{
+ L \not\in \pa{B}
+}\]
+
+\subsection{No Replay}
+
+If $\patchof{L} = \pa{L}$, trivial by Base Acyclic for $L$.
+
+If $\patchof{L} = \bot$, xxx
+
+Trivial from Base Acyclic for $L$.  $\qed$
+
+\subsection{Unique Base}
+
+Not applicable. $\qed$
+
+\subsection{Tip Contents}
+
+Not applicable. $\qed$
+
+\subsection{Base Acyclic}
+
+xxx
+
+xxx unfinished
 
 \section{Create Tip}
 
-xxx tbd\
+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
@@ -464,6 +527,9 @@ Used for removing a branch dependency.
 
 \subsection{Conditions}
 
+\[ \eqn{ Ingredients }{
+R^+ \in \pry \land R^- = \baseof{R^+}
+}\]
 \[ \eqn{ Into Base }{
  L \in \pn
 }\]
@@ -480,8 +546,8 @@ 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.)
+(Note that $R^+ \not\le R^-$, i.e. the merge base
+is a descendant, not an ancestor, of the 2nd parent.)
 
 \subsection{No Replay}
 
@@ -558,7 +624,7 @@ so $L \haspatch \p \implies C \haspatch \p$.
 
 $\qed$
 
-\section{Foreign Inclusion}
+\subsection{Foreign Inclusion}
 
 Consider some $D$ s.t. $\patchof{D} = \bot$.  $D \neq C$.
 So by Desired Contents $D \isin C \equiv D \isin L$.
@@ -569,9 +635,13 @@ Thus $D \isin C \equiv D \le C$.
 
 $\qed$
 
+\subsection{Foreign Contents}
+
+Not applicable. $\qed$
+
 \section{Merge}
 
-Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
+Merge commits $L$ and $R$ using merge base $M$:
 \gathbegin
  C \hasparents \{ L, R \}
 \gathnext
@@ -582,7 +652,9 @@ Merge commits $L$ and $R$ using merge base $M$ ($M < L, M < R$):
 We will occasionally use $X,Y$ s.t. $\{X,Y\} = \{L,R\}$.
 
 \subsection{Conditions}
-
+\[ \eqn{ Ingredients }{
+ M \le L, M \le R
+}\]
 \[ \eqn{ Tip Merge }{
  L \in \py \implies
    \begin{cases}
@@ -612,17 +684,24 @@ We will occasionally use $X,Y$ s.t. $\{X,Y\} = \{L,R\}$.
     \bigforall_{E \in \pendsof{X}{\py}} E \le Y
    \right]
 }\]
+\[ \eqn{ Foreign Merges }{
+    \patchof{L} = \bot \equiv \patchof{R} = \bot
+}\]
 
 \subsection{Non-Topbloke merges}
 
-We require both $\patchof{L} = \bot$ and $\patchof{R} = \bot$.
+We require both $\patchof{L} = \bot$ and $\patchof{R} = \bot$
+(Foreign Merges, above).
 I.e. not only is it forbidden to merge into a Topbloke-controlled
 branch without Topbloke's assistance, it is also forbidden to
 merge any Topbloke-controlled branch into any plain git branch.
 
 Given those conditions, Tip Merge and Merge Acyclic do not apply.
 And $Y \not\in \py$ so $\neg [ Y \haspatch \p ]$ so neither
-Merge Ends condition applies.  Good.
+Merge Ends condition applies.
+
+So a plain git merge of non-Topbloke branches meets the conditions and
+is therefore consistent with our scheme.
 
 \subsection{No Replay}
 
@@ -827,4 +906,11 @@ OK
 
 $\qed$
 
+\subsection{Foreign Contents}
+
+xxx use Totally Foreign Contents
+
+If $\patchof{C} = \bot$, by Foreign Merges
+$\patchof{L} = \patchof{R} = \bot$.
+
 \end{document}