We had initially added an option for translating Cryptol vectors as Coq lists, ignoring indices.
This might not be useful in practice: almost no proof can be done on the output code, as we lose the information that the lists will have the given size.
An alternative solution would be translating vectors as an existential package of the raw list, and a proof that its length is the index. For vectors, we currently insert a "tactic term", ltac:(solveUnsafeAssert), whenever a proof that relates two judgmentally different but propositionally equal indices should be inserted (say, when a vector of size n + 0 is used in a context where a vector of size n is needed).
We had initially added an option for translating Cryptol vectors as Coq lists, ignoring indices.
This might not be useful in practice: almost no proof can be done on the output code, as we lose the information that the lists will have the given size.
An alternative solution would be translating vectors as an existential package of the raw list, and a proof that its length is the index. For vectors, we currently insert a "tactic term",
ltac:(solveUnsafeAssert)
, whenever a proof that relates two judgmentally different but propositionally equal indices should be inserted (say, when a vector of sizen + 0
is used in a context where a vector of sizen
is needed).