Require Coq.Lists.List.
Require Coq.Sets.Ensembles.
Global Set Implicit Arguments.
Delimit Scope comp_scope with comp.
Inductive Comp : Type -> Type :=
| Return : forall A, A -> Comp A
| Bind : forall A B, Comp A -> (A -> Comp B) -> Comp B
| Pick : forall A, Ensemble A -> Comp A.
Notation ret := Return.
Notation "x <- y ; z" := (Bind y%comp (fun x => z%comp))
(at level 81, right associativity,
format "'[v' x  <-  y ; '/' z ']'") : comp_scope.

Axiom refine : forall {A} (old : Comp A) (new : Comp A), Prop.