The content of this module is based on the paper Applications of Applicative Proof Search by Liam O'Connor https://doi.org/10.1145/2976022.2976030 The main difference is that we use `Colist1` for the type of generators rather than `Stream`. This allows us to avoid generating many duplicates when dealing with finite types which are common in programming (Bool) but even more so in dependently typed programming (Vect 0, Fin (S n), etc.).