Kann ein Typensystem als Proofassistent für Fremdfunktionen dienen?

9

Vorausgesetzt, dass:

  1. Eine Sprache mit sehr ausdrucksstarken Typsystemen (z. B. Idris ) kann auch Escape-Mechanismen wie Fremdfunktionsschnittstellen / unsafePerformIO aufweisen.
  2. Es gibt Proof-Assistenten, mit denen einige Eigenschaften eines Programms bewiesen werden können, das in einer Sprache geschrieben ist, die kein Typsystem hat, das diese Eigenschaften ausdrücken kann.
  3. Die Curry-Howard-Korrespondenz zeigt, dass eine erfolgreich typgeprüfte Implementierung einer Funktion mit einem bestimmten Typ ein Beweis dafür ist, was durch diesen Typ ausgedrückt wird.

Kann man nicht triviale Beweise für eine Eigenschaft des Fremdsprachencodes im Typensystem der Muttersprache ausdrücken?

Stellen Sie sich zum Beispiel vor, ich hätte eine C-Funktion namens Stable_qsort, die Zahlen auf schrecklich clevere und effiziente Weise sortiert, während die Reihenfolge bereits gleicher Elemente beibehalten wird, und ein Idris-Programm, das Stable_qsort über seinen FFI aufruft, aber ich vertraue diesem relativ undurchsichtigen nicht C-Funktion. Könnte ich beweisen, dass die Funktion nicht für alle Eingaben in meinem Idris-Code gleiche Elemente neu anordnet, anstatt einen separaten Proof-Assistenten zu verwenden?

dukereg
quelle

Antworten:

10

Lange Rede, kurzer Sinn: Nein, das kannst du nicht. Eine Fremdfunktion ist wie eine Black Box, und der Typ, den Sie ihr zuschreiben, ist ein Versprechen, das Sie machen: In der Curry-Howard-Korrespondenz würde dies dem Hinzufügen eines Axioms zu Ihrer Theorie entsprechen.

Davon abgesehen gibt es Wege. In Coq gibt es zum Beispiel verschiedene Formalisierungen des C-Standards (zB Robbert Krebbers 'Arbeit ). Da Sie eine explizite Darstellung von C-Programmen und ihrer Semantik haben, können Sie Ihren Code direkt in den Proof-Assistenten schreiben und dann einige seiner Eigenschaften beweisen.

Gallais
quelle