(* Copyright 2012-2015 by Adam Petcher.				* * Use of this source code is governed by the license described	* * in the LICENSE file at the root of the source tree.		*)
(* An operation that returns a (uniformly distributed) random element from a list *)
Set Implicit Arguments.
Section RndListElem.
Variable A : Set.
Hypothesis eqd : EqDec A.
Local Open Scope list_scope.
Definition rndListElem(ls : list A) : Comp (option A) :=
match (length ls) with
| O => ret None
| S _ =>
i <-$ [0 .. (length ls));
ret (nth_option ls i)
end.

(* Specifications: *)
Theorem rndListElem_wf :
forall (ls : list A),
well_formed_comp (rndListElem ls).