Definition qs_body (l: list T) (qs0: {l': list T | length l' < length l} -> SimplyProfiled (list T)) :=
match l as l1 return (l1 = l -> SimplyProfiled (list T)) with
| nil => fun _ => ret (m:=SimplyProfiled) nil
| pivot :: t => fun Heq_l =>
lower <-
x <- filter SimplyProfiled (gt SimplyProfiled counted_cmp pivot) t;
qs0 (exist _ (proj1_sig x) (qs_definitions.mon_det.qs_obligation_1 SimplyProfiled (fun l H => qs0 (exist _ l H)) Heq_l x));
upper <-
x <- filter SimplyProfiled (counted_cmp pivot) t;
qs0 (exist _ (proj1_sig x) (qs_definitions.mon_det.qs_obligation_2 SimplyProfiled (fun l H => qs0 (exist _ l H)) Heq_l x));
ret (m:=SimplyProfiled) (lower ++ pivot :: upper)
end refl_equal.

(* Specifications: *)
Theorem qs_quadratic (l: list T): cost (qs counted_cmp l) <= sqrd (length l).
Proof with auto with arith.