X-Git-Url: http://git.megacz.com/?p=coq-hetmet.git;a=blobdiff_plain;f=src%2FHaskSkolemizer.v;fp=src%2FHaskSkolemizer.v;h=87641020c430e2439de4efa1d3e26f11a20c4d42;hp=435b687968922e3066467e7a89b2ddba38b51785;hb=3282a2b78028238987a5a49e59d8e8d495aea0e1;hpb=d5f12624745edf327b49e515a1ebb5aeb265b70c diff --git a/src/HaskSkolemizer.v b/src/HaskSkolemizer.v index 435b687..8764102 100644 --- a/src/HaskSkolemizer.v +++ b/src/HaskSkolemizer.v @@ -492,7 +492,30 @@ Section HaskSkolemizer. apply nd_rule. apply SFlat. apply (@RLetRec Γ Δ lri x y nil). - apply (Prelude_error "RLetRec at depth>0"). + destruct (decide_tree_empty (mapOptionTreeAndFlatten take_arg_types_as_tree y @@@ (h :: t))); + [ idtac | apply (Prelude_error "used LetRec on a set of bindings involving a function type") ]. + destruct (eqd_dec y (mapOptionTree drop_arg_types_as_tree y)); + [ idtac | apply (Prelude_error "used LetRec on a set of bindings involving a function type") ]. + rewrite <- e. + clear e. + eapply nd_comp. + eapply nd_rule. + eapply SFlat. + eapply RArrange. + eapply ALeft. + eapply AComp. + eapply ARight. + destruct s. + apply (arrangeCancelEmptyTree _ _ e). + apply ACanL. + eapply nd_comp. + eapply nd_rule. + eapply SFlat. + eapply RArrange. + eapply AuAssoc. + eapply nd_rule. + eapply SFlat. + eapply RLetRec. destruct case_RCase. simpl.