Nachdem ich in den letzten Monaten in Agda gearbeitet habe, bin ich gerade auf den Block abstract
in Agda gestoßen, der eine weitere Normalisierung des Begriffs außerhalb des Bereichs des Blocks verhindert.Agda-Standardbibliothek - Warum werden mehr Eigenschaften nicht als abstrakt markiert?
Verwenden, um die Funktionsweise meiner Lemmas zu verbergen hat stark reduziert die Zeit erforderlich, um meine Programme zu überprüfen. Wenn man durch die Agda Standard Library schaut, wird abstract
kaum benutzt. Es scheint mir, dass fast alles innerhalb einer Properties
Datei (zum Beispiel Data.Nat.Properties
) innerhalb eines abstract
Blocks sein könnte, da ich nicht an eine Verwendung denken kann, zum Beispiel darüber, wie sich die Addition als kommutativ erweist.
Ist das ein Fall, in dem Abstrakt ein neues Feature ist, das nicht in die Standardbibliothek gelangt ist? Oder gibt es eine gewisse Subtilität oder einen Nachteil bei der Markierung von Beweisen abstract
, die ich vermisse?
Danke, das macht Sinn! Aber wenn es (vielleicht) einen Plan gibt, "abstrakt" fallen zu lassen, wird dann ein alternatives Feature vorgeschlagen, um mit der Leistung zu helfen? Ich verstehe, dass Abstraktion durch Aufzeichnungen immer eine gute Idee ist, aber in meinem Fall müssten die Aufzeichnungen enorm sein und würden meinen Code sehr gut verschleiern, da sie logischerweise nur aus Performance-Gründen eingeführt würden. – user2667523
@ user2667523, ich weiß es nicht. Momentan können Sie ['radieren'] (https://github.com/agda/agda-stdlib/blob/f6212e49760a9fc2392b3d0889c8c7fc5e77634b/src/Relation/Binary/PropositionalEquality/TrustMe.agda#L25) verwenden, wenn Sie nicht möchten um teure Beweise zu berechnen (und es nicht mit Kanonizität durcheinander bringt). – user3237465
Kann ['proof-irrelevance'] (https://agda.github.io/agda-stdlib/Relation.Binary.PropositionalEquality.html#1420) in' zero' verwendet werden, um das Problem mit '+0 zu umgehen n's abstrakt sein? – Cactus