fact: Definition dilemma1 (f : list rZ -> rArray vM -> mbDT) (Ar : rArray vM) (a b : rZ) : mbDT := match addEqMem Ar a b with | triple Ar1 true L1 => quatuor _ _ _ _ Ar false nil emptyTrace | triple Ar1 false L1 => match addEqMem Ar a (rZComp b) with | triple Ar2 true L2 => quatuor _ _ _ _ Ar false nil emptyTrace | triple Ar2 false L2 => match f L1 Ar1 with | quatuor Ar1' true L1' T1' => match f L2 Ar2 with | quatuor Ar2' true L2' T2' => quatuor _ _ _ _ Ar true nil (dT a b T1' T2') | quatuor Ar2' false L2' T2' => quatuor _ _ _ _ Ar2' false (appendRz L2 L2') (dT a b T1' T2') end | quatuor Ar1' false L1' T1' => match f L2 Ar2 with | quatuor Ar2' true L2' T2' => quatuor _ _ _ _ Ar1' false (appendRz L1 L1') (dT a b T1' T2') | quatuor Ar2' false L2' T2' => match interMem Ar1' Ar2' Ar (appendRz L1 L1') (appendRz L2 L2') with | (Ar', nil) => quatuor _ _ _ _ Ar' false nil emptyTrace | (Ar', L') => quatuor _ _ _ _ Ar' false L' (dT a b T1' T2') end end end end end.