fact: Variables (I : So -> set Te) (I_cp : forall b, cp (I b)) (comp_acc : forall g (ts : TypArgs g), int I (Base (output_base (typ g))) (apps (Fun g) ts) -> forall i (hi : Acc g i), int I (Vnth (inputs (typ g)) (Acc_arity hi)) (Vnth ts (Acc_arity hi))) (comp_fun : forall f (ts : TypArgs f), vint I (inputs (typ f)) ts -> (forall u, apps (Fun f) ts =>R u -> I (output_base (typ f)) u) -> I (output_base (typ f)) (apps (Fun f) ts)) (gt1 : En -> relation call) (gt2 : relation max_call) (gt2_wf : WF gt2) (gt2_mcaeq : Proper (mcaeq ==> mcaeq ==> impl) gt2) (gt2_gt1 : forall E f n (ls : Tes n) g p (us : Tes p), n <= arity (typ f) -> p <= arity (typ g) -> gt1 E (mk_call f ls) (mk_call g us) -> forall s (ts' : Tes (arity (typ f) - n)) (us' : Tes (arity (typ g) - p)) (nf : n + (arity (typ f) - n) = arity (typ f)) (pg : p + (arity (typ g) - p) = arity (typ g)), vint I (inputs (typ f)) (Vapp (Vmap (subs s) ls) ts') -> (forall x A, MapsTo x A E -> ~XSet.In x (fvs ls) -> int I A (s x)) -> gt2 (mk_max_call f (Vcast (Vapp (Vmap (subs s) ls) ts') nf)) (mk_max_call g (Vcast (Vapp (Vmap (subs s) us) us') pg))) (gt2_clos_vaeq : forall f ts us, vint I (inputs (typ f)) ts -> ts ==>R us -> gt2 (mk_max_call f ts) (mk_max_call f us)) (lhs_cc_rhs : forall l r (h : rule l r), cc gt1 (lhs_fun h) (lhs_args h) XMap.empty r (output (typ (lhs_fun h)) (lhs_nb_args h))).
imports: Coq(Morphisms Basics) CoLoR(LogicUtil LCompSimple VecUtil RelUtil LCall LCompInt SetUtil SN NatUtil LCompRewrite EqUtil)