43
Da Turing a Böhm Simona Ronchi Della Rocca 40-100 Dipartimento di Informatica

Da Turing a Böhm - di.unito.it · risolubili (le funzioni calcolabili) siano tutti e soli quelli definibili in uno di questi formalismi. Corrado Böhm !

  • Upload
    vocong

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Da Turing a Böhm

Simona Ronchi Della Rocca 40-100 Dipartimento di Informatica

I nostri due padri

Alan Turing 1912 - 1954

Corrado Böhm 1923 -

Alan Turing

!   Calcolabilità (1936): Formalizzazione del calcolo, macchina universale, indecidibilità del problema della fermata.

!   Crittografia (1938-42): decrittazione di Enigma, la macchina per cifrare i messaggi tedeschi.

!   Costruzione di EDVAC (1945), in collaborazione con Von Newmann: il primo calcolatore programmabile.

!   Studi di neurologia, fisiologia, connessioni mente-macchina, studi ispiratori dell’intelligenza artificiale.

!   Modelli matematici per l’embriologia (1952).

Alan Turing

!   Calcolabilità (1936): Formalizzazione del calcolo, macchina universale, indecidibilità del problema della fermata.

!   Crittografia (1938-42): decrittazione di Enigma, la macchina per cifrare i messaggi tedeschi.

!   Costruzione di EDVAC (1945), in collaborazione con Von Newmann: il primo calcolatore programmabile.

!   Studi di neurologia, fisiologia, connessioni mente-macchina, studi ispiratori dell’intelligenza artificiale.

!   Modelli matematici per l’embriologia (1952).

La macchina di Turing una formalizzazione del calcolo

Un nastro potenzialmente infinito:

La macchina di Turing

a b 1 0 a a a 1 1 b

Contenente simboli da un dato alfabeto:

La macchina di Turing

a b 1 0 a a a 1 1 b

Una testina indica ad ogni istante una casella:

La macchina di Turing

a b 1 0 a a a 1 1 b

La macchina si trova in uno stato :

La macchina di Turing

a b 1 0 a a a 1 1 b

Istruzioni per la macchina:

Nello stato S, se il simbolo letto è x: 1) Soprascrivi x con y 2) Sposta la testina a destra o a sinistra 3) Va nello stato T

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

1

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

0

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

1

0

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

1

0

0

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

b

0

0

0

b

Calcolo del successore

stato simb scrivi stato va

start b b leggi des

leggi 0 0 leggi des

leggi 1 1 leggi des

leggi b b calcola sin

calcola 0 1 ritorna sin

calcola 1 0 riporta sin

riporta 1 0 riporta sin

riporta 0 1 ritorna sin

riporta b 1 fine

ritorna 0 1 0 1 ritorna sin

ritorna b b fine

b

1

0

0

0

b

Una macchina che non termina

stato simb scrivi stato va

start b b leggi destra

leggi 0 0 leggi ferma

leggi 1 1 fine

b

0

0

0

0

b

Una macchina che non termina

stato simb scrivi stato va

start b b leggi destra

leggi 0 0 leggi ferma

leggi 1 1 fine

b

0

0

0

0

b

Una macchina che non termina

stato simb scrivi stato va

start b b leggi destra

leggi 0 0 leggi ferma

leggi 1 1 fine

b

0

0

0

0

b

La macchina universale

1.  Le macchine di Turing (TM) sono un’infinità numerabile, quindi ciascuna di esse può essere codificata con un numero naturale (TM1, TM2, TM3, TM4,…).

2.  Un numero sul nastro di una TM può essere a sua volta interpretato come (la codifica di) una TM.

3.  Esiste una TM universale, U, che, presi in ingresso due numeri, n e m, dà lo stesso risultato di TMn sull’input m (INTERPRETE).

Il problema della fermata

Problema ALT:

per ogni intero n e m, determinare se TMn si ferma sull’input m.

Turing ha dimostrato che non può esistere una TM che possa risolvere ALT.

Riassumendo, Turing ha :

!   dato una formalizzazione della nozione di algoritmo per mezzo di una macchina astratta

!   dimostrato che esistono problemi che in questo formalismo non hanno soluzione

Dov’e’ l’interesse?

TESI DI CHURCH - TURING

Ogni problema risolubile può essere risolto da una macchina di Turing.

cioè

La macchina di Turing è equivalente, come potenza di calcolo, a qualunque calcolatore esistente o futuro.

Un po’ di storia….

Kurt Gödel

Primo teorema di incompletezza (1931)

In ogni formalizzazione della matematica

che contenga l’aritmetica è possibile

costruire una frase sintatticamente corretta

che non può essere né dimostrata né confutata all’interno

del sistema stesso.

La caduta del programma di Hilbert

Programma di completa formalizzazione della matematica, a partire dall’aritmetica. da cui ogni problema matematico, se correttamente formalizzato, può essere o dimostrato o confutato. (1900)

formalizzazioni del calcolo

!   Alonzo Church (λ-calcolo) (1936)

!   Alan Turing (macchina astratta) (1936)

! Emil Post (sistemi combinatori) (1936)

!   Stephen Kleene (funzioni ricorsive) (1938)

Tutti questi modelli sono equivalenti.

La tesi di Church-Turing assume che i problemi risolubili (le funzioni calcolabili) siano tutti e soli quelli definibili in uno di questi formalismi.

formalizzazioni del calcolo

!   Alonzo Church (λ-calcolo) (1936)

!   Alan Turing (macchina astratta) (1936)

! Emil Post (combinatori finiti) (1936)

!   Stephen Kleene (funzioni ricorsive) (1938)

Tutti questi modelli sono equivalenti.

La tesi di Church-Turing assume che i problemi risolubili (le funzioni calcolabili) siano tutti e soli quelli definibili in uno di questi formalismi.

Corrado Böhm

!   Compilatore meta-circolare (1951)

!   Programmazione strutturata - Teorema di Böhm-Jacopini (1966)

!   Il linguaggio CUCH (1966)

!   Equivalenza di programmi – Teorema di Böhm (1968)

!   Direttore dell’Istituto di Scienza dell’Informazione e presidente del corso di laurea in Scienza dell’Informazione a Torino (1970 – 1974)

!   Proprietà di linguaggi funzionali (1974 - )

Corrado Böhm

!   Compilatore meta-circolare (1951)

!   Programmazione strutturata - Teorema di Böhm-Jacopini (1966)

!   Il linguaggio CUCH (1966)

!   Equivalenza di programmi – Teorema di Böhm (1968)

!   Direttore dell’Istituto di Scienza dell’Informazione e presidente del corso di laurea in Scienza dell’Informazione a Torino (1970 – 1974)

!   Proprietà di linguaggi funzionali (1974 - )

Donald E. Knuth The art of Computer Programming

(1968)

Euclid’s Algorithm (MCD(m,n))

E1. If n=0 the algorithm terminates; m is the

answer.

E2. If rm mod n , mn, nr and go to step E1.

Versione formalizzata m,n in locations U,V. MCD(m,n) into rA.

LDX U (rX M)

JMP 2F

1H STX V (n rX)

SRAX 5 (rAX rA)

DIV V (rX rAX mod n)

2H LDA V (rA n)

JXNZ 1B

Teorema di Böhm - Jacopini

Qualunque algoritmo è esprimibile usando solo 3 operazioni:

!   Sequenza

!   Selezione

!   Ciclo

Corollario:

L’operazione go to (JMP) è inutile

Corrado Böhm

!   Compilatore meta-circolare (1951)

!   Programmazione strutturata - Teorema di Böhm-Jacopini (1966)

!   Il linguaggio CUCH (1966)

!   Equivalenza di programmi – Teorema di Böhm (1968)

!   Proprietà di linguaggi funzionali (1974 - )

λ-calcolo

!   sintassi minimale M::= x |λx.M | MM

!   una unica operazione (λx.M)N -> M[N/x]

Rispetto alla macchina di Turing:

!   strutturato

!   ordine superiore (programmi e dati nello stesso linguaggio)

2 = λxλy.x(xy) calcolo di 2 × 2

2 = (λx.λy.x(xy)) (λxλy.x(xy)) ->

λy.(λxλy.x(xy))((λxλy.x(xy))y) =

λy.(λxλy.x (xy))((λxλy.x(xy))y) ->

λy.λy. (λxλy.x(xy)) y (((λxλy.x(xy)) y)y) =

= λy.λy. ((λxλy.x(xy)) y)(((λxλy.x(xy)) y)y) ->

λy.λy. (λy. y(yy))(((λxλy.x(xy)) y)y) ->

λy.λy.y(y(((λxλy.x(xy)) y)y) ->

λy.λy.y(y((λy. y(yy)) y)y) ->

λy.λy.y(y(y(yy)) = 4

λ-calcolo e linguaggi di programmazione

!   LISP (Mc Carthy, 1956)

!   traduzione dell’ALGOL 60 nel λ-calcolo (Landin, 1966)

!   “The next 700 programming languages” (Landin, 1966)

!   semantica (Strachey 1967, Scott, 1976)

Problema:

Determinare se due programmi sono semanticamente uguali (calcolano lo stesso algoritmo).

Indecidibile!!!! (Rice, 1953)

Teorema di Böhm (1968):

Esiste una classe di programmi (esprimibili come forme normali nel λ-calcolo) per cui l’uguaglianza semantica è decidibile.

La nostra storia

Corrado Böhm è stato:

!   fondatore del corso di laurea in Scienza dell’Informazione dell’Università di Torino (1970)

!   fondatore dell’Istituto di Scienza dell’Informazione dell’Università di Torino (1970)

!   padre della scuola di Semantica dei linguaggi di programmazione (1970 – 1974)

Roma, 2007