Questa è una domanda mal formulata, quindi prima diamo un senso. Lo farò secondo lo stile della teoria della calcolabilità. Quindi userò i numeri anziché le stringhe: un pezzo di codice sorgente è un numero, piuttosto che una stringa di simboli. Non importa, si può sostituire con s t r i n g tutto di seguito.Ns t r i n g
Lasciate essere una funzione coppia .⟨ M , n ⟩
Supponiamo che un linguaggio di programmazione sia dato dai seguenti dati:L = ( P, e v )
- un insieme decidibile di "programmi validi", eP⊆ N
- un calcolabile e parziale funzione .e v : P× N → N
Il fatto che sia decidibile significa che esiste una mappa calcolabile totale v a l i d : N → { 0 , 1 } tale che v a l i d ( n ) = 1Pv a l i d:N→{0,1} . Informalmente, stiamo dicendo che è possibile dire se una determinata stringa è un pezzo di codice valido. La funzione e v è essenzialmente un interprete per la nostra lingua: e v ( m , n ) esegue il codice m sull'input n - il risultato potrebbe essere indefinito.valid(n)=1⟺n∈Pevev(m,n)mn
Ora possiamo introdurre alcuni termini:
- Una lingua è totale se è una funzione totale per tutti m ∈ P .n↦ev(m,n)m∈P
- Una lingua interpreta la lingua L 2 = ( P 2 , e v 2 )L1=(P1,ev1) L2= ( P2, e v2) se esiste tale che e v 1 ( u , ⟨ n , m ⟩ ) ≃ e v 2 ( n , m ) per tutto n ∈ Pu ∈ P1e v1( U , ⟨ n ,m⟩)≃ev2( n , m)n ∈Pe . Qui u è il simulatore per L 2 implementato in L 1 . È anche noto come il programma universale per L 2 .m ∈NuL2L1L2
Altre definizioni di " interpreta L 2 " sono possibili, ma non mi permetta di entrare in questo ora.L1L2
Diciamo che e L 2 sono equivalenti se si interpretano a vicenda.L1L2
Esiste il linguaggio "più potente" delle macchine di Turing (che si chiama "una macchina di Turing") in cui n ∈ N è una codifica di una macchina di Turing e φ ( n , m ) è la funzione calcolabile parziale che "esegue la macchina di Turing codificata da n sull'ingresso m ". Questo linguaggio può interpet tutte le altre lingue, ovviamente, dal momento che abbiamo richiesto e v di essere calcolabile.T=(N,φ)n∈Nφ(n,m)nmev
La nostra definizione di linguaggi di programmazione è molto rilassata. Affinché ciò accada, richiediamo altre tre condizioni:
- implementa la funzione successore: c'èL tale che e v ( s u c c , m ) = m + 1 per tutti m ∈ N ,succ∈Pev(succ,m)=m+1m∈N
- implementa la funzione diagonale: c'è d iL tale che e v ( d i una g , m ) = ⟨ m , m ⟩ per tutti m ∈ N ,dio a g∈ Pe v ( dio a g, M ) = ⟨ m , m ⟩m ∈ N
- è chiuso per composizione di funzioni: se L implementa f e g implementa anche f ∘ g ,LLfgf∘ g
Un risultato classico è questo:
Teorema: se una lingua può interpretare se stessa, non è totale.
Prova. Supponiamo è il programma universale per un totale langauge L implementato in L , cioè per tutti m ∈ P e n ∈ N ,
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
Come successore, diagonale ed e v ( u , - ) sono implementati in L , così è la loro composizione k ↦uLLm ∈ Pn ∈ N
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
e v ( u , - )L . Esiste
n 0 ∈ P tale che
e v ( n 0 , k ) ≃ ⟨ k , k ⟩ ) + 1 , ma poi
e v ( u , ⟨ n 0 , n 0 ⟩ ) ≃ e v (k ↦ e v ( u , ⟨ k , k ⟩ ) + 1n0∈ Pn 0 , n 0e v ( n0, K ) ≃ e v ( u , ⟨ k , k ⟩ ) + 1
Poiché non c'è un numero uguale proprio successore, ne consegue che
L non è totale o che
L non viene interpretata stessa. QED.
e v ( u , ⟨ n0, n0⟩ ) ≃ e v ( n0, n0) ≃ e v ( u , ⟨ n0, n0⟩ ) + 1
LL
Ricorda che potremmo sostituire la mappa successiva con qualsiasi altra mappa senza fixpoint.
Ecco un piccolo teorema che penso risolverà un malinteso.
Teorema: ogni lingua totale può essere interpretata da un'altra lingua totale.
Prova. Sia una lingua totale. Otteniamo un L ′ totale che interpreta L confinando con L il suo valutatore e v . Più precisamente, lasciare che P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } e definire e v ' come
e v ' ( ⟨ b , n ⟩ , mLL'LLe vP'= { ⟨ 0 , n ⟩ | n ∈ P} ∪ { ⟨ 1 , 0 ⟩ }e v'
Ovviamente,L'è totale perchéLè totale. Per vedere cheL'in grado di simulareLbasta prendereu=⟨1,0
e v'( ⟨ B , n ⟩ , m ) = { e v ( n , m )e v ( m0, m1)se b = 0 ,se b = 1 e m = ⟨ m0, m1⟩
L'LL'L , Da allora
e v ' ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) , come richiesto. QED.
u = ⟨ 1 , 0 ⟩e v'( U , ⟨ m , n ⟩ ) ≃ e v ( m , n )
Esercizio: [aggiunto il 27/06/2014] La lingua costruita sopra non è chiusa sotto composizione. Correggi la dimostrazione del teorema in modo che L ' soddisfi i requisiti extra se L lo fa.L'L'L
LL'L'LLL