chiark
/
gitweb
/
~ian
/
topbloke-formulae.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
clarifications and fixes from reread
[topbloke-formulae.git]
/
article.tex
diff --git
a/article.tex
b/article.tex
index 92e1f1010b77f5022f606af2de2a4842dcf9efd9..40c65188362c926e492f2b458331f1714e3b8069 100644
(file)
--- a/
article.tex
+++ b/
article.tex
@@
-12,6
+12,9
@@
\pagestyle{fancy}
\lhead[\rightmark]{}
\pagestyle{fancy}
\lhead[\rightmark]{}
+\let\stdsection\section
+\renewcommand\section{\newpage\stdsection}
+
\renewcommand{\ge}{\geqslant}
\renewcommand{\le}{\leqslant}
\newcommand{\nge}{\ngeqslant}
\renewcommand{\ge}{\geqslant}
\renewcommand{\le}{\leqslant}
\newcommand{\nge}{\ngeqslant}
@@
-130,7
+133,7
@@
A patch $\p$ consists of two sets of commits $\pn$ and $\py$, which
are respectively the base and tip git branches. $\p$ may be used
where the context requires a set, in which case the statement
is to be taken as applying to both $\py$ and $\pn$.
are respectively the base and tip git branches. $\p$ may be used
where the context requires a set, in which case the statement
is to be taken as applying to both $\py$ and $\pn$.
-
None of these sets overlap
. Hence:
+
All of these sets are disjoint
. Hence:
\item[ $ \patchof{ C } $ ]
Either $\p$ s.t. $ C \in \p $, or $\bot$.
\item[ $ \patchof{ C } $ ]
Either $\p$ s.t. $ C \in \p $, or $\bot$.
@@
-160,7
+163,7
@@
$\displaystyle \bigforall_{D \in \py} D \isin C \equiv D \le C $.
$\displaystyle \bigforall_{D \in \py} D \not\isin C $.
~ Informally, $C$ has none of the contents of $\p$.
$\displaystyle \bigforall_{D \in \py} D \not\isin C $.
~ Informally, $C$ has none of the contents of $\p$.
-
Non-Topbloke commit
s are $\nothaspatch \p$ for all $\p$. This
+
Commits on Non-Topbloke branche
s are $\nothaspatch \p$ for all $\p$. This
includes commits on plain git branches made by applying a Topbloke
patch. If a Topbloke
patch is applied to a non-Topbloke branch and then bubbles back to
includes commits on plain git branches made by applying a Topbloke
patch. If a Topbloke
patch is applied to a non-Topbloke branch and then bubbles back to
@@
-211,8
+214,8
@@
We maintain these each time we construct a new commit. \\
\section{Some lemmas}
\section{Some lemmas}
-\
[ \eqn{Alternative (overlapping) formulations defining
- $\mergeof{C}{L}{M}{R}$:}{
+\
subsection{Alternative (overlapping) formulations of $\mergeof{C}{L}{M}{R}$}
+$$
D \isin C \equiv
\begin{cases}
D \isin L \equiv D \isin R : & D = C \lor D \isin L \\
D \isin C \equiv
\begin{cases}
D \isin L \equiv D \isin R : & D = C \lor D \isin L \\
@@
-221,7
+224,7
@@
We maintain these each time we construct a new commit. \\
D \isin L \nequiv D \isin M : & D = C \lor D \isin L \\
\text{as above with L and R exchanged}
\end{cases}
D \isin L \nequiv D \isin M : & D = C \lor D \isin L \\
\text{as above with L and R exchanged}
\end{cases}
-}\]
+$$
\proof{ ~ Truth table (ordered by original definition): \\
\begin{tabular}{cccc|c|cc}
$D = C$ &
\proof{ ~ Truth table (ordered by original definition): \\
\begin{tabular}{cccc|c|cc}
$D = C$ &
@@
-243,11
+246,13
@@
We maintain these each time we construct a new commit. \\
And original definition is symmetrical in $L$ and $R$.
}
And original definition is symmetrical in $L$ and $R$.
}
-\[ \eqn{Exclusive Tip Contents:}{
+\subsection{Exclusive Tip Contents}
+Given Base Acyclic for $C$,
+$$
\bigforall_{C \in \py}
\neg \Bigl[ D \isin \baseof{C} \land ( D \in \py \land D \le C )
\Bigr]
\bigforall_{C \in \py}
\neg \Bigl[ D \isin \baseof{C} \land ( D \in \py \land D \le C )
\Bigr]
-}\]
+$$
Ie, the two limbs of the RHS of Tip Contents are mutually exclusive.
\proof{
Ie, the two limbs of the RHS of Tip Contents are mutually exclusive.
\proof{
@@
-262,9
+267,11
@@
So by Base Acyclic $D \isin B \implies D \notin \py$.
\end{cases}
}\]
\end{cases}
}\]
-\[ \eqn{Tip Self Inpatch:}{
+\subsection{Tip Self Inpatch}
+Given Exclusive Tip Contents and Base Acyclic for $C$,
+$$
\bigforall_{C \in \py} C \haspatch \p
\bigforall_{C \in \py} C \haspatch \p
-}\]
+$$
Ie, tip commits contain their own patch.
\proof{
Ie, tip commits contain their own patch.
\proof{
@@
-273,18
+280,22
@@
$ \bigforall_{C \in \py}\bigforall_{D \in \py}
D \isin C \equiv D \le C $
}
D \isin C \equiv D \le C $
}
-\[ \eqn{Exact Ancestors:}{
+\subsection{Exact Ancestors}
+$$
\bigforall_{ C \hasparents \set{R} }
\bigforall_{ C \hasparents \set{R} }
+ \left[
D \le C \equiv
( \mathop{\hbox{\huge{$\vee$}}}_{R \in \set R} D \le R )
\lor D = C
D \le C \equiv
( \mathop{\hbox{\huge{$\vee$}}}_{R \in \set R} D \le R )
\lor D = C
-}\]
+ \right]
+$$
\proof{ ~ Trivial.}
\proof{ ~ Trivial.}
-\[ \eqn{Transitive Ancestors:}{
+\subsection{Transitive Ancestors}
+$$
\left[ \bigforall_{ E \in \pendsof{C}{\set P} } E \le M \right] \equiv
\left[ \bigforall_{ A \in \pancsof{C}{\set P} } A \le M \right]
\left[ \bigforall_{ E \in \pendsof{C}{\set P} } E \le M \right] \equiv
\left[ \bigforall_{ A \in \pancsof{C}{\set P} } A \le M \right]
-}\]
+$$
\proof{
The implication from right to left is trivial because
\proof{
The implication from right to left is trivial because
@@
-299,7
+310,8
@@
commits, this terminates with $A'' \in \pends()$, ie $A'' \le M$
by the LHS. And $A \le A''$.
}
by the LHS. And $A \le A''$.
}
-\[ \eqn{Calculation Of Ends:}{
+\subsection{Calculation of Ends}
+$$
\bigforall_{C \hasparents \set A}
\pendsof{C}{\set P} =
\begin{cases}
\bigforall_{C \hasparents \set A}
\pendsof{C}{\set P} =
\begin{cases}
@@
-313,7
+325,7
@@
by the LHS. And $A \le A''$.
E \neq F \land E \le F \Bigr]
\right\}
\end{cases}
E \neq F \land E \le F \Bigr]
\right\}
\end{cases}
-}\]
+$$
\proof{
Trivial for $C \in \set P$. For $C \not\in \set P$,
$\pancsof{C}{\set P} = \bigcup_{A \in \set A} \pancsof{A}{\set P}$.
\proof{
Trivial for $C \in \set P$. For $C \not\in \set P$,
$\pancsof{C}{\set P} = \bigcup_{A \in \set A} \pancsof{A}{\set P}$.
@@
-325,19
+337,21
@@
an $F''$) which disqualifies $F$.
Otherwise, $E$ meets all the conditions for $\pends$.
}
Otherwise, $E$ meets all the conditions for $\pends$.
}
-\[ \eqn{Ingredients Prevent Replay:}{
+\subsection{Ingredients Prevent Replay}
+$$
\left[
{C \hasparents \set A} \land
\\
\left[
{C \hasparents \set A} \land
\\
+ \bigforall_{D}
\left(
\left(
- D \isin C \implies
+
D \isin C \implies
D = C \lor
\Largeexists_{A \in \set A} D \isin A
\right)
D = C \lor
\Largeexists_{A \in \set A} D \isin A
\right)
- \right] \implies \left[
+ \right] \implies \left[
\bigforall_{D}
D \isin C \implies D \le C
\right]
D \isin C \implies D \le C
\right]
-}\]
+$$
\proof{
Trivial for $D = C$. Consider some $D \neq C$, $D \isin C$.
By the preconditions, there is some $A$ s.t. $D \in \set A$
\proof{
Trivial for $D = C$. Consider some $D \neq C$, $D \isin C$.
By the preconditions, there is some $A$ s.t. $D \in \set A$
@@
-345,16
+359,19
@@
Otherwise, $E$ meets all the conditions for $\pends$.
$A \le C$ so $D \le C$.
}
$A \le C$ so $D \le C$.
}
-\[ \eqn{Simple Foreign Inclusion:}{
+\subsection{Simple Foreign Inclusion}
+$$
\left[
C \hasparents \{ L \}
\land
\bigforall_{D} D \isin C \equiv D \isin L \lor D = C
\right]
\implies
\left[
C \hasparents \{ L \}
\land
\bigforall_{D} D \isin C \equiv D \isin L \lor D = C
\right]
\implies
+ \left[
\bigforall_{D \text{ s.t. } \patchof{D} = \bot}
D \isin C \equiv D \le C
\bigforall_{D \text{ s.t. } \patchof{D} = \bot}
D \isin C \equiv D \le C
-}\]
+ \right]
+$$
\proof{
Consider some $D$ s.t. $\patchof{D} = \bot$.
If $D = C$, trivially true. For $D \neq C$,
\proof{
Consider some $D$ s.t. $\patchof{D} = \bot$.
If $D = C$, trivially true. For $D \neq C$,
@@
-363,19
+380,21
@@
And by Exact Ancestors $D \le L \equiv D \le C$.
So $D \isin C \equiv D \le C$.
}
So $D \isin C \equiv D \le C$.
}
-\
[ \eqn{Totally Foreign Contents:}{
- \bigforall_{C \hasparents \set A}
+\
subsection{Totally Foreign Contents}
+$$
\left[
\left[
+ C \hasparents \set A \land
\patchof{C} = \bot \land
\bigforall_{A \in \set A} \patchof{A} = \bot
\right]
\implies
\left[
\patchof{C} = \bot \land
\bigforall_{A \in \set A} \patchof{A} = \bot
\right]
\implies
\left[
+ \bigforall_{D}
D \le C
\implies
\patchof{D} = \bot
\right]
D \le C
\implies
\patchof{D} = \bot
\right]
-}\]
+$$
\proof{
Consider some $D \le C$. If $D = C$, $\patchof{D} = \bot$ trivially.
If $D \neq C$ then $D \le A$ where $A \in \set A$. By Foreign
\proof{
Consider some $D \le C$. If $D = C$, $\patchof{D} = \bot$ trivially.
If $D \neq C$ then $D \le A$ where $A \in \set A$. By Foreign
@@
-406,7
+425,7
@@
$C \haspatch \pq$ or $\nothaspatch \pq$ is represented as the
set $\{ \pq | C \haspatch \pq \}$. Whether $C \haspatch \pq$
is in stated
(in terms of $I \haspatch \pq$ or $I \nothaspatch \pq$
set $\{ \pq | C \haspatch \pq \}$. Whether $C \haspatch \pq$
is in stated
(in terms of $I \haspatch \pq$ or $I \nothaspatch \pq$
-for the ingredients $I$)
,
+for the ingredients $I$)
in the proof of Coherence for each kind of commit.
$\pendsof{C}{\pq^+}$ is computed, for all Topbloke-generated commits,
in the proof of Coherence for each kind of commit.
$\pendsof{C}{\pq^+}$ is computed, for all Topbloke-generated commits,
@@
-432,8
+451,7
@@
Topbloke strips the metadata when exporting.
Ingredients Prevent Replay applies. $\qed$
\subsection{Unique Base}
Ingredients Prevent Replay applies. $\qed$
\subsection{Unique Base}
-If $L, C \in \py$ then by Calculation of Ends for
-$C, \py, C \not\in \py$:
+If $L, C \in \py$ then by Calculation of Ends,
$\pendsof{C}{\pn} = \pendsof{L}{\pn}$ so
$\baseof{C} = \baseof{L}$. $\qed$
$\pendsof{C}{\pn} = \pendsof{L}{\pn}$ so
$\baseof{C} = \baseof{L}$. $\qed$
@@
-444,7
+462,7
@@
Substitute into the contents of $C$:
\[ D \isin C \equiv D \isin \baseof{L} \lor ( D \in \py \land D \le L )
\lor D = C \]
Since $D = C \implies D \in \py$,
\[ D \isin C \equiv D \isin \baseof{L} \lor ( D \in \py \land D \le L )
\lor D = C \]
Since $D = C \implies D \in \py$,
-and substituting in $\baseof{C}$, this gives:
+and substituting in $\baseof{C}$,
from Unique Base above,
this gives:
\[ D \isin C \equiv D \isin \baseof{C} \lor
(D \in \py \land D \le L) \lor
(D = C \land D \in \py) \]
\[ D \isin C \equiv D \isin \baseof{C} \lor
(D \in \py \land D \le L) \lor
(D = C \land D \in \py) \]
@@
-509,7
+527,8
@@
Foreign Contents applies. $\qed$
\section{Create Base}
\section{Create Base}
-Given $L$, create a Topbloke base branch initial commit $B$.
+Given a starting point $L$ and a proposed patch $\pq$,
+create a Topbloke base branch initial commit $B$.
\gathbegin
B \hasparents \{ L \}
\gathnext
\gathbegin
B \hasparents \{ L \}
\gathnext
@@
-520,11
+539,8
@@
Given $L$, create a Topbloke base branch initial commit $B$.
\subsection{Conditions}
\subsection{Conditions}
-\[ \eqn{ Ingredients }{
- \patchof{L} = \pa{L} \lor \patchof{L} = \bot
-}\]
\[ \eqn{ Create Acyclic }{
\[ \eqn{ Create Acyclic }{
- L \not\haspatch \pq
+ \pendsof{L}{\pqy} = \{ \}
}\]
\subsection{No Replay}
}\]
\subsection{No Replay}
@@
-542,12
+558,13
@@
Not applicable.
\subsection{Base Acyclic}
Consider some $D \isin B$. If $D = B$, $D \in \pqn$.
\subsection{Base Acyclic}
Consider some $D \isin B$. If $D = B$, $D \in \pqn$.
-If $D \neq B$, $D \isin L$, and by Create Acyclic
+If $D \neq B$, $D \isin L$, so by No Replay $D \le L$
+and by Create Acyclic
$D \not\in \pqy$. $\qed$
\subsection{Coherence and Patch Inclusion}
$D \not\in \pqy$. $\qed$
\subsection{Coherence and Patch Inclusion}
-Consider some $D \in \p$.
+Consider some $D \in \p
y
$.
$B \not\in \py$ so $D \neq B$. So $D \isin B \equiv D \isin L$
and $D \le B \equiv D \le L$.
$B \not\in \py$ so $D \neq B$. So $D \isin B \equiv D \isin L$
and $D \le B \equiv D \le L$.
@@
-566,7
+583,8
@@
Not applicable.
\section{Create Tip}
\section{Create Tip}
-Given a Topbloke base $B$, create a tip branch initial commit B.
+Given a Topbloke base $B$ for a patch $\pq$,
+create a tip branch initial commit B.
\gathbegin
C \hasparents \{ B \}
\gathnext
\gathbegin
C \hasparents \{ B \}
\gathnext
@@
-596,9
+614,10
@@
Trivially, $\pendsof{C}{\pqn} = \{B\}$ so $\baseof{C} = B$. $\qed$
Consider some arbitrary commit $D$. If $D = C$, trivially satisfied.
Consider some arbitrary commit $D$. If $D = C$, trivially satisfied.
-If $D \neq C$, $D \isin C \equiv D \isin B$.
+If $D \neq C$, $D \isin C \equiv D \isin B$,
+which by Unique Base, above, $ \equiv D \isin \baseof{B}$.
By Base Acyclic of $B$, $D \isin B \implies D \not\in \pqy$.
By Base Acyclic of $B$, $D \isin B \implies D \not\in \pqy$.
-So $D \isin C \equiv D \isin \baseof{B}$.
+
$\qed$
$\qed$
@@
-700,7
+719,7
@@
$D \not\isin R^-$. Thus $D \not\isin C$. OK.
By Currently Included, $D \isin L$.
By Currently Included, $D \isin L$.
-By Tip Self Inpatch, $D \isin R^+ \equiv D \le R^+$, but by
+By Tip Self Inpatch
for $R^+$
, $D \isin R^+ \equiv D \le R^+$, but by
by Unique Tip, $D \le R^+ \equiv D \le L$.
So $D \isin R^+$.
by Unique Tip, $D \le R^+ \equiv D \le L$.
So $D \isin R^+$.
@@
-830,7
+849,7
@@
And $Y \not\in \py$ so $\neg [ Y \haspatch \p ]$ so neither
Merge Ends condition applies.
So a plain git merge of non-Topbloke branches meets the conditions and
Merge Ends condition applies.
So a plain git merge of non-Topbloke branches meets the conditions and
-is therefore consistent with our
scheme
.
+is therefore consistent with our
model
.
\subsection{No Replay}
\subsection{No Replay}
@@
-880,7
+899,7
@@
This involves considering $D \in \py$.
\subsubsection{For $L \nothaspatch \p, R \nothaspatch \p$:}
$D \not\isin L \land D \not\isin R$. $C \not\in \py$ (otherwise $L
\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$.
+\in \py$ ie $L \haspatch \p$ by Tip Self Inpatch
for $L$
). So $D \neq C$.
Applying $\merge$ gives $D \not\isin C$ i.e. $C \nothaspatch \p$.
\subsubsection{For $L \haspatch \p, R \haspatch \p$:}
Applying $\merge$ gives $D \not\isin C$ i.e. $C \nothaspatch \p$.
\subsubsection{For $L \haspatch \p, R \haspatch \p$:}
@@
-924,7
+943,7
@@
various cases that $D \isin C \equiv M \nothaspatch \p \land D \le C$
(which suffices by definition of $\haspatch$ and $\nothaspatch$).
Consider $D = C$: Thus $C \in \py, L \in \py$, and by Tip
(which suffices by definition of $\haspatch$ and $\nothaspatch$).
Consider $D = C$: Thus $C \in \py, L \in \py$, and by Tip
-Self Inpatch $L \haspatch \p$, so $L=Y, R=X$. By Tip Merge,
+Self Inpatch
for $L$,
$L \haspatch \p$, so $L=Y, R=X$. By Tip Merge,
$M=\baseof{L}$. So by Base Acyclic $D \not\isin M$, i.e.
$M \nothaspatch \p$. And indeed $D \isin C$ and $D \le C$. OK.
$M=\baseof{L}$. So by Base Acyclic $D \not\isin M$, i.e.
$M \nothaspatch \p$. And indeed $D \isin C$ and $D \le C$. OK.