anchor.diff:              MLE_Var (lresolve lenv x.v.realname)
   
           | Exp_fvar (x, false) ->
  -            MLE_Name (mlpath_of_lident mlenv x.v)
  +            if Util.starts_with x.v.ident.idText "is_" then
  +                let sub = Util.substring_from x.v.ident.idText 3 in
  +                let mlid = fresh "_discr_" in
  +                MLE_Fun([mlid], MLE_Match(MLE_Name([], idsym mlid), [
  +                    MLP_CTor(mlpath_of_lident mlenv {x.v
  +                      with ident={x.v.ident with idText = sub}; str=sub}, [MLP_Wild]), None, MLE_Const(MLC_Bool true) ;
  +                    MLP_Wild, None, MLE_Const(MLC_Bool false)]))
  +            else MLE_Name (mlpath_of_lident mlenv x.v)
   
           | Exp_fvar (x, true) ->
              mkCTor x.v []
  
positive.code:                                            MLE_Proj (arg, (path_of_ns mlenv (List.rev cons), c.v.ident.idText))
                          | Some f, arg::args -> let ids = List.map (fun x -> x.idText) f in
                            //                     assert (List.mem c.v.ident.idText ids); 
                                                 MLE_App (MLE_Proj (arg, (path_of_ns mlenv (List.rev cons), c.v.ident.idText)), args)
                          | _, _ -> MLE_App (mlexpr_of_expr mlenv rg lenv sube, args))
                    | _ -> MLE_App (mlexpr_of_expr mlenv rg lenv sube, args))
  
  
negative.code:     let tenv, tparams   = tenv_of_tvmap (List.map some tparams) in
  
      (tparams, mlty_of_ty mlenv tenv (rg, ty))
  
  (* -------------------------------------------------------------------- *)
  let rec mlpat_of_pat (mlenv : mlenv) (rg : range) (le : lenv) (p : pat) : lenv * mlpattern =
  