Program Instance unsizedMonotonicChecker (c : Checker) `{UnsizedChecker c} : 
  SizeMonotonicChecker c.

(* Specifications: *)
Lemma mapTotalResult_idSize {C} `{Checkable C} (f : Result -> Result) (c : C) s : (forall res, resultSuccessful res = resultSuccessful (f res)) -> (semCheckerSize (mapTotalResult f c) s <-> semCheckableSize c s).
Lemma mapTotalResult_id {C} `{Checkable C} (f : Result -> Result) (c : C) : (forall res, resultSuccessful res = resultSuccessful (f res)) -> (semChecker (mapTotalResult f c) <-> semCheckable c).
Lemma semCallback_idSize {C} `{Checkable C} (cb : Callback) (c : C) (s : nat) : semCheckerSize (callback cb c) s <-> semCheckableSize c s.
Lemma semCallback_id {C} `{Checkable C} (cb : Callback) (c : C) : semChecker (callback cb c) <-> semCheckable c.
Lemma semWhenFail_idSize {C} `{Checkable C} (str : String.string) (c : C) s : semCheckerSize (whenFail str c) s <-> semCheckableSize c s.
Lemma semWhenFail_id {C} `{Checkable C} (str : String.string) (c : C) : semChecker (whenFail str c) <-> semCheckable c.
Lemma semPrintTestCase_idSize {C} `{Checkable C} (str : String.string) (c : C) s : semCheckerSize (printTestCase str c) s <-> semCheckableSize c s.
Lemma semPrintTestCase_id {C} `{Checkable C} (str : String.string) (c : C) : semChecker (printTestCase str c) <-> semCheckable c.
Lemma semShrinking_idSize {C A} {HCheck : Checkable C} (sh : A -> list A) (x : A) (pf : A -> C) (s : nat) : semCheckerSize (shrinking sh x pf) s <-> semCheckableSize (pf x) s.
Lemma semShrinking_id {C A} {HCheck : Checkable C} (sh : A -> list A) (x : A) (pf : A -> C) : semChecker (shrinking sh x pf) <-> semCheckable (pf x).
Lemma semCover_idSize {C} `{Checkable C} (b: bool) (n: nat) (str : String.string) (c : C) (s : nat) : semCheckerSize (cover b n str c) s <-> semCheckableSize c s.
Lemma semCover_id {C} `{Checkable C} (b: bool) (n: nat) (str : String.string) (c : C) : semChecker (cover b n str c) <-> semCheckable c.
Lemma semClassify_idSize {C} `{Checkable C} (b: bool) (str : String.string) (c : C) (s : nat) : semCheckerSize (classify b str c) s <-> semCheckableSize c s.
Lemma semClassify_id {C} `{Checkable C} (b: bool) (str : String.string) (c : C) : semChecker (classify b str c) <-> semCheckable c.
Lemma semLabel_idSize {C} `{Checkable C} (str : String.string) (c : C) (s : nat) : semCheckerSize (label str c) s <-> semCheckableSize c s.
Lemma semLabel_id {C} `{Checkable C} (str : String.string) (c : C) : semChecker (label str c) <-> semCheckable c.
Lemma semCollect_idSize {C} `{Checkable C} (str : String.string) (c : C) (s : nat) : semCheckerSize (collect str c) s <-> semCheckableSize c s.
Lemma semCollect_id {C} `{Checkable C} (str : String.string) (c : C) : semChecker (collect str c) <-> semCheckable c.
Lemma semReturnGenSize (qp : QProp) (s: nat) : semCheckerSize (returnGen qp) s <-> semCheckableSize qp s.
Lemma semReturnGen (qp : QProp) : semChecker (returnGen qp) <-> semCheckable qp.
Lemma semBindGenSize {A} (gen : G A) (f : A -> Checker) (s: nat): semCheckerSize (bindGen gen f) s <-> forall a, semGenSize gen s a -> semCheckerSize (f a) s.
Lemma semBindGenUsinzed1 {A} (gen : G A) (f : A -> Checker) `{Unsized _ gen} : (semChecker (bindGen gen f) <-> forall a, semGen gen a -> semChecker (f a)).
Lemma semBindGenUsinzed2 {A} (gen : G A) (f : A -> Checker) `{forall a, UnsizedChecker (f a)} : (semChecker (bindGen gen f) <-> forall a, semGen gen a -> semChecker (f a)).
Lemma semBindGenSizeMonotonic {A} (gen : G A) (f : A -> Checker) `{SizeMonotonic _ gen} `{forall a, SizeMonotonicChecker (f a)} : (semChecker (bindGen gen f) <-> forall a, semGen gen a -> semChecker (f a)).
Lemma semPredQPropSize (c : Checker) (s : nat) : semCheckableSize c s <-> (semCheckerSize c s).
Lemma semPredQProp (c : Checker) : semCheckable c <-> semChecker c.