diff --git a/stdpp/countable.v b/stdpp/countable.v index 5677e2d686ee62a69878d98a852da84937d22b19..73993cebc86690b92816c5e5896f0faa6e94501c 100644 --- a/stdpp/countable.v +++ b/stdpp/countable.v @@ -313,6 +313,18 @@ Qed. (** ** Generic trees *) Local Close Scope positive. +(** This type can help you construct a [Countable] instance for an arbitrary +(even recursive) inductive datatype. The idea is tht you make [T] something like +[T1 + T2 + ...], covering all the data types that can be contained inside your +type. +- Each non-recursive constructor to a [GenLeaf]. Different constructors must use + different variants of [T] to ensure they remain distinguishable! +- Each recursive constructor to a [GenNode] where the [nat] is a (typically + small) constant representing the constructor itself, and then all the data in + the constructor (recursive or otherwise) is put into child nodes. + +This data type is the same as `GenTree.tree` in mathcomp, see +https://github.com/math-comp/math-comp/blob/master/ssreflect/choice.v *) Inductive gen_tree (T : Type) : Type := | GenLeaf : T → gen_tree T | GenNode : nat → list (gen_tree T) → gen_tree T.