*)
(* CH: We could create a super class UCheckable that includes the unsized assumption. And we could use sections to hide all the type class stuff from the paper. *)
(* CH: This will be affected by upcoming refactoring; proving it like this only because it appears in ITP submission *)

Lemma semForAllShrinkMonotonic :
forall {A C} `{Checkable C} `{Show A}
(gen : G A) (f : A -> C) shrinker `{SizeMonotonic _ gen},
(forall a, SizeMonotonicChecker (checker (f a))) ->
(semChecker (forAllShrink gen shrinker f) <->
forall a : A, semGen gen a -> semCheckable (f a)).