Instance ArbNatGenCorrect : Correct nat arbitrary.

(* Specifications: *)
Lemma arbInt_correct s :
semGenSize arbitrary s <-->
[set z | (- Z.of_nat s <= z <= Z.of_nat s)%Z].
Lemma arbBool_correctSize s :
semGenSize arbitrary s <--> [set: bool].
Lemma arbNat_correctSize s :
semGenSize arbitrary s <--> [set n : nat | (n <= s)%coq_nat].
Lemma arbInt_correctSize : semGen arbitrary <--> [set: Z].
Lemma arbList_correct:
forall {A} `{H : Arbitrary A} (P : nat -> A -> Prop) s,
(semGenSize arbitrary s <--> P s) ->
(semGenSize arbitrary s <-->
(fun (l : list A) => length l <= s /\ (forall x, List.In x l -> P s x))).
Lemma arbOpt_correct:
forall {A} `{H : Arbitrary A} (P : nat -> A -> Prop) s,
(semGenSize arbitrary s <--> P s) ->
(semGenSize arbitrary s <-->
(fun (m : option A) =>
match m with
| None => true
| Some x => P s x
end)).
Lemma arbPair_correctSize
{A B} `{Arbitrary A} `{Arbitrary B} (Sa : nat -> set A)
(Sb : nat -> set B) s:
(semGenSize arbitrary s <--> Sa s) ->
(semGenSize arbitrary s <--> Sb s) ->
(semGenSize arbitrary s <--> setX (Sa s) (Sb s)).