anchor.diff:    push_scope_mod env (Const (id, t))
      
   let push_rets (env:env) (rets:pformal list):env =
  -  {env with scope_mods = List.fold (fun s (x, t, g, io, a) -> Variable (x, t):: s) env.scope_mods rets}
  +  {env with scope_mods = List.fold (fun s (x, t, g, io, a) -> Variable (x, (base_typ t)):: s) env.scope_mods rets}
   
   let push_params_without_rets (env:env) (args:pformal list) (rets:pformal list):env =
     let arg_in_rets arg l = List.exists (fun elem -> elem = arg) l in
  
positive.code:       let (t, ae, s) = infer_exp env e (Some et) in
        let ae = AEOp (Uop UOld, [ae], tv, et) in
        (tv, ae, s@[(t, tv)])
      | EOp (Bop op, [e1; e2]) when isArithmeticOp op ->
        // op in {+, -, *, /, %} 
        let tv = next_type_var() in
  
negative.code:   | (TApp (x, ys), TApp (u, vs)) -> 
      let tc = List.fold2 (fun (l:typ_constraints) t1 t2 -> l@[(t1, t2)]) [] ys vs in
      unify env m ([(x, u)]@tc)
    | (TName (Id "bool"), TName (Id "prop")) 
    | (TName (Id "prop"), TName (Id "bool")) -> 
      let u = TName (Id "prop") in
      let m = bind_typ m s u in bind_typ m t u
    | (TName (Id x), TName (Id y)) -> 
      if x = y then m else err ("type mismatch ")
    | _ -> err ("type mismatch ")
  