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)?
ct.category-theory
edit-distance
Turion
fonte
fonte
Respostas:
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 .eu A : [ n ] → L [ n ] n A : [ n ] → L B : [ m ] → L f: [ 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.
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.
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.a b b a
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.
fonte
diff
diff3
Há bastante trabalho nessa direção. Você pode começar examinando [1, 2], mas eles não esgotam o tópico.
S. Mimram, C. Di Giusto, Uma Teoria Categórica de Patches .
C. Angiuli, E. Morehouse, DR Licata, R. Harper, Homotopical Patch Theory .
fonte