Vorausgesetzt, dass:
- Eine Sprache mit sehr ausdrucksstarken Typsystemen (z. B. Idris ) kann auch Escape-Mechanismen wie Fremdfunktionsschnittstellen / unsafePerformIO aufweisen.
- 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.
- 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?