Perché il sottotipo comportamentale è indecidibile?


12

Il lavoro di Liskov in quest'area si è concentrato sul sottotipo comportamentale, che oltre alla sicurezza dei sistemi di tipo discussa in questo articolo richiede anche che i sottotipi preservino tutti gli invarianti garantiti dai supertipi in alcuni contratti. [3] Questa definizione di sottotipo è generalmente indecidibile, quindi non può essere verificata da un controllo di tipo.

Da: http://www.wikiwand.com/en/Subtyping#/Function_types

Risposte:


24

Lascia che il contratto di operazione odi Tipo Tsia che si arresta per tutti gli input. Ora decidi se l'operazione odel sottotipo S <: Tsoddisfa quel contratto: hai appena risolto il problema di arresto .

Più in generale, S::odeve calcolare la stessa funzione di T::ose S <: T. Decidere se due programmi calcolano la stessa funzione viene chiamato Problema di funzione ed equivale a risolvere il problema di interruzione.

In generale, decidere staticamente qualsiasi proprietà di runtime non banale è quasi sempre equivalente al problema di Halting.


3
L'ultima riga lo inchioda. Nel momento in cui ti piacerebbe dimostrare una proprietà su ciò che il programma potrebbe fare in un contesto comportamentale, stai entrando nell'impossibile. Il motivo per cui i sistemi di tipi e gli strumenti di analisi statica funzionano è che trattano un linguaggio diverso (dei tipi di programma, dell'ambito delle variabili nel programma e così via) e non le proprietà di come il programma viene eseguito direttamente.
Benjamin Gruenbaum,

5
@BenjaminGruenbaum La risposta di Jorg e il tuo commento sono corretti ma c'è una sottigliezza che vorrei chiarire. Spesso è possibile dimostrare una proprietà su un programma specifico . Semplicemente non esiste un algoritmo che puoi seguire alla cieca che funzionerà per tutti i programmi. Considera questo metodo scritto in Java: BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }non è difficile dimostrare che un particolare metodo restituisce sempre la somma degli elementi di un array intero e non fa nient'altro (a condizione che l'argomento non sia nullo).
Doval,

1
E quando non è equivalente al problema dell'arresto, spesso è anche peggio . Perché impossibile non era già abbastanza difficile.
user2357112 supporta Monica il

2
O per mettere il punto di Doval in un altro modo (schietto), questo è esattamente il motivo per cui i linguaggi completi non- turing sono interessanti e utili. Spesso non è necessaria la completezza di Turing (certamente a livello di modulo) per un vero lavoro.
Leushenko,

@Doval: ottimo punto. Sebbene sia vero che non è possibile avere un algoritmo che dimostri la chiusura e / o la correttezza di un programma casuale, è possibile scrivere programmi in modo tale da poterne dimostrare la correttezza.
Giorgio,

12

Perché quasi tutte le domande sul comportamento dei programmi sono indecidibili. Secondo il teorema di Rice , qualsiasi problema decisionale del modulo:

Alcuni programmi calcolano funzioni che dispongono di questa proprietà, altri programmi calcolano funzioni che non dispongono di questa proprietà. Dato un programma P, la funzione calcolata da P ha la proprietà di cui sopra o no?

è indecidibile. Quindi, ad esempio, non puoi sempre distinguere il codice che calcola il quadrato di un input dal codice che non lo fa. Anche se in casi semplici, è spesso possibile dimostrare che una funzione lo fa o non lo fa, non esiste una procedura generale che funzioni per tutti i programmi.

Quasi ogni invariante comportamentale interessante rientra nel teorema di Rice, dal momento che quelle affermazioni raramente (se mai) parlano di come appare internamente il metodo, solo di ciò che restituisce e di quali effetti collaterali provoca in risposta a determinati input.


3
Potresti chiarire un po ': non è che un singolo programma, per quanto patologico, possa resistere a tutte le analisi, ma che, per ogni data analisi, esiste almeno un programma che non può essere adeguatamente classificato con quello.
Nathan Tuggy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.