[darcs-devel] clean merge and pushouts in a groupoid
Ben Franksen
ben.franksen at online.de
Sun Sep 8 10:07:40 UTC 2019
I am struggling with the following quite elementary problem in applied
category theory.
In order to give a full specification of the clean merge of two patch
sequences, I want to express that the result of the clean merge is
"minimal"; in particular, it should not contain any common patches.
Inspired by the idea of the paper that laid the groundwork for Pijul, I
thought this could be formulated abstractly by requiring that
cleanMerge, if it succeeds, is a pushout: if cleanMerge (p:\/:q) = Just
(q':/\:p'), where (p:>q'), (q:>p') :: p wX wY, then for any other pair
(q'':/\:p'') with (p:>q''), (q:>p'') :: p wX wZ, there is a unique r ::
p wY wZ such that
p'' = p';r and q'' = q';r
i.e. the following diagram commutes:
Z
/|\
/ | \
/ r \
| | |
q'' | p''
| Y |
| / \ |
| q' p'|
|/ \|
o o
\ /
p\ /q
\ /
X
The underlying category here is that of patch sequences, where we
identify all sequences that differ only by re-ordering patches and
insertion or removal of inverse pairs.
Now, this is not only a category, it is a groupoid, i.e. we can invert
any patch or patch sequence. And it seems to me that this means the
above requirement is vacuous: we can rename p' <-> p'', q' <-> q'' and
Y <-> Z, and it would still be commuting if we replace r <-> r^. And
that means /any/ pair with matching types is a pushout and the
requirement of clean merge being a pushout is useless. Indeed the whole
concept of pushout (or pullback) doesn't seem to make much sense in a
groupoid.
I am quite confused about this and would appreciate any kind of comment.
More information about the darcs-devel
mailing list