Per i tipi di apprendimento dipendenti, sto riscrivendo il mio vecchio gioco Haskell in Idris. Attualmente il "motore" del gioco utilizza tipi integrali integrati, come ad esempio Word8
. Vorrei provare alcuni lemmi che coinvolgono le proprietà numeriche di quei numeri (ad esempio, quella doppia negazione è l'identità). Tuttavia, non è possibile dire qualcosa sul comportamento delle operazioni aritmetiche primitive. Cosa sarebbe meglio, per usare semplicemente believe_me
o altri handwaving (almeno per le proprietà più elementari), o per riscrivere il mio codice usando Nat
, Fin
e altri tipi "di alto livello" numerici?Operazioni primitive nelle prove
risposta
Suggerirei di usare postulate
per qualsiasi delle proprietà primitive di cui avete bisogno, facendo attenzione solo a usare cose che sono effettivamente vere per i tipi numerici in questione, ovviamente (che fondamentalmente significa solo stare attenti all'overflow). Così si può dire le cose come:
postulate add_commutes : (x, y : Int) -> x + y = y + x
believe_me
è meglio evitare a meno che non avete bisogno di qualche comportamento calcolo della prova. Ma, ad essere onesti, stiamo ancora provando a lavorare su queste cose quando ragioniamo sui primitivi ...
Credo che per il momento sia generalmente meglio usare Nat
quando è possibile. Gli sviluppatori di Idris stanno pianificando, alla fine, di implementare un meccanismo generale per sostituire i tipi di prova con quelli veloci primitivi nella compilazione, ma per ora ciò accade solo per Nat
. È possibile eseguire believe_me
se si desidera veramente, ma si finirebbe con funzioni che non sono così facili da lavorare con prove. Nota che se decidi di giocare con believe_me
, dovresti prendere in considerazione anche really_believe_me
, che a quanto pare rende più credibile il tipo di controllo.
- 1. Iniezione delle dipendenze nelle prove
- 2. Utilizzo del contenitore DI nelle prove unitarie
- 3. Come misurare le operazioni di base e primitive in C++?
- 4. Le variabili automatiche nelle prove di condizionali: GNU Make
- 5. Individuazione della definizione di una tattica nelle prove Coq
- 6. Texturing a sphere primitive
- 7. Come posso verificare gli errori nelle operazioni CRUD usando GORM?
- 8. operazioni di riga nelle data.table usando `da = .I`
- 9. prove sulle espressioni regolari
- 10. primitive conteggio in Neo4j
- 11. Lambda su matrici primitive
- 12. Tipi strutturali e primitive
- 13. Java: sincronizzazione su primitive?
- 14. Primitive personalizzate in C#?
- 15. ABCL compilazione e primitive
- 16. Primitive negative senza segno?
- 17. Primitive Json non valide
- 18. Quando utilizzare le primitive in Objective-C?
- 19. Quanto sono sufficienti le prove?
- 20. NUnit ignorare tutte le prove
- 21. CMake output dettagliato da prove
- 22. prove di karma su cromo
- 23. Prove di stress un'applicazione Android
- 24. Posso chiamare delete su primitive?
- 25. Lisp Flavored Erlang - Messaging primitive
- 26. Primitive numeriche e relativi suffissi
- 27. Eseguire prove SpecFlow senza Visual Studio
- 28. C: libreria di prove POSIX thread suite
- 29. Passaggio di dati JUnit tra prove
- 30. Che cos'è l'ingegneria software basata sulle prove?