2014-11-27 4 views
5

Ich bin derzeit versucht, Haskell Code von meinem Programmverifikation Lemma, die wie folgt aussieht zu generieren:Generierung von Haskell-Code von COQ: Logisches oder arity Wert verwendet

Lemma the_thing_is_ok : forall (e:Something), Matches e (calculate_value e). 

Gleich nach meinem Abschnitt endet, das tue ich:

Extraction Language Haskell. 
Recursive Extraction the_thing_is_ok 

Und es scheint nicht wirklich über etwas glücklich zu sein, da es die folgenden Fehler zurückgibt:

__ = Prelude.error "Logical or arity value used" 

Ich habe ein anderes Lemma, das scheinbar gut exportiert, aber ich konnte nicht herausfinden, was das Problem genau war. Irgendwelche Hinweise, wie man diesen Fehler umgehen kann?

+0

Ist Ihr Lemma in Prop, wie es normalerweise der Fall ist? Ich glaube, Coq verwirft während der Extraktion alle Prop-Informationen. Z.B. wenn Sie '{n: nat | einigePredicate n} 'Sie erhalten eine natürliche, aber ohne den Beweis des Prädikats. – chi

Antwort

7

Coq löscht Werte des Typs Prop während der Extraktion - sie werden als keine Berechnungsbedeutung betrachtet. Wenn Sie eine Berechnung haben, die eine Berechnung mit einer Prop erfordert, wird die Extraktion fehlschlagen.

+0

Okay, verstanden! Irgendwelche Problemumgehungen? –

+0

Schreiben Sie einfach Ihre Requisiten in Set. Alles sollte dort im Wesentlichen das Gleiche funktionieren - die einzigen funktionalen Unterschiede sind genau das, was Prop-Extraktion bricht. –

+0

Super! Danke vielmals ! –