anchor.diff:      | [] -> ""
       | [t] -> "{:pattern" + string_of_trigger t + "}"
       | _::_::_ -> "{:pattern " + String.concat "\/ " (List.map string_of_trigger ts) + "}"
  -and string_of_exp (e:exp):string = string_of_exp_prec 90 e
  +and string_of_exp (e:exp):string = string_of_exp_prec 99 e
  +and string_of_exp90 (e:exp):string = string_of_exp_prec 90 e
   and string_of_exps (es:exp list):string = String.concat " " (List.map string_of_exp es)
  -and string_of_exps_tail (es:exp list):string = String.concat "" (List.map (fun e -> " " + string_of_exp e) es)
   and string_of_args (es:exp list):string = match es with [] -> "()" | _ -> string_of_exps es
   
   let name_of_formal (x:id, t:typ option) = sid x
  
positive.code:   | SBlock ss -> notImplemented "block"
    | SQuickBlock _ -> internalErr "quick_block"
    | SIfElse (_, e, ss1, ss2) ->
        ps.PrintLine ("if " + (string_of_exp e) + " then");
        emit_block ps "" outs ss1;
        ps.PrintLine ("else");
        emit_block ps (match outs with None -> ";" | Some _ -> "") outs ss2
  
negative.code:     ps.PrintLine ("(requires " + (string_of_exp rs) + ")");
      let sprets = String.concat ", " (List.map (fun (x, _, _, _, _) -> sid x) p.prets) in
      let sDep = if isDependent then "|" else "" in
      ps.PrintLine ("(ensures (" + (match p.prets with [] -> "" | _ -> "fun (" + sDep + sprets + sDep + ") -> ") + (string_of_exp_prec 5 es) + "))");
      ps.Unindent ();
      in
    let dArgs = match decreaseExps with Some es -> es | None -> List.map (fun (x, _) -> EVar x) args in
  