Set Warnings "-extraction-opaque-accessed,-extraction".
Set Warnings "-notation-overridden,-parsing".
Require Export ExtLib.Structures.Monads.
Open Scope monad_scope.
Set Bullet Behavior "Strict Subproofs".
Derive ArbitrarySizedSuchThat for (fun x => eq x y).
Definition GenSizedSuchThateq_manual {A} (y_ : A) :=
let fix aux_arb (size : nat) (y_0 : A) {struct size} : G (option A) :=
match size with
| 0   => backtrack [(1, returnGen (Some y_0))]
| S _ => backtrack [(1, returnGen (Some y_0))]
end
in aux_arb^~ y_.

Theorem GenSizedSuchThateq_proof A (n : A) :
GenSizedSuchThateq_manual n = @arbitrarySizeST _ (fun x => eq x n) _.