X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=article.tex;h=b4035ddf35da3ad1c234a2b42f684784d3fd3485;hb=3064ca6a757bfdabbc11f78e579dae2f36146bf4;hp=50fc96c526c2153a95b57546a828beedfec2e297;hpb=21742f0a238a9a7d9c55666a6bd338626ea2cc79;p=topbloke-formulae.git diff --git a/article.tex b/article.tex index 50fc96c..b4035dd 100644 --- a/article.tex +++ b/article.tex @@ -34,6 +34,10 @@ \newcommand{\py}{\pay{P}} \newcommand{\pn}{\pan{P}} +\newcommand{\pq}{\pa{Q}} +\newcommand{\pqy}{\pay{Q}} +\newcommand{\pqn}{\pan{Q}} + \newcommand{\pr}{\pa{R}} \newcommand{\pry}{\pay{R}} \newcommand{\prn}{\pan{R}} @@ -313,6 +317,24 @@ xxx proof tbd $A \le C$ so $D \le C$. } +\[ \eqn{Simple Foreign Inclusion:}{ + \left[ + C \hasparents \{ L \} + \land + \bigforall_{D} D \isin C \equiv D \isin L \lor D = C + \right] + \implies + \bigforall_{D \text{ s.t. } \patchof{D} = \bot} + D \isin C \equiv D \le C +}\] +\proof{ +Consider some $D$ s.t. $\patchof{D} = \bot$. +If $D = C$, trivially true. For $D \neq C$, +by Foreign Inclusion of $D$ in $L$, $D \isin L \equiv D \le L$. +And by Exact Ancestors $D \le L \equiv D \le C$. +So $D \isin C \equiv D \le C$. +} + \[ \eqn{Totally Foreign Contents:}{ \bigforall_{C \hasparents \set A} \left[ @@ -340,10 +362,10 @@ We annotate each Topbloke commit $C$ with: \gathnext \baseof{C}, \text{ if } C \in \py \gathnext - \bigforall_{\pa{Q}} - \text{ either } C \haspatch \pa{Q} \text{ or } C \nothaspatch \pa{Q} + \bigforall_{\pq} + \text{ either } C \haspatch \pq \text{ or } C \nothaspatch \pq \gathnext - \bigforall_{\pay{Q} \not\ni C} \pendsof{C}{\pay{Q}} + \bigforall_{\pqy \not\ni C} \pendsof{C}{\pqy} \end{gather} $\patchof{C}$, for each kind of Topbloke-generated commit, is stated @@ -352,14 +374,14 @@ 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}$ +$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 \pa{Q}$ or $I \nothaspatch \pa{Q}$ +(in terms of $I \haspatch \pq$ or $I \nothaspatch \pq$ 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, +$\pendsof{C}{\pq^+}$ 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$ @@ -448,10 +470,9 @@ So: \[ A \nothaspatch P \implies C \nothaspatch P \] $\qed$ -\subsection{Foreign inclusion:} +\subsection{Foreign Inclusion:} -If $D = C$, trivial. For $D \neq C$: -$D \isin C \equiv D \isin A \equiv D \le A \equiv D \le C$. $\qed$ +Simple Foreign Inclusion applies. $\qed$ \subsection{Foreign Contents:} @@ -464,7 +485,7 @@ Given $L$, create a Topbloke base branch initial commit $B$. \gathbegin B \hasparents \{ L \} \gathnext - \patchof{B} = \pan{Q} + \patchof{B} = \pqn \gathnext D \isin B \equiv D \isin L \lor D = B \end{gather} @@ -474,8 +495,8 @@ Given $L$, create a Topbloke base branch initial commit $B$. \[ \eqn{ Ingredients }{ \patchof{L} = \pa{L} \lor \patchof{L} = \bot }\] -\[ \eqn{ Non-recursion }{ - L \not\in \pa{Q} +\[ \eqn{ Create Acyclic }{ + L \not\haspatch \pq }\] \subsection{No Replay} @@ -492,19 +513,15 @@ Not applicable. \subsection{Base Acyclic} -Consider some $D \isin B$. If $D = B$, $D \in \pn$, OK. - -If $D \neq B$, $D \isin L$. By No Replay of $D$ in $L$, $D \le L$. -Thus by Foreign Contents of $L$, $\patchof{D} = \bot$. OK. - -xxx this is wrong - -$\qed$ +Consider some $D \isin B$. If $D = B$, $D \in \pqn$. +If $D \neq B$, $D \isin L$, and by Create Acyclic +$D \not\in \pqy$. $\qed$ \subsection{Coherence and Patch Inclusion} Consider some $D \in \p$. -$B \not\in \py$ so $D \neq B$. So $D \isin B \equiv D \isin 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$. Thus $L \haspatch \p \implies B \haspatch P$ and $L \nothaspatch \p \implies B \nothaspatch P$. @@ -513,11 +530,7 @@ $\qed$. \subsection{Foreign Inclusion} -Consider some $D$ s.t. $\patchof{D} = \bot$. $D \neq B$ -so $D \isin B \equiv D \isin L$. -By Foreign Inclusion of $D$ in $L$, $D \isin L \equiv D \le L$. -And by Exact Ancestors $D \le L \equiv D \le B$. -So $D \isin B \equiv D \le B$. $\qed$ +Simple Foreign Inclusion applies. $\qed$ \subsection{Foreign Contents} @@ -525,7 +538,71 @@ Not applicable. \section{Create Tip} -xxx tbd +Given a Topbloke base $B$, create a tip branch initial commit B. +\gathbegin + C \hasparents \{ B \} +\gathnext + \patchof{B} = \pqy +\gathnext + D \isin C \equiv D \isin B \lor D = C +\end{gather} + +\subsection{Conditions} + +\[ \eqn{ Ingredients }{ + \patchof{B} = \pqn +}\] +\[ \eqn{ No Sneak }{ + \pendsof{B}{\pqy} = \{ \} +}\] + +\subsection{No Replay} + +Ingredients Prevent Replay applies. $\qed$ + +\subsection{Unique Base} + +Trivially, $\pendsof{C}{\pqn} = \{B\}$ so $\baseof{C} = B$. $\qed$ + +\subsection{Tip Contents} + +Consider some arbitrary commit $D$. If $D = C$, trivially satisfied. + +If $D \neq C$, $D \isin C \equiv D \isin B$. +By Base Acyclic of $B$, $D \isin B \implies D \not\in \pqy$. +So $D \isin C \equiv D \isin \baseof{B}$. + +$\qed$ + +\subsection{Base Acyclic} + +Not applicable. + +\subsection{Coherence and Patch Inclusion} + +$$ +\begin{cases} + \p = \pq \lor B \haspatch \p : & C \haspatch \p \\ + \p \neq \pq \land B \nothaspatch \p : & C \nothaspatch \p +\end{cases} +$$ + +\proofstarts +~ Consider some $D \in \py$. + +\subsubsection{For $\p = \pq$:} + +By Base Acyclic, $D \not\isin B$. So $D \isin C \equiv D = C$. +By No Sneak, $D \le B \equiv D = C$. Thus $C \haspatch \pq$. + +\subsubsection{For $\p \neq \pq$:} + +$D \neq C$. So $D \isin C \equiv D \isin B$, +and $D \le C \equiv D \le B$. + +$\qed$ + +xxx up to here \section{Anticommit}