Informatica:
Linguaggi e Macchine

Nicola Fanizzi

Dipartimento di Informatica
Università degli Studi di Bari Aldo Moro

Orientamento: 20190225

Agenda

Cenni Storici

Macchine Calcolatrici


da archeocomputing

Cenni Storici..

Inizi 1600 Cartesio René Descartes (Cartesio) 1643 Pascal (e Schickard 1623) Pascal

..Cenni Storici..

1666 Leibniz: “Calculemus”
propone il ricorso a un calcolo formale per dirimere controversie razionalmente 1768 Automa di Kempelen o Turco Meccanico
capace (?) di giocare a scacchi

..Cenni Storici..

1837-42 C. Babbage concepì la macchina analitica (analytical engine),
primo esempio di macchina universale (hardware),
cui collaborò anche L. Menabrea
e che Ada Lovelace Byron corredò del software

..Cenni Storici

1847 G. Boole in The Mathematical Analysis of Logic
propone l'associazione tra matematica e logica 1854 in An Investigation of the Laws of Thought,
B. riconduce le composizioni degli enunciati a semplici operazioni:
algebre di Boole

Tempi Moderni

1941 primo calcolatore programmabile moderno Turing-completo:


Z3 di Konrad Zuse
Linguaggio di programmazione (funzionale): Plankalkül

Cronologia dei Linguaggi di Programmazione

Automi

Simboli >> Stringhe >> Linguaggi Formali

Alfabeti

Alfabeto: insieme finito (ma non vuoto) di simboli: $$\Sigma \neq \emptyset$$

Esempi

Stringhe

Stringa (o parola): sequenza di simboli da un alfabeto $\Sigma$: $$z = s_{[1]} s_{[2]} \cdots s_{[n]}$$ ogni $s_{[i]}$ è un simbolo di $\Sigma$, per ogni posizione $i$ Abbreviazione: dato un simbolo $s$ $$s^n = \underbrace{s s \cdots s}_\textrm{n volte}$$

Stringhe | Esempi

Chiusura $\Sigma^*$

$$\Sigma^*$$ denota l'insieme (infinito) di tutte le stringhe fatte di simboli scelti da $\Sigma$

Concatenazione (Prodotto)

Operazione "$\cdot$" definita sulle stringhe:
date $w_1, w_2$ sullo stesso alfabeto, $$z = w_1 \cdot w_2$$ stringa ottenuta facendo seguire ai simboli di $w_1$ tutti quelli di $w_2$ conservando l'ordine

Linguaggi Formali

Un linguaggio $L$ su $\Sigma$ è un sotto-insieme di stringhe di $\Sigma^*$: $$L ⊆ \Sigma^∗$$

NB finito, anche vuoto, o infinito

Prodotto op. estesa ai linguaggi: $$L_1 \cdot L_2 = \{w_1 \cdot w_2 \mid w_1 \in L_1 \land w_2 \in L_2 \}$$

Linguaggi | Esempi

Automi

dal Dizionario

autòma (ant. autòmato) s.m. [dal lat. automătus, gr. αὐτόματος, agg., «che si muove da sé»] (pl. autòmi, ant. autòmati). – 1. Macchina che riproduce i movimenti (e in genere anche l’aspetto esterno) dell’uomo e degli animali. Quindi, fig., persona priva di volontà propria, che agisce o si muove macchinalmente senza coscienza dei proprî atti: camminava come un a.; sembrare, ridursi un automa. 2. In cibernetica (in partic. nella teoria generale degli a.), sistema definito da un insieme di segnali di entrata, di stati interni e di segnali di uscita, e tale che per ogni segnale in entrata fornisce un segnale d’uscita dipendente dallo stato interno in cui il sistema stesso si trova. 3. Nella teoria dei sistemi complessi, a. cellulare, strategia di rappresentazione di sistemi complessi (v. complessità), i cui elementi costituenti sono immaginati come collocati nei nodi di una rete e possono assumere diversi stati a seconda delle interazioni con gli elementi vicini.

http://www.treccani.it/vocabolario/automa/

Automi Riconoscitori

automa modello astratto di macchina: sistema dinamico discreto e invariante

Automa | Diagramma di transizione

Per descrivere il funzionamento di un automa:

o una matrice di transizione equivalente
$\delta$$0..9$$.$
$\to{}A$$B$ 
$*B$$B$$C$
$C$$D$ 
$*D$$D$ 

Simulazione di Automi

Grammatiche

Regole >> Derivazioni >> Linguaggi Generati

N. Chomsky

Grammatica

Una grammatica generativa è un modello astratto
che descrive matematicamente un linguaggio su un dato alfabeto $\Sigma$

Grammatiche - Esempi

$G_3$: $\Sigma = \{\mathtt{0,1}\}$ e $V = \{S\}$ \[ \begin{eqnarray} S & \to & \mathtt{0} S \\ S & \to & \mathtt{1}\\ \end{eqnarray} \] $G_2$: $\Sigma = \{\mathtt{0,1}\}$ e $V = \{S,A\}$ \[ \begin{eqnarray} S & \to & \mathtt{0} S \mathtt{0}\\ S & \to & \mathtt{0} A \mathtt{0} \\ A & \to & \mathtt{1}\\ \end{eqnarray} \]
$G_1$: $\Sigma = \{\mathtt{a,b,c}\}$ e $V = \{S,A,B\}$ \[ \begin{eqnarray} S & \to & \mathtt{a}BS\mathtt{c}\\ S & \to & \mathtt{abc}\\ B\mathtt{a} & \to & BA\\ BA & \to & \mathtt{a}A\\ \mathtt{a}A & \to & \mathtt{a}B\\ B\mathtt{b} & \to & \mathtt{bb}\\ \end{eqnarray} \] $G_0$: $\Sigma = \{\mathtt{a,b,c}\}$ e $V = \{S,B\}$ \[ \begin{eqnarray} S & \to & \mathtt{a}BS\mathtt{c}\\ S & \to & \mathtt{abc}\\ B\mathtt{b} & \to & \mathtt{a}B\\ B\mathtt{b} & \to & \mathtt{bb}\\ \end{eqnarray} \]

Derivazioni

Derivazioni | Esempi

Data $G_1$ con le regole $\{ S \to \mathtt{0} S \mathtt{1}; S \to \mathtt{10}\}$

Linguaggi Generati dalle Grammatiche

Una grammatica $G$ definisce un insieme di stringhe (su $\Sigma$) derivabili da $S$
il linguaggio generato da $G$: $$L(G) =\{w \in \Sigma^* \mid S \stackrel{*}{\Rightarrow} w \}$$

Linguaggi Generati da Grammatiche | Esempi

$G_3$ genera $L(G_3) = \{ \mathtt{0}^i\mathtt{1} \mid i \geq 0 \}$ \[ \begin{eqnarray} S & \to & \mathtt{0} S \\ S & \to & \mathtt{1}\\ \end{eqnarray} \] $G_2$ genera $L(G_2) = \{ \mathtt{0}^i\mathtt{1}\mathtt{0}^i \mid i > 0 \}$ \[ \begin{eqnarray} S & \to & \mathtt{0} S \mathtt{0}\\ S & \to & \mathtt{0} A \mathtt{0} \\ A & \to & \mathtt{1}\\ \end{eqnarray} \]
$G_1$ genera $L(G_1) = \{ \mathtt{a}^i\mathtt{b}^i\mathtt{c}^i \mid i > 0 \}$ \[ \begin{eqnarray} S & \to & \mathtt{a}BS\mathtt{c}\\ S & \to & \mathtt{abc}\\ B\mathtt{a} & \to & BA\\ BA & \to & \mathtt{a}A\\ \mathtt{a}A & \to & \mathtt{a}B\\ B\mathtt{b} & \to & \mathtt{bb}\\ \end{eqnarray} \] $G_0$ genera $L(G_0) = \{ \mathtt{a}^i\mathtt{b}^i\mathtt{c}^i \mid i > 0 \}$ \[ \begin{eqnarray} S & \to & \mathtt{a}BS\mathtt{c}\\ S & \to & \mathtt{abc}\\ \mathtt{b}A & \to & A\mathtt{b}\\ B\mathtt{b} & \to & \mathtt{bb}\\ \end{eqnarray} \]

Esempio | derivazione con $G_2$

albero di derivazione

\[ \begin{eqnarray} 1.\ S & \to & \mathtt{0} S \mathtt{0} \\ 2.\ S & \to & \mathtt{0} A \mathtt{0} \\ 3.\ A & \to & \mathtt{1}\\ \end{eqnarray} \] $S \stackrel{1}{\Rightarrow} \underline{\mathtt{0} S \mathtt{0}} \stackrel{1}{\Rightarrow} \mathtt{0} \underline{\mathtt{0} S \mathtt{0}} \mathtt{0} \stackrel{1}{\Rightarrow} \mathtt{0} \mathtt{0} \underline{\mathtt{0} S \mathtt{0}} \mathtt{0} \mathtt{0} \stackrel{1}{\Rightarrow} \mathtt{0} \mathtt{0} \mathtt{0} \underline{\mathtt{0} S \mathtt{0}} \mathtt{0} \mathtt{0} \mathtt{0}\\ \phantom{S} \stackrel{2}{\Rightarrow} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0} \underline{\mathtt{0} A \mathtt{0}} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0} \stackrel{3}{\Rightarrow} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0} \underline{\mathtt{1}} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0} \mathtt{0}$

derivazione

Simulatore

Simulatore di Grammatiche Libere @ Stanford

Macchine di Turing

Funzioni e Algoritmi >> Problemi >> Calcolabilità

Richiami | Terminologia..

Funzione relazione che associa elementi di due insiemi $$f: \mathrm{Dominio} \to \mathrm{Codominio}$$ ogni $x \in \mathrm{Dominio}$ è associata ad al più un $y \in \mathrm{Codominio}$ focus su funzioni sui domini dei numeri naturali $\mathbb{N}$ o delle stringhe $\mathbb{S}$

..Richiami | Terminologia

Algoritmo descrizione formale della procedura per risolvere il problema

Programma algoritmo scritto in un linguaggio interpretabile da una macchina

Problema della Decisione

Entscheidungsproblem posto da David Hilbert nel 1928
❝Esiste una procedura automatica in grado di stabilire, per ogni enunciato espresso nel linguaggio formale della logica del primo ordine, se esso è deducibile o meno all'interno del sistema formale?❞

Macchina di Turing

MdT modello di calcolo ideato da Alan M. Turing nel 1936

Computazione nella Macchina di Turing

Funzionamento

Caratteristiche Salienti

MdT, Linguaggi e Problemi

Una mdT decide un linguaggio $L$ su $\Sigma$ se,
avendo fissato due stringhe di output che corrispondano a $\text{Sì}$ e $\text{No}$,
essa, ricevendo sul nastro una stringa $w$ Una mdT calcola una funzione $f$ se, per ogni stringa $w$ del suo dominio,
essa termina la computazione avendo calcolato l'output corretto $f(w)$

MdT Universale

Risultati Teorici

Algoritmo Universale

Lavorando con numeri naturali $x, y, z$ e con un alfabeto che li rappresenta,
consideriamo la funzione così definita: \[ f(x, y, z) = \begin{cases} 1 & \text{$M_x$ converge in $z$ passi sull'input $y$}\\ 0 & \text{altrimenti} \end{cases} \] essa è calcolabile (esiste una mdT che la calcola)

Algoritmo

Macchina Universale

Una MdT $M$ è determinata da $\delta_M$ con le istruzioni per il suo controllo: il suo programma

Teorema Si può costruire una MdT universale $\mathcal{U}$ che simuli il lavoro di ogni altra MdT:

Problemi Non Decidibili

Esistono funzioni non calcolabili attraverso una MdT

Problema della Terminazione (Halting Problem)

Problema della Fermata

La risposta è negativa

Simulatore

Linguaggi di
Programmazione

Macchine Astratte >> Traduzione >> Gerarchia

Dai Problemi ai Programmi

 

Problema >> procedura di Soluzione (algoritmo) >> Programma

descrizione informale $\longleftarrow \longrightarrow $ descrizione formale

Macchine e Linguaggi

Macchina fisica (calcolatore) $\mathcal{M}$: dispositivo capace di eseguire istruzioni
espresse in un linguaggio comprensibile per tale esecutore Macchina astratta per $\mathcal{L}$, denotabile con $\mathcal{M_L}$:
insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi in $\mathcal{L}$

Programma

Programma: descrizione di un algoritmo come sequenza di istruzioni in dato un linguaggio di programmazione $\mathcal{L}$

Definisce un processo deterministico (meccanico)

La computazione di un qualunque programma in $\mathcal{L}$ può essere simulata da una MdT

Linguaggio TM

Memoria (nastro)
$v_1$$v_2$$\ldots$$v_k$$v_{k+1}$$\ldots$␢ $v_n$␢ ␢ ␢ ␢ ␢ ␢ ␢ ␢ ␢ ␢$ $
var. inputvar. locali*registri e spazio di lavoro

INIT $v_i$inizializza la variabile locale $v_i$ a $0$
HOME $t$sposta la testina in posizione iniziale * avendo allocato $t$ variabili
LOAD $v_i,t$carica il valore della la variabile $v_i$ nel registro $t$
STOR $v_i,t$memorizza il valore del registro $T$ nella variabile $v_i$
RETURN $v_i$cancella le variabili e lascia la variabile $v_i$ nella posizione di output
CLEAR $t$cancella il valore del registro $t$
BRN $l,t$salta all'istruzione con l'etichetta $l$ se il valore del registro $t$ è $0$
GOTO $l$salta all'istruzione etichettata con $l$
NOPnessuna operazione (spesso con GOTO)
INC $t$incrementa il valore del registro $t$
DEC $t$incrementa il valore del registro $t$
ZERO $t$azzera il valore del registro $t$
Da Sudkamp

Linguaggio WHILE

\[ \begin{eqnarray} P & \to & \mathtt{begin}\ \mathtt{end} \mid \mathtt{begin}\ S\ \mathtt{end}\\ S & \to & I \mid S ; I\\ I & \to & A \mid \mathtt{while}\ T\ \mathtt{do}\ I \mid P\\ A & \to & V\ \mathtt{=}\ \mathtt{O} \mid V\ \mathtt{=}\ \mathtt{s(}V\mathtt{)} \mid V\ \mathtt{=}\ \mathtt{p(}V\mathtt{)}\\ T & \to & V \mathtt{\neq} V\\ V & \to & V \mid V L \mid V C\\ L & \to & \mathtt{A} \mid \mathtt{B} \mid \ldots\\ C & \to & \mathtt{0} \mid \mathtt{1} \mid \cdots \mid \mathtt{9} \end{eqnarray} \]
Si può dimostrare (teorema) che tale linguaggio è Turing-equivalente

Linguaggio WHILE | un programma


    begin
    X = 1;
    Y = 1;
    while Y ≠ 13 do 
      begin 
      Y = X + Y;
      X = X + Y              
      end
    R = X
    end
    

Struttura Macchina Astratta

macchina astratta | struttura

Ciclo d'esecuzione | Interprete dei Comandi

ciclo interprete istruzioni
  1. Acquisizione da memoria della prossima istruzione
  2. Decodifica dell'operazione e dei suoi operandi
  3. Acquisizione degli operandi
  4. Esecuzione dell'operazione
  5. Memorizzazione del risultato
  6. Se l'istruzione è HALT
    • termina
    altrimenti
    • vai al passo 1.

Traduzione | Interpretazione

inteprete

Traduzione | Compilazione

compilatore

Traduzione | Ibrida

ibrida

Schema Compilazione

schema-compilatore

Gerarchia di Macchine Astratte

gerarchia

Altri Paradigmi di Programmazione

Non solo linguaggi imperativi programmi basati su sequenze di istruzioni
COME fare per risolvere il problema? quale algoritmo?
ma anche linguaggi dichiarativi
QUALI sono i termini del problema? come descriverlo?
confronto fra paradigmi su Wikipedia

FINE

Domande ?
offline www.di.uniba.it/~fanizzi

Riferimenti

Testi

  1. Sudkamp: Languages and Machines An Introduction to the Theory of Computer Science. Addison-Wesley
  2. Sebesta: Concepts of Programming Languages 12/ed. Pearson
  3. Toffalori et al.: Teoria della computabilità e della complessità McGraw-Hill
  4. Hofstadter: Gödel, Escher, Bach: un' eterna ghirlanda brillante. Adelphi
  5. Doxiadis e Papadimitriou: Logicomix Guanda (graphic novel)

Link

Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.