CALCOLABILITA’
AFFERMARE CHE UN PROBLEMA E’ RISOLUBILE MEDIANTE
UN PROCESSO AUTOMATICO EQUIVALE A DIRE CHE E’
POSSIBILE TROVARE UN ALGORITMO RISOLUTIVO CHE
PORTI, DOPO UN NUMERO FINITO DI OPERAZIONI, ALLA
SOLUZIONE CERCATA .
CALCOLABILITA’
•UNA FUNZIONE E’ CALCOLABILE SE ESISTE UN
ALGORITMO CHE LA RISOLVE
•PER OGNI FUNZIONE CALCOLABILE E’POSSIBILE
COSTRUIRE UNA MACCHINA DI TURING
•E’POSSIBILE COMBINARE TANTE MACCHINE
SEMPLICI PER RISOLVERE QUALSIASI COMPITO
DESCRIVIBILE TRAMITE UN ALGORITMO
CALCOLABILITA’
UNA MACCHINA DI TURING CHE SI ARRESTI E TRASFORMI
UN NASTRO t IN UNO t’ RAPPRESENTA L’ALGORITMO PER
LA ELABORAZIONE Y=F(X), CON X E Y CODIFICATI SU t E t’
MdT CALCOLA
Y=F(X)
TESI DI CHURCH-TURING
• QUANTO NON E’ CALCOLABILE SU UNA DELLE MACCHINE
IDEALI PROPOSTE DA TURING NON E’ CALCOLABILE SU
NESSUNA ALTRA MACCHINA, SIA ESSA IDEALE O REALE
• NON ESISTE UN FORMALISMO NE’ UNA MACCHINA
CONCRETA CHE POSSA CALCOLARE UNA FUNZIONE NON
CALCOLABILE SECONDO TURING
• UN ALGORITMO E’ CIO’ CHE PUO’ ESSERE REALIZZATO
CON UNA MACCHINA DI TURING
TESI DI CHURCH-TURING
• Tutte le definizioni di algoritmo che noi conosciamo sono
EQUIVALENTI
• Tutte le definizioni di algoritmo che chiunque farà saranno
equivalenti a quelle conosciute
• Ciò porta al fatto che tutti i computer sono EQUIVALENTI tra
di loro
Problemi non Computabili
• La domanda alla quale si vuole rispondere è la seguente:
– Tutti i problemi sono computabili? O, in altre parole, ci sono problemi per i
quali non esiste nessun algoritmo in grado di risolverli?
• La risposta a questa domanda è:
– Esistono problemi che non sono computabili
Problema dell’ Arresto
• Dato un programma P ed i suoi dati di input D si vuole sapere se
tale programma terminerà.
• Tale problema NON E’ COMPUTABILE, cioè non esiste un
algoritmo in grado di risolverlo
Problema dell’ Arresto
• Supponiamo che esista un algoritmo, Test_arresto(P,D), che
risolva il problema e che si comporti come in figura
P
D
P(D) si arresta?
Si
No
Stampa OK
Stampa NO
e fermati
e fermati
Problema dell’ Arresto
• Supponiamo di utilizzare come dati D lo stesso P. Chiamiamo
questa versione Test_arresto_nuovo
P
P(P) si arresta?
Si
No
Stampa OK
Stampa NO
e fermati
e fermati
Problema dell’ Arresto
• Test_arresto_nuovo può essere schematizzato in termini di
Test_arresto come segue
Test_arresto_nuovo(P) {
Test_arresto(P,P);
}
Problema dell’ Arresto
Supponendo che test_arresto e Test_arresto_nuovo esistano,
costruiamo un nuovo algortimo Test_arresto_loop che si
comporta come segue
P
P(P) si arresta?
Si
No
Esegui un ciclo
Stampa NO
infinito
e fermati
Problema dell’ Arresto
• Test_arresto_loop può essere schematizzato in termini di
Test_arresto_nuovo come segue
Test_arresto_loop(P) {
if ( Test_arresto_nuovo(P) da NO in Output)
fermati;
else
esegui un ciclo infinito;
}
Problema dell’ Arresto
Consideriamo, infine, il caso in cui a Test_arresto_loop diamo in
ingresso lo stesso Test_arresto_loop
Test_arresto_loop
Test_arresto_loop(Test_arresto_loop) si arresta?
Si
No
Esegui un ciclo
Stampa NO
infinito
e fermati
Problema dell’ Arresto
E’ immediato constatare che l’algoritmo Test_arresto_loop mostra
una evidente contraddizione logica, e quindi NON ESISTE
Test_arresto_nuovo NON ESISTE
Test_arresto NON ESISTE
MODELLO DI VON NEUMANN
unita'
controllo
unita'
ingresso
unita'
memoria
unita'
aritmetica
unita'
uscita
MODELLO DI VON NEUMANN
• Elaborazione sequenziale
• Linguaggio imperativo
• Memoria comune per dati ed Istruzioni
Elaborazione
Y=F(X)
• assegnare i valori Y ai corrispondenti attributi Ay
in base alla regola F, partendo dai valori X degli
attributi Ax
• La decomposizione dell’elaborazione in azioni
componenti ci porta a costruire l’algoritmo di
calcolo, detto anche processo di elaborazione
• Il processore (o unità di controllo) nel modello di
Von Neumann è la macchina che esegue il
processo di elaborazione
• Il processo(algoritmo) è formalmente descritto
mediante un programma, registrato nella
memoria dell’elaboratore
• Un programma è formalmente descritto mediante
un linguaggio noto al processore
MACCHINA DI VON NEUMANN
• stato: (A,V) A={a1,a2,...,an} e V={v1,v2,...,vn}
• una azione elaborativa altera lo stato
• essa assegna un valore ad uno o piu' attributi
Esempi
– assegnazione del valore 3 all’attributo a1
– assegnazione del valore a1 ad a2
– assegnazione del valore derivante da un ingresso ad a1
Macchina Astratta
Generalizzata (MAG)
• Ciasun linguaggio di programmazione definisce i
tipi che tratta e le operazioni su di essi
• Il processore è una parte hardware del
calcolatore o esso stesso un programma
utilizzato per l’esecuzione o per l’interpretazione
di altri programmi
• Per ciascuna coppia linguaggio-processore sono
diversi i tipi,le operazioni definite e quindi le
Istruzioni ed i programmi
Macchina Astratta
Generalizzata (MAG)
• Modello dal quale trarre come casi particolari i
componenti delle macchine concrete
• Cosituita da:
– un insieme di registri di memoria
– un registro speciale PI atto a contenere la
informazione "puntatore alla prossima
istruzione”
– un processore
MAG: TIPI
• Dati (le informazioni da elaborare o elaborate)
• Istruzioni (le azioni da compiere)
• Puntatori (a dati e a istruzioni)
– Il valore di un tipo puntatore è uno
specifico registro di memoria
MAG: Istruzioni e Programmi
• Nella famiglia di tipi T è definito un insieme di
operazioni elementari O
• Mediante composizione di uno o più operatori
viene definito l’insieme di funzioni f:
U=f(I)
• Ogni funzione trasforma un insieme I di k valori in
un insieme Q di q valori
MAG: Istruzioni e Programmi
• Mediante la f si costruisce un’ azione elaborativa
che consiste nell’assegnare i valori U ai registri
della macchina, cioè ai registri di memoria e/o al
registro speciale PI
• Un’azione elaborativa si esprime mediante un’
istruzione che, in generale, è composta da 3
componenti
MAG: Istruzioni e Programmi
i=(f,P1,P2)
• f è la funzione da calcolare
• P1 rappresenta i valori di I ed è un insieme di
valori e/o puntatori a registri contenenti valori
• P2 è costituito da q-1 puntatori a registri di
memoria associati ad altrettanti valori
dell’insieme U che rappresentano i dati elaborati
dall’istruzione. L’ultimo valore di U è destinato al
registro PI ed è un puntatore ad un’istruzione
Modello Operativo della MAG
1- Prelievo dalla memoria dell’istruzione definita da
PI e suo spostamento nel processore
2- prelievo delle informazioni P1 dalla memoria
oppure direttamente dall’istruzione
3- calcolo dei valori U=f(I)
4- memorizzazione dei valori calcolati nei registri
P2
5- trasferimento in PI dell’ultimo valore di U
6- ripetizione delle operazioni a partire dal punto 1
ALU
5
PROCESSORE G
3
f
a
P1
P2
U
1
I
U=f(I)
4
2
a
PI
f
P1
P2
U
I
P2
memoria M
•
•
•
•
•
1) (f,P1,P2) spostata in memoria in un registro di G
2) si costituisce l'insieme di I
3) si esegue il calcolo U=f(I)
4) q-1 valori sono memorizzati nei registri puntati da P2
5) l'ultimo valore di U, uq, e' memorizzato in PI
P1
• Un modello semplice (es MdT) è in grado di
calcolare mediante apposite macchine costruite
su di esso problemi complessi
• Nel caso di macchine a programma ciò si ottiene
inserendo l’apposito programma
• Una macchina può simularne un’altra (più
semplice o più complessa) se attrezzata con un
programma
• Con riferimento al modello di Von Neumann, una
coppia linguaggio processore è in grado di
operare equivalentemente ad un’altra coppia con
azioni elaborative diverse (ma equivalenti per la
Tesi di Church)
Registro PI
• ORDINAMENTO STATICO O DINAMICO
• I1>I2>……………<IN STATICO
• UQ=FQ(I)
DINAMICO
HARDWARE E SOFTWARE
Hardware
Software
Macchina Virtuale
• Hardware: l’insieme di circuiti, dei
componenti elettrici, elettronici e meccanici
• Software: l’insieme dei programmi operanti
sulla macchina
Strato Hardware
• Il classico strato hardware è costituito da una
macchina di Von Neumann detta Macchina di
base:
– linguaggio macchina
– processore hardware
– memoria fisica e registri fisici
Software
• I sistemi di elaborazione sono completati da appositi programmi
che ne consentono un uso più semplice. Essi cosituiscono il
Software di base
• Con tali programmi il calcolatore appare all’utente come una
macchina diversa che verrà indicata come Macchina Virtuale
Gerarchia di Astrazione
di un Calcolatore
LIVELLO
.
.
6
5
4
3
2
1
0
ASTRAZIONE
.
.
Programma App
Linguaggio di Programmazione
Ling. Assemblativo
Nucleo del Sist. Operativo
Linguaggio Macchina
Microprogramma
Logica Digitale
STRATO
Programmi e pacchetti integrati
Programmi e pacchetti applicativi
Linguaggi di programmazione
Sistema operativo
Linguaggio macchina
Microprogrammi
DESTINATARIO
Organizzazione utente
Utente finale
Progettista di applicazioni
Gestione del sistema
Macchina base
Circuiti interni
COSA E’ LA RICORSIVITA’ ?
ANNIDARSI DI COSE DENTRO LE COSE
Ma …..
Attenzione ai paradossi !
A PRIMA VISTA :
COSA DEFINITA IN
TERMINI DI SE STESSA
IL DIALOGO CON A,B,C …...
PUSH, POP e PILE
RICORSIVITA’
•NEL CAMPO MUSICALE
Bach
Suite Francise n. 5
“AABB”
•NEL CAMPO LINGUISTICO
Rete di Transizione Ricorsiva
(RTN)
•NEL CAMPO DELLE STRUTTURE GEOMETRICHE
MOLTO NOTA
Leonardo Pisano “figlio di Bonaccio”
detto FIBONACCI
1202
Il Diagramma G e le successioni ricorsive
Possiamo definire strutture geometriche infinite usando lo stesso metodo,cioe’quello di espandere un nodo dopo l’altro. Per
esempio, definiamo un diagramma infinito chiamato “Diagramma G” . Useremo a questo scopo una rappresentazione implicita. In
due nodi scriveremo semplicemente la lettera ‘G’, che starà per una copia del Diagramma G, nella figura 31a, abbiamo disegnato il
Diagramma G implicitamente. Ora se vogliamo vedere il Diagramma G più esplicitamente, possiamo espandere ciascuna delle due
G, cioè, sostituirle con lo stesso diagramma, ma in dimensioni ridotte (vedi Fig 31b). Questa versione “disecondo ordine” del
diagramma G ci dà una vaga idea dell’aspetto che avrebbe il Diagramma G se fosse completo, cosa che è impossibile
G
H
G
H
(a)
(c)
H
G
G
G
G
H
H
H
(b)
FIGURA 31. (a) Diagramma G, senza espansioni
(b) Diagramma G, con una espansioni
(c) Diagramma H, senza espansioni
(d) Diagramma H, con una espansioni
(d)
Il Diagramma G e le successioni ricorsive
H
G
G
H
(a)
(c)
H
G
G
G
G
H
H
H
(b)
(d)
(a) Diagramma G, senza espansioni
(b) Diagramma G, con una espansioni
(c) Diagramma H, senza espansioni
(d) Diagramma H, con una espansioni
Nella Figura si vede una parte ancora più grande del diagramma G, in cui
tutti i nodi sono stati numerati cominciando dal basso e da sinistra a destra.
In basso sono stati inseriti due nodi supplementari che portano i numeri 1 e
2.
14
15
9
16
17
19
18
11
10
6
21
20
12
7
13
8
4
5
3
2
1
Questo albero infinito, possiede alcune propietà matematiche molto curiose. Se
ci muoviamo lungo il suo bordo destro, troviamo la famosa successione dei
numeri di Fibonacci
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, …….
Il migliore modo per definire questi numeri consiste in una ricorsione in base
alle due formule
FIBO(n) = FIBO(n-1) + FIBO(n-2)
FIBO(0) = 1
FIBO(1) = 1
per n >= 2
Come si vede, ogni numero di Fibonacci viene definito in base ai numeri
di Fibonacci definiti in precedenza. Potremo rappresentare le due formule
con una RTN
Porre x=FIBO(n-1)
FIBO(n)
inizio
Porre y=FIBO(n-2)
X+Y
fine
Il valore è 1
Scarica

Document