fact: Variables (I : So -> set Te) (I_cp : forall b, cp (I b)) (comp_acc : forall g (ts : Tes (arity (typ 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))) (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))) (f : F) (ts : TypArgs f) (hts : vint I (inputs (typ f)) ts) (IH : forall g (us : TypArgs g), gt2 (mk_max_call f ts) (mk_max_call g us) -> vint I (inputs (typ g)) us -> int I (output (typ g) (arity (typ g))) (apps (Fun g) us)) (n : nat) (ls : Tes n) (s0 : X -> Te) (h : 0+n <= arity (typ f)) (hls : Vmap (subs s0) ls ~~~ Vsub ts h).
imports: Coq(Morphisms Basics) CoLoR(LogicUtil LCompSimple VecUtil RelUtil LCall LCompInt SetUtil SN NatUtil LCompRewrite EqUtil)