anchor.diff:        let e = eapply (Operator (x + "?[]")) [e2; e1] in
         let (t, ae) = infer_exp env u e expected_typ in
         match ae with
  -      | (AE_Apply (_, _, [e2; e1]), _) -> ret t.norm_typ (AE_Op (Bop BIn, [e1; e2])) // TODO: save x or t1
  +      | (AE_Apply (_, _, [e2; e1]), _) -> ret t (AE_Op (Bop BIn, [e1; e2])) // TODO: save x or t1
         | _ -> internalErr ("EOp Bop BIn")
       )
   (*
  
positive.code:   normalize_type env t1 = normalize_type env t2
  
  // Check t1 <: t2
  let is_subtype (env:env) (t1:norm_typ) (t2:norm_typ):bool =
    match (t1.norm_typ, t2.norm_typ) with
    | (TBool BpBool, TBool BpProp) -> true
    | (TInt (l1, h1), TInt (l2, h2)) -> bnd_le l2 l1 && bnd_le h1 h2
    | _ -> t1 = t2
  
negative.code: let join2 (env:env) (t1:typ) (t2:typ):typ option =
    let t1 = normalize_type env t1 in
    let t2 = normalize_type env t2 in
    match (t1, t2) with
    | (TBool BpBool, TBool BpBool) -> Some (TBool BpBool)
    | (TBool BpProp, TBool BpBool) | (TBool BpBool, TBool BpProp) | (TBool BpProp, TBool BpProp) -> Some (TBool BpProp)
  