Postulate in Idris

8

Gibt es aktuelle Informationen zur Art und Verwendung des postulate Konstrukts in Idris? Es gibt nichts zum Thema im Tutorial / Handbuch und ich kann auch nichts im Wiki finden. TIA.

    
Arets Paeglis 17.01.2015, 12:40
quelle

1 Antwort

11

Ich denke, wir würden das Wiki zu einer Referenz für so etwas entwickeln: Ссылка

Die Syntax für postulate lautet:

%Vor%

wie in

%Vor%

oder

%Vor%

Es führt einen unspezifizierten Wert dieses Typs ein. Dies kann nützlich sein, wenn Sie eine Instanz eines Typs benötigen, die Sie sonst nicht einführen könnten. Nehmen wir an, Sie möchten etwas implementieren, das einen Beweis benötigt, wie diese Semigroup-Typklasse einen Beweis benötigt, dass die Operation assoziativ ist, damit sie als gültige Halbgruppe betrachtet werden kann:

%Vor%

Das ist einfach genug, um Dinge wie Nats und Lists zu beweisen, aber was ist mit etwas wie einer Maschine int, wo die Operation außerhalb der Sprache definiert ist? Sie müssen zeigen, dass die von semigroupOpIsAssoc angegebene Typensignatur bewohnt ist, aber in der Sprache nicht möglich ist. Sie können also die Existenz einer solchen Sache postulieren, um dem Compiler zu sagen, "vertrauen Sie mir einfach auf dieses eine".

%Vor%

Programme mit solchen Postulaten können weiterhin ausgeführt und verwendet werden, solange keine postulierten "Werte" aus Laufzeitwerten erreichbar sind (was wäre ihr Wert?). Dies ist in Ordnung für Gleichheitsbedingungen, die nirgendwo außer Typprüfung verwendet werden und zur Laufzeit gelöscht werden. Eine Ausnahme sind Arten, deren Werte gelöscht werden können, z. der single-bewohnte Unit type:

%Vor%

kompiliert und läuft noch (druckt "()"); Der Wert des Typs Unit wird von der Implementierung von show nicht wirklich benötigt.

    
pdxleif 18.01.2015, 08:39
quelle

Tags und Links