Definition gt (x y: T): M bool := liftM negb (le x y).

Lemma body_eq: forall (x0 : list T) (g h : {y : list T | length y < length x0} -> M (list T)), (forall (x1 : list T) (p p' : length x1 < length x0), g (exist (fun y : list T => length y < length x0) x1 p) = h (exist (fun y : list T => length y < length x0) x1 p')) -> body x0 g = body x0 h.