anchor.diff:      in let rec aux (args:list<exp>) (e:exp) = match e with
       | Exp_fvar(x, b) ->
           (match Util.smap_try_find constructors x.v.str with
  -        | None -> None
  -        | Some(arity, compiler) -> Some(uncur x.v.str args arity compiler))
  +        | Some(None, compiler) -> Some(uncur x.v.str args (List.length args) compiler)
  +        | Some(Some(arity), compiler) when (arity >= List.length args) -> Some(uncur x.v.str args arity compiler)
  +        | _ -> None)
       | Exp_app(e1, e2, f) -> aux (e2::args) e1
       | _ -> None
       in aux [] e
  
positive.code:             ]))))]
          ))])))::fmods
      ), [])))]
  
  
  
  
negative.code: open Microsoft.FStar.Absyn.Util
  open Microsoft.FStar.Util
  
  let constructors = Util.smap_create 1000
  
  let nothing = 
      Util.smap_add constructors "Prims.op_Minus" (Some 1, Some(function x::[] -> JSE_Minus(x) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Negation" (Some 1, Some(function x::[] -> JSE_Lnot(x) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Addition" (Some 2, Some(function x::y::[] -> JSE_Add(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Subtraction" (Some 2, Some(function x::y::[] -> JSE_Sub(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Division" (Some 2, Some(function x::y::[] -> JSE_Divide(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Multiply" (Some 2, Some(function x::y::[] -> JSE_Multiply(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Modulus" (Some 2, Some(function x::y::[] -> JSE_Mod(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_BarBar" (Some 2, Some(function x::y::[] -> JSE_Lor(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_AmpAmp" (Some 2, Some(function x::y::[] -> JSE_Land(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_GreaterThan" (Some 2, Some(function x::y::[] -> JSE_Gt(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_LessThanOrEqual" (Some 2, Some(function x::y::[] -> JSE_Le(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_LessThan" (Some 2, Some(function x::y::[] -> JSE_Lt(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_GreaterThanOrEqual" (Some 2, Some(function x::y::[] -> JSE_Ge(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_Equality" (Some 2, Some(function x::y::[] -> JSE_Equal(JSE_Add(x,JSE_String("")),JSE_Add(y,JSE_String(""))) | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_disEquality" (Some 2, Some(function x::y::[] -> JSE_Lnot(JSE_Equal(JSE_Add(x,JSE_String("")),JSE_Add(y,JSE_String("")))) | _ -> failwith ""));
      Util.smap_add constructors "String.strcat" (Some 2, Some(function x::y::[] -> JSE_Add(x,y) | _ -> failwith ""));
      Util.smap_add constructors "String.length" (Some 1, Some(function x::[] -> JSE_Dot(x,"length") | _ -> failwith ""));
      Util.smap_add constructors "Prims.fst" (Some 1, Some(function x::[] -> JSE_Dot(x, "v[0]") | _ -> failwith ""));
      Util.smap_add constructors "Prims.snd" (Some 1, Some(function x::[] -> JSE_Dot(x, "v[1]") | _ -> failwith ""));
      Util.smap_add constructors "Prims.op_ColonEquals" (Some 2, Some(function x::y::[] -> JSE_Assign(x,y) | _ -> failwith ""));
      Util.smap_add constructors "Prims.Nil" (None, None);
      Util.smap_add constructors "Prims.Cons" (None, None);
      Util.smap_add constructors "Prims.None" (None, None);
      Util.smap_add constructors "Prims.Some" (None, None);
      Util.smap_add constructors "Prims.MkTuple2" (None, None);
      Util.smap_add constructors "Prims.MkTuple3" (None, None);
      Util.smap_add constructors "Prims.MkTuple4" (None, None);
      Util.smap_add constructors "Prims.MkTuple5" (None, None);
      Util.smap_add constructors "Prims.MkTuple6" (None, None);
      Util.smap_add constructors "Prims.MkTuple7" (None, None);
      Util.smap_add constructors "Prims.MkTuple8" (None, None);
      Util.smap_add constructors "Prims.failwith" (Some 1, Some(function x::[] -> JSE_Call(
          JSE_Function(None,[],[JS_Statement(JSS_Throw(x))]),[]) | _ -> failwith ""));
      ()
  
  