Another Tutorial
This is a placeholder page. Replace it with your own content.
Proof Searching of Juvix
Data Structures in Juvix should provide complimentary proofs that are relevant to the users.
The Argument for Implicit Refinements Over Indexed Types For Structures
The current thought on how to do that is as follows
Provide a base structure with no extra information as the main module
So
module Data.Map where type Map a b = ...
Provide various libraries that provides proofs over the structure
an example would be
module Data.Map.Proofs.Size
which would give all proofs about size that can be automatically applied to a piece of code.
Provide a module
module Data.Map.Proofs
which gives back all available refinements defined by the library.
This gives the programmer a heavy weight way of figuring out what proofs/refinements are needed in order to allow your code to verify
This module is not intended to be left in final, code but in process of developing a module
Thus the environment itself should give back what refinements were used in verifying said expression.
I believe this is superior to indexed types, as this would allow the programmer to only add types they care about, and not be forced to consider moving their list to vector if they care about length.
This use of index types, would explode the number of variants of a particular type.
This also forces the programmer to have to understand that a vector is a list and thus an UI on these variants should be maintained.