(* We hide the implementation of generators behind this interface. The rest of the framework and user code are agnostic to the internal representation of generators. The proof organization/abstraction tries to follow this code organization/abstraction. We need to expose quite a bit on the proof side for this to work though. *)
Set Warnings "-extraction-opaque-accessed,-extraction".
Set Warnings "-notation-overridden,-parsing".
From ExtLib.Structures Require Export
Functor Applicative Monads.
Open Scope monad_scope.
RandomQC RoseTrees Sets.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Set Bullet Behavior "Strict Subproofs".
Definition isNone {T : Type} (u : option T) :=
match u with
| Some _ => false
| None => true
end.

(* Specifications: *)
Lemma randomSplit_codom : codom randomSplit <--> setT.
Module Type Sig.