fact: Fixpoint dilemma1R (f : list rZ -> rArray vM -> mbDT) (v : rNat) (n : nat) {struct n} : rArray vM -> mbDT := fun Ar => match rArrayGet _ Ar v with | ref _ => match n with | O => quatuor _ _ _ _ Ar false nil emptyTrace | S m => dilemma1R f (rnext v) m Ar end | class _ => match dilemma1 f Ar (rZPlus v) rZTrue with | quatuor Ar1 true L1 T1 => quatuor _ _ _ _ Ar1 true L1 T1 | quatuor Ar1 false L1 T1 => match n with | O => quatuor _ _ _ _ Ar1 false L1 T1 | S m => match dilemma1R f (rnext v) m Ar1 with | quatuor Ar2 b L2 T2 => quatuor _ _ _ _ Ar2 b (appendRz L1 L2) (appTrace T1 T2) end end end end.