Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> Programmazione >> Computer Programming Languages >> .

Qual è un esempio di un linguaggio indecidibile?

Uno degli esempi più famosi di un linguaggio indecidenziale è il problema di arresto .

Il problema di arresto:

Il problema di arresto è il problema della determinazione, data la descrizione di un programma arbitrario per computer e un input, se il programma finirà in esecuzione o continuerà a funzionare per sempre. Più formalmente, chiede:

* Input: `` dove:

* `P` è una macchina Turing (o una rappresentazione di qualsiasi programma per computer per uso generale).

* `I` è l'input per la macchina Turing` P`.

* Output:

* "Sì" se la macchina Turing `p` si interrompe (termina l'esecuzione) quando viene dato l'input` io`.

* "No" se la macchina Turing `p` non si ferma (loop per sempre) quando viene data input` io`.

Perché è indecidibile:

Il problema di arresto è indecidibile, il che significa che esiste * no * Turing Machine (o algoritmo) che può risolvere correttamente il problema di arresto per * tutti * possibili input ``.

La prova viene in genere fatta per contraddizione. Supponiamo che ci sia * una macchina Turing `h` che risolve il problema di arresto. `H` prende` `come input e output" sì "se` p` si interrompe su `io` e" no "se` p` loop per sempre su `io`.

Quindi, possiamo costruire un'altra macchina Turing `d` (spesso chiamato" diagonalizer ") che utilizza` h` come subroutine:

`` `

Turing Machine D (P):

1. Esegui H (P, P) // Esegui H con P come programma e input

2. Se H (P, P) restituisce "Sì" (P si interrompe sull'ingresso P):

Quindi loop per sempre.

3. Se H (P, P) restituisce "No" (P loop per sempre sull'ingresso P):

Quindi fermarsi.

`` `

Ora, cosa succede quando eseguiamo `d` con se stesso come input:` d (d) `?

* Scenario 1:Supponiamo `d (d)` Halts.

- Ciò significa che nel passaggio 1, `h (d, d)` restituito "sì" (perché `d` si ferma se e solo se` h (d, d) `dice che` d` si ferme sull'ingresso `d`).

- ma se `h (d, d)` restituiva "sì", allora `d` è stato progettato per lottare per sempre (nel passaggio 2). Ciò contraddice la nostra ipotesi che `d (d)` si fermi.

* Scenario 2:Supponi `d (d)` loop per sempre.

- Ciò significa che nel passaggio 1, `h (d, d)` restituito "no" (perché `d` loop per sempre se e solo se` h (d, d) `dice che` d` loops on input `d`).

- ma se `h (d, d)` restituiva "no", allora `d` è stato progettato per fermarsi (al passaggio 3). Ciò contraddice la nostra ipotesi che `d (d)` loop per sempre.

Poiché entrambi gli scenari portano a una contraddizione, la nostra ipotesi iniziale che esiste una macchina Turing `H` che risolve il problema di arresto deve essere falso. Pertanto, il problema di arresto è indecidibile.

in termini più semplici: Non puoi scrivere un programma che può sempre prevedere in modo affidabile se un altro programma alla fine si fermerà o funzionerà per sempre.

Significato:

L'indecidabilità del problema di arresto ha profonde implicazioni per l'informatica. Mostra che ci sono limiti fondamentali a ciò che i computer possono calcolare. Serve anche come base per dimostrare l'indecidabilità di molti altri problemi. Se riesci a dimostrare che risolvere un altro problema ti consentirebbe di risolvere il problema di arresto, allora anche quell'altro problema deve essere indecidibile.

 

Programmazione © www.354353.com