Cenni di computabilità Scaletta Cosa fa un programma?

27 novembre 2013
23. Computabilità
Scaletta
Cenni di computabilità
 
 
Stefano Mizzaro
 
Dipartimento di matematica e informatica
Università di Udine
http://www.dimi.uniud.it/mizzaro/
[email protected]
Programmazione, lezione 23
27 novembre 2013
 
Problemi, domande, risposte
Algoritmi, programmi, linguaggi di
programmazione
Algoritmi che calcolano funzioni
Funzioni computabili e non
Stefano Mizzaro - Computabilità
Cosa fa un programma?
 
 
 
 
Qual è la radice quadrata di 2345?
Qual è il massimo comun divisore di 234 e 36?
Problema = insieme di domande omogenee
 
Esempi:
 
Fornisce risposte a una classe di domande
 
 
Definizioni (1/2)
Fornisce risposte a domande
 
 
Programma per calcolare la radice quadrata di un
numero
 
Esempi:
 
 
3
sqrt(36)
 
 
P2 (mcd(X,Y))
mcd(12,4)
mcd(36,5)
P3 (…)
Stefano Mizzaro - Computabilità
Stefano Mizzaro
4
Definizioni (2/2)
Tutti i problemi
sqrt(12)
I1 = Quanto vale sqrt(341)?
I2 = Quanto vale mcd(48,36)?
Stefano Mizzaro - Computabilità
Problemi e domande
P1 (sqrt(N))
P1 = Calcolare sqrt(n)
P2 = Calcolare mcd(x,y)
Domanda (“istanza di un problema”)
 
Risolve problemi
Stefano Mizzaro - Computabilità
2
5
Risposta (a una domanda) = “soluzione di
un’istanza”
Soluzione di un problema = metodo generale
che permette di fornire in modo uniforme la
risposta a tutte le istanze di un problema =
Algoritmo risolvente
Stefano Mizzaro - Computabilità
6
1
27 novembre 2013
23. Computabilità
Algoritmi e programmi
 
Algoritmo
 
 
 
 
Problemi e
algoritmi
Tutti i problemi
P1 (sqrt(N))
sqrt(12)
P2 (mcd(X,Y))
sqrt(36)
mcd(12,4)
mcd(36,5)
P3 (…)
“Metodo”, “procedimento”, “sequenza di passi”
Astratto
Non si può toccare/vedere
Programma
Tutti gli algoritmi
Rappresentazione precisa di un algoritmo in un
certo linguaggio di programmazione
  Per eseguire/comunicare un algoritmo bisogna
rappresentarlo!!
 
Stefano Mizzaro - Computabilità
a11
7
8
Problemi, algoritmi, programmi
A2 (alg. per P2)
…
Tutti i programmi
Progr. per a12
A3 (…)
Progr. per a22
a22
a21
A2 (alg. per P2)
mcd(36,5)
Tutti gli algoritmi
a12
a11
Progr. per a22
A1 (alg. per P1)
Tutti i programmi
Progr. per a12
P3 (…)
Tutti i problemi
A3 (…)
P2 (mcd(X,Y))
a22
mcd(12,4)
a21
sqrt(36)
a12
sqrt(12)
a11
a22
a21
Stefano Mizzaro - Computabilità
Tutti gli algoritmi
A1 (alg. per P1)
A2 (alg. per P2)
a12
A3 (…)
P1 (sqrt(N))
Algoritmi e
programmi
A1 (alg. per P1)
…
Stefano Mizzaro - Computabilità
9
Il calcolatore
Stefano Mizzaro - Computabilità
10
Calcolatore, programma e dati
Problema
 
È un:
 
 
 
 
 
Esecutore di algoritmi
rappresentati da programmi
mediante un linguaggio di programmazione
Algoritmo
Istanza
Esecutore universale di algoritmi
Un algoritmo va eseguito su dati
 
Programma
Es.: calcola sqrt(897)
Dati
Stefano Mizzaro - Computabilità
Stefano Mizzaro
11
Stefano Mizzaro - Computabilità
Calcolatore
Risultati
12
2
27 novembre 2013
23. Computabilità
Finitezza, univocità, effettività
 
Curiosità legittime…
 
Un programma/algoritmo deve essere:
 
Finito (# finito di istruzioni)
if (x == 0) return 1;
else if (x == 1) return
else if (x == 2) return
else if (x == 3) return
else if (x == 4) return
...
 
 
 
 
2;
3;
4;
5;
 
 
Univoco, non ambiguo (x = x + “un po’”)
Effettivo: deve esistere un calcolatore in grado di
eseguire le istruzioni
 
Ma con gli algoritmi si può fare tutto?
E se no, che cos’è che si può fare?
 
 
prossimaVincitaAlLotto()
Stefano Mizzaro - Computabilità
13
Per quali problemi esiste un algoritmo risolvente?
E quello che si può fare dipende dal
linguaggio di programmazione scelto?
A queste domande risponde la teoria della
computabilità (calcolabilità)
Approccio formale, matematico, preciso
Domande ancora poco precise, servono un paio
di altre definizioni
Stefano Mizzaro - Computabilità
Funzioni
 
4•
f
f
•
•9
•
• d
dominio
c•
• 64
5•
f
b•
Domini e codomini
3•
Funzione = legge che associa a un elemento di un
insieme (dominio) un elemento di un insieme
(codominio)
a•
14
3•
2•
codominio
• e
• 5
•
1•
codominio
dominio
Stefano Mizzaro - Computabilità
15
Stefano Mizzaro - Computabilità
Algoritmi calcolano funzioni
 
 
 
Quali funzioni?
Algoritmo per calcolare la radice quadrata
calcola la funzione che associa a un numero
la sua radice quadrata
Algoritmo di Euclide calcola la funzione che
dati 2 numeri restituisce il loro MCD
Sembra riduttivo, ma
 
 
 
 
Stefano Mizzaro
Funzioni f: R → R: analisi matematica
La teoria della computabilità si occupa delle
funzioni f: N → N
Parziali
Ad esempio programma con un ciclo infinito che
non dà nessun output
  Funzione “non definita”
 
… codifica…
Stefano Mizzaro - Computabilità
16
17
Stefano Mizzaro - Computabilità
18
3
27 novembre 2013
23. Computabilità
Le funzioni f: N → N
Curiosità legittime…
f: N → N
 
 
f1
•
f3
•
f2
f4
•
•
 
Def.: Funzione calcolabile (computabile) = funzione
per cui esiste un algoritmo che la calcola
Ora, finalmente, possiamo porci una domanda
precisa:
Le funzioni f: N → N sono tutte calcolabili?
Data una qualsiasi funzione, esiste sempre un
algoritmo che la calcola?
 
 
Stefano Mizzaro - Computabilità
19
Stefano Mizzaro - Computabilità
No! Funzioni calcolabili e non
 
Il problema della terminazione (Halting
problem)
 
Funzioni
calcolabili
f2
•
f3
•
 
f4
•
 
21
 
Dati di
ingresso D
Calcolatore
 
Termina /
Non termina
 
 
Stefano Mizzaro - Computabilità
Stefano Mizzaro
23
22
Una soluzione?
 
Descrizione di
un algoritmo Ai
CiaoATutti termina
while(true) non termina
Stefano Mizzaro - Computabilità
Il problema della terminazione
Algoritmo A?
Trovare un algoritmo A in grado di dirci se un
qualsiasi algoritmo Ai su dati D termina.
(un algoritmo potrebbe non terminare perché
entra in un ciclo infinito)
 
Funzioni non
calcolabili
Stefano Mizzaro - Computabilità
20
No? Voglio un esempio…
f: N → N
f1
•
MCD: ok. Somma: ok. Radice quadrata:…ok.
Ma in generale?
Beh, potrei far eseguire Ai sui dati e
attendere
Se termina so che termina
Se dopo 2 ore non ha terminato… so che non
ha terminato in due ore… ma quanto devo
aspettare?!
Non va!
Teorema: A non esiste
Stefano Mizzaro - Computabilità
24
4
27 novembre 2013
23. Computabilità
Funzioni
calcolabili
f3 [...]
...
f2 [mcd(X,Y)]
f2 (21,63)
f2 (135,207)
Stefano Mizzaro - Computabilità
 
 
 
 
Programmi per
l'algoritmo di
Euclide
 
 
 
…
Tutti i programmi
Progr. per a12
A3 (…)
Progr. per a22
a22
a21
a12
Tutti gli algoritmi
Ufficio / Calcolatore
Impiegato / Processore
Diagramma di flusso / Programma
Programmi per
l'algoritmo a11
...
27
Stefano Mizzaro - Computabilità
28
Riassunto del corso
 
Introduzione alla programmazione
 
Programmazione strutturata
 
Accento sulla qualità
 
 
 
 
Stefano Mizzaro
mcd(36,5)
http://www.dimi.uniud.it/mizzaro/research/
papers/algoritmo.pdf
Capp. 3 e 4
Sostituite:
 
Programmi per
l'algoritmo a12
...
Tutti i programmi
 
Problemi, domande, risposte
Algoritmi, programmi, linguaggi di
programmazione
Algoritmi che calcolano funzioni
Funzioni computabili e non
Stefano Mizzaro - Computabilità
26
Riferimenti
Riassunto
 
mcd(12,4)
Stefano Mizzaro - Computabilità
...
a11
Tutti gli algoritmi
A1: gli
algoritmi
per P1
a12
144
A3: gli
... algoritmi
per P3
A2: gli
algoritmi
per P2
(Euclide)
f1 (144)
f1 [ N ]
f1 (27)
...
mcd(135,207)
27
P2(mcd(X,Y))
mcd(21,63)
Problemi,
algoritmi e
programmi 2
P3(...)
5
P1( N )
25
f1 (5)
Funzioni
calcolabili
f: N → N
Stefano Mizzaro - Computabilità
Tutti i problemi
f4
Funzioni
non calcolabili
Problemi
risolubili
Tutti i problemi
risolubili
f3
a11
f2
A1 (alg. per P1)
f1
Problemi
non risolubili
P3 (…)
f: N --> N
sqrt(36)
P4
sqrt(12)
P2
Tutti i problemi
P3
P1
P1 (sqrt(N))
Problemi
A2 (alg. per P2)
Problemi, algoritmi, programmi
P2 (mcd(X,Y))
Funzioni non calcolabili e
problemi non risolubili
29
Con il linguaggio Java
Non variabili inutili, lunghezza del codice, programmi
leggibili, non cicli inutili, …
TDA, OO, API
Cenni computabilità
Stefano Mizzaro - Computabilità
30
5
27 novembre 2013
23. Computabilità
1. La programmazione
strutturata (22h)
 
L’ABC della programmazione:
 
 
 
 
 
 
 
2. Tipi di dati astratti,
occultamento delle
informazioni (4h)
Espressioni
Strutture di controllo
Sviluppo incrementale
Array
Metodi
Ricorsione
 
 
 
Presenti in ogni linguaggio di programmazione
 
 
Stefano Mizzaro - Computabilità
31
Come fare programmi più grandi e
complicati…
…e comunque modificabili, estendibili,
comprensibili, …
Tipi di dati astratti, occultamento delle
informazioni
Concetti e realizzazione in Java
Verso l’OO (“Object Oriented”)
Stefano Mizzaro - Computabilità
3. I fondamenti della
programmazione OO (10h)
 
 
 
 
4. Le API del Java (10h)
Evoluzione dai TDA: oggetti, classi, istanze,
scambio messaggi
Eredità
Polimorfismo
La programmazione OO in Java
 
 
 
 
 
 
 
Classi astratte
Interfacce
Package
Stefano Mizzaro - Computabilità
32
Application Programming Interface
“Librerie”
Il programmatore di oggi deve conoscere
anche le API
Introduzione, cenni:
 
 
 
33
File, stringhe, utilità, …
Interfacce utente grafiche
Applet
Stefano Mizzaro - Computabilità
34
5. Teorie della computabilità
e della complessità (cenni, 2h)
 
 
Teoria matematiche (teoremi!)
Computabilità
 
 
 
 
 
Cos’è un programma?
“Cosa può fare un programma”?
È possibile scrivere un programma che …?
Ci sono linguaggi di programmazione più “potenti” di altri?
Cosa vuol dire “più potente”?
Complessità
 
Dato un problema, ci sono programmi più efficienti di altri
per risolverlo? (più veloci, che usano meno risorse, …)
Stefano Mizzaro - Computabilità
Stefano Mizzaro
35
6