Tratamento teórico por categoria de diferenças, patches e fusão?


14

Existe uma categoria de patches que se parece aproximadamente com isso:

  • Os objetos são cadeias de caracteres em algum alfabeto base
  • Os morfismos são scripts de edição ("diffs" ou "patches") entre as strings

Estou interessado nestas perguntas:

  • Existe uma noção categórica de script de edição mínima ? Talvez a categoria de patches seja enriquecida em Conjuntos de PO?
  • A fusão de patches é o pushout categórico?
  • Como generalizar isso de cadeias de caracteres para árvores (um sistema de arquivos ou um tipo de dados algébrico)?

1
Você vai querer ter um olhar para a teoria por trás do Darcs VCS
Bergi

1
... ou Pijul , uma tentativa relativamente recente de criar um "Darcs mais novo". (E até onde me lembro dessa palestra, mesclar é o pushout em uma "conclusão gratuita" da categoria diff ...).
phipsgabler 7/07/19

Respostas:


15

Conforme apontado por Martin , há alguns trabalhos sobre a representação categórica de patches. "Uma teoria categórica de patches", de Mimram e Di Giusto, sendo a abordagem categórica mais extensa para editar scripts, conforme usada pelo UNIX diff.

No sentido deles, você tem o que deseja. Os objetos são seqüências finitas de palavras sobre um alfabeto , visto como um mapeamento , onde denota o conjunto com elementos. Uma seta entre e é um mapeamento parcial injetivo crescente . A injetividade e o aumento estão presentes para indicar que as cópias nunca se cruzam . Você pode encontrar todos os detalhes no papel .euUMA:[n]eu[n]nUMA:[n]euB:[m]euf:[n][m]

Sim, a mesclagem é vista como o pushout no preenchimento gratuito da categoria acima. Precisamos do preenchimento para garantir que adicionemos conflitos de mesclagem à nossa construção. Não é o caso que uma mesclagem sempre exista.

Na sua segunda pergunta, não há noção categórica de script de edição mínima por dois motivos principais.

  1. Os scripts de edição vêm em todas as formas. Alguns autores consideram inserções, exclusões e cópias, alguns autores também gostam de adicionar substituições como uma operação. Quando você generaliza de seqüências de caracteres para árvores, então, uma infinidade de outras operações se torna viável.

  2. Mais importante, porém, os scripts de edição de custo mínimo não são exclusivos. Pegue o arquivo e escreva um patch que o transforme em . Qual é o script de edição mínima que faz isso? Existem dois! Mais uma vez, ao generalizar para as árvores, podemos encontrar ainda mais situações em que uma noção de "minimalidade" é duvidosa.umabbuma

Houve muito trabalho na generalização de scripts de edição para árvores. Isso foi dividido em dois corpos principais de trabalho:

  • Árvores sem tipo : pense apenas em expressões s. A distância de edição de árvore entre duas árvores é a distância de edição de cadeia entre o percurso de pré-encomenda das referidas árvores. Você pode conferir alguma bibliografia de Demaine et al. ou Pawlik e Augsten , por exemplo.

  • Árvores digitadas : Patches sobre árvores de sintaxe abstrata que garantem preservar a boa digitação do objeto, ou seja, a aplicação de um patch sempre produzirá um AST válido. Sob o guarda-chuva digitado, há menos operações de edição que se pode considerar. Substituição, por exemplo, não faz sentido. No entanto, existe uma divergência sobre a travessia de pré-encomenda das árvores por Lempsink et al. , que foi posteriormente prorrogado por Vassena . Atualmente, estou focando em abordagens que se distanciam dos scripts de edição para os mesmos problemas que apontei anteriormente, como nosso trabalho mais recente ou algum trabalho anterior que tenta tirar proveito da estrutura do tipo de valores "corrigidos".

Em nenhum desses casos, eu não vi uma interpretação categórica cuidadosa dos patches estruturados em árvore.


Resposta incrível! Mas por que não deveria haver noção categórica de scripts mínimos de edição apenas porque eles não são exclusivos? Os (co) limites também não são únicos, apenas até o isomorfismo.
Turion

Acho que poderíamos aceitar o preenchimento e incluir conflitos, ou apenas dizer que os pushouts nem sempre existem, e quando eles não existem, não há mesclagem?
Turion

1
UMABdiffUMABdiff3

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.