Trattamento teorico di categoria di diff, patch e fusione?


14

Esiste una categoria di patch simile a questa:

  • Gli oggetti sono stringhe in qualche alfabeto di base
  • I morfismi sono script di modifica ("diff" o "patch") tra le stringhe

Sono interessato a queste domande:

  • Esiste una nozione categorica di script di modifica minimi ? Forse la categoria di patch è arricchita in PO-Set?
  • La fusione di patch è pushout categorico?
  • Come generalizzare questo dalle stringhe agli alberi (un file system o un tipo di dati algebrico)?

1
Avrai voglia di dare un'occhiata alla teoria alla base del Darcs VCS
Bergi,

1
... o Pijul , un tentativo relativamente recente di creare un "Darcs più recente". (E per quanto mi ricordo da quel discorso, la fusione è il pushout in un "completamento gratuito" della categoria diff ...).
phipsgabler

Risposte:


15

Come sottolineato da Martin , c'è qualche lavoro sulla rappresentazione categorica delle patch. "Una teoria categorica delle patch" di Mimram e Di Giusto è l'approccio categorico più esteso agli script di modifica utilizzati da UNIX diff.

Nel loro senso, hai quello che vuoi. Gli oggetti sono sequenze finite di parole su un alfabeto , visto come una mappatura , dove indica l'insieme con elementi. Una freccia tra e è una mappatura crescente parziale iniettiva . Iniettività e crescente sono lì per indicare che le copie non si incrociano mai . Puoi trovare tutti i dettagli sulla carta .LUN:[n]L[n]nUN:[n]LB:[m]Lf:[n][m]

Sì, l'unione è vista come il pushout sul completamento gratuito della categoria sopra. Abbiamo bisogno del completamento per assicurarci di aggiungere conflitti di unione alla nostra costruzione. Non esiste sempre una fusione.

Sulla seconda domanda, non esiste una nozione categorica di script di modifica minimi per due motivi principali.

  1. Gli script di modifica sono disponibili in tutte le forme e forme. Alcuni autori considerano inserimenti, cancellazioni e copie, ad alcuni autori piace aggiungere anche sostituzioni come un'operazione. Quando generalizzi dalle stringhe agli alberi, allora, una moltitudine di altre operazioni diventano fattibili.

  2. Ancora più importante, tuttavia, gli script di modifica a costo minimo non sono univoci. Prendi il file e scrivi una patch che lo trasforma in . Qual è lo script di modifica minimo che fa questo? Ci sono due! Ancora una volta, quando si generalizza in alberi si possono trovare ancora più situazioni in cui una nozione di "minimalità" è dubbia.un'BBun'

C'è stato molto lavoro sulla generalizzazione degli script di modifica sugli alberi. Questo è stato suddiviso in due principali corpi di lavoro:

  • Alberi non tipizzati : pensa solo alle espressioni s. La distanza di modifica degli alberi tra due alberi è la distanza di modifica delle stringhe tra l'attraversamento del preordine di detti alberi. Puoi consultare qualche bibliografia di Demaine et al. o Pawlik e Augsten , per esempio.

  • Alberi tipizzati : patch su alberi di sintassi astratti che sono garantiti per preservare la tipicità dell'oggetto, ovvero l'applicazione di un patch produrrà sempre un AST valido. Sotto l'ombrello tipizzato, ci sono meno operazioni di modifica che si possono considerare. La sostituzione, ad esempio, non ha senso. Tuttavia, esiste una differenza rispetto all'attraversamento degli alberi da parte di Lempsink et al. , che è stato successivamente esteso da Vassena . Attualmente mi sto concentrando su approcci che si allontanano dagli script di modifica per gli stessi problemi che ho indicato in precedenza, come il nostro ultimo lavoro o alcuni lavori precedenti che cercano di trarre vantaggio dalla struttura del tipo di valori "patchati".

In nessuno di questi casi non ho visto un'attenta interpretazione categorica delle patch strutturate ad albero.


Risposta fantastica! Ma perché non dovrebbe esserci una nozione categorica di script di modifica minimi solo perché non sono unici? I (co) limiti non sono neanche unici, solo fino all'isomorfismo.
Turion,

Immagino che potremmo prendere il complimento e includere conflitti, o semplicemente dire che i pushout non esistono sempre e quando non esistono non c'è unione?
Turion,

1
UNBdiffUNBdiff3

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.