anchor.diff:      unify env m t
   *)
   
  -let compute_type_arguments (env:env) (u:unifier) (tparams:tformal list) (ts_opt:(tqual * typ) list option): substitutions =
  +let compute_type_arguments (env:env) (u:unifier) (tparams:tformal list) (ts_opt:(tqual * typ) list option):substitutions =
     let targOpts =
       match ts_opt with
       | None -> List.map (fun _ -> None) tparams
  
positive.code: 
  let compute_proc_instance (env:env) (u:unifier) (p:proc_decl) (ts_opt:(tqual * typ) list option):proc_instance =
    let targMap = compute_type_arguments env u p.ptargs ts_opt in
    let targs = Map.fold (fun l x t -> l@[t]) [] targMap in
    let arg_typ = compute_instance env u targMap in
    let fformal (x, t, storage, io, attrs):pformal =
      let t =
  
negative.code: 
  let compute_fun_instance (env:env) (u:unifier) (f:fun_decl) (ts_opt:(tqual * typ) list option):fun_instance =
    let targMap = compute_type_arguments env u f.ftargs ts_opt in
    let targs = List.map (fun (x, _, _) -> Map.find x targMap) f.ftargs in
    let arg_typ = compute_instance env u targMap in
    let args =
      List.fold
  