anchor.diff:        let et = match expected_typ with | None -> t | Some t -> t 
         ([t], AEInt (i, t, et), [])
       | EReal r -> 
  -      let t = TName (Id "Real") in
  +      let t = TName (Id "real") in
         let et = match expected_typ with | None -> t | Some t -> t 
         ([t], AEReal (r, t, et), [])
       | EBitVector (n, i) ->
  -      let t = TName (Id "Bitvector") in
  +      let t = TName (Id "bitvector") in
         ([t], AEBitVector (n, i, t), [])
       | EBool b -> 
  -      let t = TName (Id "Bool") in
  +      let t = TName (Id "bool") in
         let et = match expected_typ with | None -> t | Some t -> t 
         ([t], AEBool (b, t, et), [])
       | EString s -> 
  -      let t = TName (Id "String") in
  +      let t = TName (Id "string") in
         ([t], AEString (s, t), [])
       | EOp (Uop UConst, [e]) ->
         let tv = next_type_var() in
  
positive.code:  {env with scope_mods = scope_mod :: env.scope_mods}
  
  let base_typ t =
    match t with 
    | TName (Id "int") -> TInt(NegInf, Inf)
    | TName (Id "unit") -> TInt (Int bigint.Zero, Inf)
    | TName (Id "nat") -> TInt(Int bigint.Zero, Inf)
    | TName (Id "reg") -> TInt(NegInf, Inf)
    | _ -> t
  
  let push_id env id t =
  
negative.code:   | (TName (Id x), TName (Id y)) -> x = y
    | (TApp (t1, ts1), TApp (t2, ts2)) ->
      (typ_equal t1 t2) && List.fold2 (fun b t1 t2 -> b && typ_equal t2 t2) true ts1 ts2
    | (TVar _, TVar _) -> false
    | (TInt (l1, h1), TInt(l2, h2)) ->
      (bnd_equal l1 l2) && (bnd_equal h1 h2)
    | (TArrow (xs, y), TArrow (us, v)) ->
      List.fold2 (fun b t1 t2 -> b&& typ_equal t1 t2) true xs us && (typ_equal y v)
    | _ -> false
  
  let is_subtype (t1:typ) (t2:typ): bool =
    match (t1, t2) with
  