È possibile calcolare se due funzioni sono uguali in estensione?


9

Se hai due funzioni che implementano un diverso algoritmo di ordinamento, è possibile dedurre dal codice sorgente che entrambe hanno le stesse proprietà esterne? Significa che entrambi avranno una possibile sequenza non ordinata come input e avranno una sequenza ordinata come output? In che modo queste proprietà esterne possono essere determinate dal codice sorgente? E come descriveresti queste proprietà esterne? Quale notazione verrebbe usata?

Le proprietà esterne potrebbero essere rese note definendole esplicitamente, ad esempio all'interno di un sistema di tipi, ma mi chiedo se ciò possa essere fatto in modo implicito. O è in qualche modo teoricamente impossibile dedurre questo tipo di semantica? Mi interessa sapere se ciò è possibile per funzioni arbitrarie, non solo per gli algoritmi di ordinamento, supponendo che cose come le funzioni si fermino sempre e non abbiano effetti collaterali.

Dovrei guardare la semantica denotazionale o non è correlata?

Sono interessato ai suggerimenti per la ricerca in questo settore e ai diversi termini usati per descrivere l'argomento che potrebbe aiutare la mia ricerca letteraria.

Risposte:


8

Sì. Se riesci a verificare che siano uguali, anche un computer.

Ecco una rapida specifica per un ordinamento intero in Coq:

Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.

Fixpoint is_sorted (l : natlist ) : bool :=
    match l with
    |  nil => true
    |  (cons x nil) => true
    |  (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
    end.

...

Theorem sort_spec : forall l, is_sorted (sort_list l).

Una specifica può essere codificata direttamente nella dichiarazione di ordinamento usando tipi dipendenti.

Per questo particolare problema, negli anni '70 John Darlington dimostrò che 6 famiglie di algoritmi di ordinamento possono essere derivate trasformando meccanicamente le specifiche di un ordinamento in un'implementazione; Credo che questo vada sotto il nome di "derivazione di programmi basati sulla semantica".

Nel mondo dell'ingegneria del software, trovare funzioni estensivamente equivalenti è noto come "rilevamento di cloni semantici".

Dave Clarke ha anche dato una buona risposta a questa domanda sul CS StackExchange: /cs/2059/how-do-you-check-if-two-algorithms-return-the-same-result -per-qualsiasi-ingresso

Tutto ciò rientra negli ombrelli dei metodi formali e dei linguaggi di programmazione . La semantica denotazionale è una classe di tecniche per la modellazione della semantica, ma è sfuggita al favore per essere difficile da usare rispetto alla semantica operativa.


Grazie per la risposta! Questo è esattamente quello che stavo cercando.
Matthijs Steen,

4
Sono fortemente in disaccordo con la dichiarazione secondo cui la semantica denotazionale è "caduta in disgrazia". Dipende in gran parte da chi chiedi.
Andrej Bauer,

5

L'uguaglianza estensiva nei linguaggi di programmazione completi di Turing è indecidibile in generale, ma ciò non dovrebbe impedirvi di essere in grado di verificare o falsificare che due funzioni specifiche siano estensivamente uguali.

f=gXα.f(X)=g(X)fgαβ


Grazie per la risposta. Esaminerò la logica di Hoare. La semantica denotazionale è difficile da definire rispetto alla logica Hoare o è solo meno adatta per la maggior parte delle lingue? L'uguaglianza estensiva è indecidibile in generale a causa del problema dell'arresto? Quindi se le funzioni dovessero sempre arrestarsi, come nei linguaggi funzionali totali, non sarebbe decidibile in generale? O ci sono altri motivi per essere indecidibili in generale?
Matthijs Steen,

P0

... ha un'eguaglianza contestuale decidibile. Ma nota che R. Loader ha dimostrato che anche la PCF finlandese ha un'indecisa equivalenza contestuale.
Martin Berger,

-2

Una risposta rapida (ammetto di non aver passato molto tempo ...) Il teorema di Rice dice che per qualsiasi domanda non banale, è indecidibile dire se la funzione calcolata da un programma avrà la proprietà o meno. Pertanto la domanda qui è indecidibile


1
Non afferma che "... per qualsiasi proprietà non banale di funzioni parziali ...", quindi non sarebbe forse decidibile per le funzioni totali?
Matthijs Steen,
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.