Esiste una teoria che combina teoria delle categorie / algebra astratta e complessità computazionale?


18

La teoria delle categorie e l'algebra astratta affrontano il modo in cui le funzioni possono essere combinate con altre funzioni. La teoria della complessità si occupa di quanto sia difficile calcolare una funzione. È strano per me che non ho visto nessuno combinare questi campi di studio, poiché sembrano coppie così naturali. Qualcuno l'ha già fatto?


Come esempio motivante, diamo un'occhiata ai monoidi. È noto che se un'operazione è un monoide, possiamo parallelizzare l'operazione.

Ad esempio in Haskell, possiamo banalmente definire che l'addizione è un monoide sugli interi come questo:

instance Monoid Int where
    mempty = 0
    mappend = (+)

Ora se vogliamo calcolare la somma da 0 a 999, potremmo farlo in sequenza come:

foldl1' (+) [0..999]

o potremmo farlo in parallelo

mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel

Ma parallelizzare questo monoide ha senso solo perché mappend viene eseguito a tempo costante. E se così non fosse? Gli elenchi, ad esempio, sono monoidi in cui mappend non esegue un tempo (o spazio) incostante. Immagino che questo sia il motivo per cui non esiste una funzione mconcat parallela predefinita in Haskell. La migliore implementazione dipende dalla complessità del monoide.


Sembra che ci dovrebbe essere un modo conveniente per descrivere le differenze tra questi due monoidi. Dovremmo quindi essere in grado di annotare il nostro codice con queste differenze e fare in modo che i programmi scelgano automaticamente i migliori algoritmi da utilizzare a seconda della complessità di un monoide.


1
Type Integer in Haskell è numeri interi a precisione multipla e la complessità temporale dell'addizione su di essi dipende naturalmente dalla lunghezza degli interi di input, quindi è fuorviante dire che mappend nella tua istanza Monoid per Integer viene eseguito a tempo costante.
Tsuyoshi Ito,

@TsuyoshiIto Hai ragione, intendevo usare l'Int. Fisso.
Mike Izbicki,

Hai visto questa domanda ?
Kaveh,

@Kaveh non l'ho fatto, grazie per il puntatore. Da una lettura veloce sembra che nessuno abbia svolto alcun lavoro teorico di categoria sulle classi di complessità (e c'è un dibattito su ciò che potrebbe anche significare o se è un obiettivo utile). Quindi penso che praticamente risponda alla prima parte della mia domanda e lasci qualsiasi interazione tra algebra e complessità.
Mike Izbicki,

Sono molte le interazioni tra l'algebra e la teoria della complessità. Ci sono anche libri intitolati "Teoria della complessità algebrica" ​​che usano e applicano concetti e tecniche algebrici alla complessità. E ci sono anche lavori estesi che applicano la teoria della complessità all'algebra. Devi essere più specifico per ottenere una risposta.
Kaveh,

Risposte:


12

[Complessità computazionale e teoria delle categorie] sembrano simili coppie naturali.

Data l'importanza della complessità computazionale come campo di ricerca, se fossero stati compagni di letto così naturali, forse qualcuno avrebbe già messo in luce la connessione?

Speculazione selvaggia. Vorrei intrattenere il lettore con pensieri sul perché una rappresentazione categorica della complessità computazionale è difficile. Probabilmente, il cluster di concetti chiave nella teoria delle categorie è incentrato su costruzioni / proprietà universali (con l'apparato associato di funzioni, trasformazioni naturali, aggiunte e così via). Se possiamo dimostrare che una costruzione matematica ha una proprietà universale, ciò fornisce molte intuizioni. Quindi, se volessimo un approccio categorico alla complessità computazionale, avremmo bisogno di trovare una categoria conveniente ed esibire come concetti chiave della teoria della complessità (ad esempio LOGSPACE o durezza NP) possano essere dati da costruzioni universali usando quella categoria. Questo non è ancora stato fatto, e penso che sia perché è un problema davvero difficile.

T=T1T2T3Tio,1 . Invece, costruiamo TM specificando i loro due componenti separatamente: il controllo (un FSM) e il nastro. Né il controllo né il nastro hanno buone algebre.

Diamo prima un'occhiata ai nastri. Esistono un paio di modi naturali per comporre nastri, nessuno dei quali sembra funzionare per una descrizione compositiva delle TM.

  • Incollali insieme come un'aggiunta ordinale. Questa non è la nozione giusta, perché i nastri sono infiniti e incollandoli come un'aggiunta ordinale otteniamo un doppio oggetto infinito che va al di là della computabilità finita, portando a un calcolo / ipercomputazione infiniti, che sono interessanti come matematici ma non corrispondono a calcolo fattibile.

  • Attaccali in parallelo , ad esempio due macchine a 3 teste si trasformano in una macchina a 6 teste. Questo non ci dice in che modo le macchine componenti interagiscono tra loro.

  • Nastri interleave. Un problema con questo approccio è che non è chiaro quale possa essere l'eventuale intercettazione canonica. Inoltre, l'interleaving "confonderà" il controllo esistente, che tende ad essere finemente regolato verso uno specifico layout di nastro. Quindi non possiamo riutilizzare direttamente il controllo.

π

Tutto sommato, siamo abbastanza lontani da un sostanziale trattamento algebrico / categorico della complessità computazionale e avremmo bisogno di diversi progressi concettuali per arrivarci.


λπλπαλπ


Direi che la composizione delle macchine di Turing è abbastanza chiara quando le consideri come programmi informatici astratti. Il modo naturale di comporre i programmi è chiamarne uno come sottoprogramma di un altro. Più in generale, ogni programma è calcolabile in funzione spazio e tempo finiti che accetta determinati input formattati e genera un'altra stringa formattata, che può essere inserita in un'altra funzione. È possibile che alcuni input di immondizia provochino output di immondizia o che alcune funzioni non vengano eseguite nel tempo e nello spazio assegnati, nel qual caso l'intero programma si arresta in modo anomalo.
Anton Fetisov,

Ovviamente non tutti i programmi sono componibili in questo modo, il che naturalmente ci porta a una categoria di TM. È anche probabile che si debba abbandonare l'idea di una TM illimitata nello spazio-tempo, che in ogni caso non è praticamente fattibile. C'è qualche nozione pubblicata che cattura questa struttura?
Anton Fetisov,

@AntonFetisov Hai provato a scrivere i dettagli? Non è carino.
Martin Berger,

2

Questa risposta sugli isomorfismi tra linguaggi formali combina risultati algebrici dalla teoria dei codici con nozioni della teoria delle categorie per studiare possibili nozioni di equivalenza e isomorfismo tra linguaggi formali e classi di complessità.

La mia interpretazione di questi risultati è che i punti di sincronizzazione nelle parole sono diversi per i trasduttori deterministici e non ambigui non deterministici, e persino diversi tra i trasduttori deterministici in avanti e deterministici all'indietro. Prendere questa prospettiva dei punti di sincronizzazione consente di collegare questi risultati a linguaggi pushdown visibilmente e solleva la questione se quelli debbano considerare anche semplici separatori (come uno spazio o una virgola) oltre a chiamate e ritorni. (La mia ipotesi è che un separatore potrebbe essere emulato da una combinazione return + call, ma poiché quelli richiedono due simboli anziché uno, non mi è chiaro se questo sia sufficiente. Potrebbero esserci anche lingue visibilmente che hanno solo separatori, ma no chiamare o restituire simboli.)


Ho reso questo un wiki della comunità, perché si collega alla mia risposta alla mia domanda, che non è certo eccezionale. Stavo "pulendo" i miei preferiti, e scrivere questa breve risposta era il modo più semplice per procedere.
Thomas Klimpel,
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.