Instance fmapUnsized {A B} (f : A -> B) (g : G A) `{Unsized _ g} :
Unsized (fmap f g).
Instance fmapMonotonic
{A B} (f : A -> B) (g : G A) `{SizeMonotonic _ g} :
SizeMonotonic (fmap f g).

(* Specifications: *)
Lemma semChooseSize A `{ChoosableFromInterval A} (a1 a2 : A) :
RandomQC.leq a1 a2 ->
forall size, semGenSize (choose (a1,a2)) size <-->
[set a | RandomQC.leq a1 a && RandomQC.leq a a2].
Lemma promoteVariant :
forall {A B : Type} (a : A) (f : A -> SplitPath) (g : G B) size
(r r1 r2 : RandomSeed),
randomSplit r = (r1, r2) ->
run (reallyUnsafePromote (fun a => variant (f a) g)) size r a =
run g size (varySeed (f a) r1).
Lemma semPromote A (m : Rose (G A)) :
semGen (promote m) <-->
codom2 (fun size seed => fmapRose (fun g => run g size seed) m).
Lemma semSized A (f : nat -> G A) :
semGen (sized f) <--> \bigcup_n semGenSize (f n) n.
Lemma semSized_alt A (f : nat -> G A) (H : forall n, SizeMonotonic (f n))
(H' : forall n m s,  n <= m -> semGenSize (f n) s \subset semGenSize (f m) s) :
semGen (sized f) <--> \bigcup_n (semGen (f n)).