fact: Fixpoint inject_term (t : term) : max_le t -> bterm := match t as t0 return max_le t0 -> bterm with | Var x => fun H => BVar (maxvar_var H) | Fun f ts => fun H => let fix inject_terms n (ts : terms n) : Vforall max_le ts -> bterms n := match ts as v in vector _ n0 return Vforall max_le v -> bterms n0 with | Vnil => fun _ => Vnil | Vcons t' ts' => fun H => Vcons (inject_term (proj1 H)) (inject_terms _ ts' (proj2 H)) end in BFun f (inject_terms (arity f) ts (maxvar_le_fun H)) end.
imports: CoLoR(ATerm VecUtil AInterpretation LogicUtil NatUtil)