fact: Fixpoint makeTripletsFun (l : list triplet) (n : rNat) (e : rExpr) {struct e} : tripletResult := match e with | rV i => tRC l (rZPlus i) n | rN p => match makeTripletsFun l n p with | tRC l' s' n' => tRC l' (rZComp s') n' end | rNode node p q => match makeTripletsFun l n p with | tRC l' s' n' => match makeTripletsFun l' n' q with | tRC l2 s2 n2 => tRC (Triplet node (rZPlus n2) s' s2 :: l2) (rZPlus n2) (rnext n2) end end end.