fact: Fixpoint FreshDistinctRenamings (VT : VarType) (lv :list (typ VT )) (lvAvoid :list (typ VT )) {struct lv} : (AssocList (typ VT ) (typ VT )) := match lv with | [] => [] | vh :: vtl => let newvar := ((fresh VT) lvAvoid [vh]) in (vh,newvar) :: (FreshDistinctRenamings VT vtl (newvar :: lvAvoid)) end.
imports: AssociationList Omega