La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linguaggi per la descrizione di classi di complessità computazionale (orologi, smash, punto e virgola, circoli) Centro Interdipartimentale di Logica e.

Presentazioni simili


Presentazione sul tema: "Linguaggi per la descrizione di classi di complessità computazionale (orologi, smash, punto e virgola, circoli) Centro Interdipartimentale di Logica e."— Transcript della presentazione:

1 Linguaggi per la descrizione di classi di complessità computazionale (orologi, smash, punto e virgola, circoli) Centro Interdipartimentale di Logica e Applicazioni Dicembre 2003 che catturano

2 4 possiamo descrivere le classi con linguaggi, piuttosto che con modelli di calcolo? classi di complessità computazionale modelli di calcolo (macchina di Turing) + limiti espliciti sulle risorse temporali o spaziali. 4 esiste un principio comune a tutte le restrizioni? 4 quali restrizioni dobbiamo imporre ai linguaggi?

3 4 indipendenza da algoritmo e modello 4 analisi metamatematica: proof systems, struttura delle dimostrazioni e adeguatezza dei sistemi 4 analisi metanumerica: sistemi computazionali e categorie di macchine 4 complessità computazionale classi di funzioni Alan Cobham The intrinsic computational difficulty of functions is it harder to multiply than to add? Ma quale classe di funzioni??

4 A. Grzegorczyk Some classes of recursive functions E 0 = x+y E 1 = x*y E 2 = x y E 3 = x x...x (x volte) E 3 = x x...x (x x...x volte) … la candidata potrebbe essere la gerarchia di Grzegorczyk! E i = PR E 0 E 1 E 2 E 3... ottenuta come chisura rispetto a composizione e ricorsione limitata

5 f

6 f(x) = h(g(x), …,g(x)) 0,i k,s,2 |x||y| La prima classificazione di polytime. ricorsione limitata: indecidibile f(0,x)=g(x) f(yi,x)=h i (x,y,f(x,y))con f(y,x) k(y,x)

7 it is known that many complex constructions are reducible to primitive recursion. The question is: 4 why is this so? 4 there is an illuminating proof of this fact? 4 how far can these refinement be pushed and still remain in the realm of the primitive recursion? Harold Simmons The realm of primitive recursion

8 Harold Simmons The realm of primitive recursion è un funzionale; Simmons trova la (giusta) classe dei funzionali in cui definire H f(0,x)=g(x) f(r+1,x)=H(r,x ; f(r, )) a noi interessa il punto e virgola; divide le variabili in normal e dormant

9 una piccola digressione: come si fa laddizione? e la moltiplicazione? (0,x)=x (y+1,x)=( (y,x))+1 (3,5)= (5, (2,5)) cosa so di questa funzione? so come calcolarla? (0,a)=0 (b+1,a)= (a, (b,a))

10 (3,5)= ( (2,5),5) quante volte devo applicare il successore a 5? (2,5) volte! Sto definendo la funzione prodotto in termini di se stessa. cè un altro modo per calcolare il prodotto... (0,a)=0 (b+1,a)= ( (b,a),a) (0,x)=x (y+1,x)=( (y,x))+1

11 predicativo - impredicativo 4 la prima definizione di è predicativa 4 la seconda no: definisco in termini di se stesso Non ci sorprendiamo del fatto che in Simmons la prima definizione di sia legittima, la seconda no. E osserviamo che NON possiamo definire lesponente (x,2)=2 x in modo predicativo: (0,2)=1 (y+1, 2)= ( (y,2), (y,2))

12 Bellantoni & Cook - A new recursion-theoretic characterization of the polytime functions Possiamo usare gli strumenti forniti da Simmons (normal and dormant variables) per caratterizzare Polytime? Possiamo fornire una caratterizzazione predicativa, rinunciando alla ricorsione limitata?

13 Bellantoni & Cook - A new recursion-theoretic characterization of the polytime functions f(x,… ; y,...) normalsafe 0,p,s(;a),p(;a),if(;a,b,c) f(0,x ; a) = g(x ; a) f(yi,x ; a) = h i (y,x ; a,f(y,x ; a)) f(x ; a) = h(r(x ;) ; t(x ; a)) safe recursion safe composition initial functions

14 Polytime = chiusura delle funzioni iniziali sotto ricorsione e composizione safe, senza input safe. Riscriviamo somma e prodotto con la safe recursion: (0 ; x) = x (y+1 ; x) = s( ; (y ; x)) (0,x ; ) = 0 (y+1,x ; ) = (x ; (y,x ; ))

15 Cosa succede se violiamo il vincolo di non trasportare le variabili dalla zona safe a quella unsafe? Abbiamo una caratterizazione predicativa: funzioni iniziali + safe rec + safe comp = Polytime. iniziali + safe rec + safe comp + k violazioni = E k k violazioni k-ma classe di Grzegorczyk !!

16 critica a questo approccio anche se la ricorsione safe riesce a catturare Polytime, lo fa passando attraverso il modello di Turing, in modo inefficiente …...ad esempio, 4 semplici ordinamenti (polinomiali) non possono essere descritti con la ricorsione safe 4 semplici funzioni (come il minimo) sono calcolate con complessità troppo alta.

17 Martin Hofmann - The strength of non-size- increasing computation insert(x, nil) = cons(x,nil) insert(x,cons(y,l)) = if x

18 Loic Colson - Intensional aspects of functional systems min(0,y) = 0 min(s(x),0) = 0 min(s(x),s(y)) = s(min(x,y)) il tempo di calcolo di min è O(min(x,y)) il tempo di calcolo di min è O(y) Come facciamo a conoscere il più piccolo fra i due input, se stiamo ancora definendo min? min è ricorsiva primitiva? min(x,y) = if(sub(x,y),y,x) O(10,10 16 ) = O(10 16,10) = 10.

19 Neil Jones - LOGSPACE and PTIME characterized by programming languages … what is the effect of the programming style we employ (functional, imperative,...) on the efficiency of the programs we can possibly write?

20 L. Kristiansen & K.H. Niggl - On the computational complexity of imperative programming languages un linguaggio che lavora su stack: pop(X)push(a,X)nil(X) P 1 ;P 2 if top(X) a [P]foreach X [P] sequenzaselezioneiterazione

21 P 1 foreach X [foreach X [foreach X [push(a,Y)]]] tre esempi di stack program (1) se X = v, dopo lesecuzione di P 1 si ha Y = a |v| 3

22 tre esempi di stack program (2) P 2 foreach X [nil(Z); foreach Y [push(a,Z); push(a,Z)]; nil(Y); foreach Z [push(a,Y)]] se X = v, dopo lesecuzione di P 2 si ha Z = a 2 |w|

23 tre esempi di stack program (3) P 3 nil(Y); push(a,Y); nil(Z); foreach X [foreach Y [ push(a,Z); push(a,Z)];push(a,Y)] se X = v, dopo lesecuzione di P 3 si ha Z = a |v| 2

24 cosa produce (in P 2 ) la crescita esponenziale? P 2 foreach X [nil(Z); foreach Y [push(a,Z); push(a,Z)]; nil(Y); foreach Z [push(a,Y)]] Diciamo che P 2 ha -measure pari a 1. cè un circolo fra Y e Z; non accade in P 1 o P 3.

25 … la crescita esponenziale in P 2 è dovuta alla presenza della struttura circolo… … cosa succede se ci sono due livelli di circoli annidati? Diciamo che P 2 ha -measure pari a 2.

26 abbiamo una misura del livello di annidamento dei circoli in un programma... (pop) = (push) = (nil) := 0 (if top(X) a [P]) = (P) (P 1 ;P 2 ) = max{ (P 1 ) ; P 2 ) } (foreach X [P]) = (P)+1se in P cè un circolo (foreach X [P]) = (P)se non ci sono circoli in P

27 … con questa misura il cerchio (quello del nostro ragionamento) si chiude. programmi con -measure pari a n possono essere simulati da MdT con complessità temporale in E n+2 (la n+2esima classe di Grzegorczyk) MdT con complessità temporale in E n+2 possono essere simulate da programmi di misura n.

28 … una obiezione sulla natura dei programmi... 4 programmi honestly feasible: ogni sottoprogramma può essere simulato da una MdT polinomiale 4 programmi dishonestly feasible: –che calcolano una funzione polinomiale, in tempo più che polinomiale –che girano in tempo polinomiale, ma qualche sottoprogramma, eseguito separatamente, gira in tempo più che polinomiale.

29 … ci sono due linee di ricerca: 4 restringere il linguaggio degli stack program (per catturare solo programmi onesti) 4 migliorare la misura degli stack program (per catturare il maggior numero possibile di programmi, anche disonesti)

30 Covino & Pani - A refinement of the -measure for stack programs Fatto: se annidiamo un circolo, la -measure del programma cresce. Domande: cosa succede se... 4 annidiamo istruzioni che non modificano lo spazio complessivo? 4 annidiamo sottoprogrammi che non modificano lo spazio complessivo? 4 annidiamo circoli che non modificano lo spazio complessivo?

31 Risposta: 4 non cè nessuna crescita nella complessità della funzione calcolata.... … ma la -measure non se ne accorge !

32 Se un circolo è not increasing, non lo considera. Per riconoscere questa situazione, definiamo una nuova misura distinguiamo i circoli in 4 increasing, che fanno aumentare le dimensioni degli stack coinvolti nel circolo stesso 4 not-increasing, che lasciano immutata la dimensione complessiva dei registri

33 … abbiamo una migliore classificazione dei programmi ( < per tutti i programmi dishonest ). stack program con -measure pari a n possono essere simulati da MdT con complessità temporale in E n+2 (la n+2esima classe di Grzegorczyk) MdT con complessità temporale in E n+2 possono essere simulate da stack program di misura n.

34 Buone vacanze !


Scaricare ppt "Linguaggi per la descrizione di classi di complessità computazionale (orologi, smash, punto e virgola, circoli) Centro Interdipartimentale di Logica e."

Presentazioni simili


Annunci Google