Program Instance listOfMonotonic {A} (g : G A)
`{SizeMonotonic _ g } : SizeMonotonic (listOf g).
Next Obligation.
rewrite ! semListOfSize.
move => l [H1 H2]; split => //. by eapply leq_trans; eauto.
move => a /H2 Ha. by eapply monotonic; eauto.
Qed.

Lemma semOneof {A} (l : list (G A)) (def : G A) :
semGen (oneof def l) <-->
if l is nil then semGen def else \bigcup_(x in l) semGen x.