Instance forAllMonotonic {A C} {_ : Checkable C} `{Show A} (g : G A) (f : A -> C)
`{SizeMonotonic _ g} `{forall x, SizeMonotonicChecker (checker (f x))} :
SizeMonotonicChecker (forAll g f).
Admitted.

(* Specifications: *)
Lemma semForAllSize {A C} `{Show A, Checkable C} (g : G A) (f : A -> C) (s:nat) :
semCheckerSize (forAll g f) s <->
forall (a : A), a \in semGenSize g s -> semCheckableSize (f a) s.
Lemma semForAllUnsized1 {A C} `{Show A, Checkable C} (g : G A) (f : A -> C)
`{Unsized _ g} :
(semChecker (forAll g f) <->
forall (a : A), a \in semGen g -> semCheckable (f a)).
Lemma semForAllUnsized2 {A C} `{Show A, Checkable C} (g : G A) (f : A -> C)
`{forall a, UnsizedChecker (checker (f a))} :
(semChecker (forAll g f) <->
forall (a : A), a \in semGen g -> semCheckable (f a)).
(* begin semForAllSizeMonotonic *)
Lemma semForAllSizeMonotonic {A C} `{Show A, Checkable C} (g : G A) (f : A -> C)
`{SizeMonotonic _ g} `{forall a, SizeMonotonicChecker (checker (f a))} :
(semChecker (forAll g f) <-> forall (a:A), a \in semGen g -> semCheckable (f a)).