Section measure_rect.
Variable (X : Type) (m : X -> nat) (P : X -> Type).
Hypothesis F : forall x, (forall x', m x' < m x -> P x') -> P x.
Arguments F : clear implicits.
Let R x y := m x < m y.
(* R is WF when all elements are accessible *)
Let Rwf : forall x : X, Acc R x.
(* Structural decrease on the Acc predicate and no singleton elimination here because the Acc predicated is pattern matched (by destruct) in Prop context *)
Let Fix_F : forall x : X, Acc R x -> P x.

Theorem measure_rect_fix x :
measure_rect x = @F x (fun y _ => measure_rect y).