let compile_user_axiom_labels name (labels,predicate) =
let d_name = "Hyp_" ^ name in
let context = push_context "axiom-labels" in
try
let here =
match labels with
| LogicLabel (None, l)::_ -> l
| _ -> Wp_parameters.fatal "No logic label for Axiom '%s'" name
in
let env = axiom_env here in
let body = prop env predicate in
let signature = collect_signature [] (pred_filter body) env in
let formals = flatten_formals signature in
let property = L.forall formals (flush_context "axiom-labels" context body)
in {
a_name = name ;
a_defname = d_name ;
a_memory = signature ;
a_property = property ;
}
with err ->
kill_context "axiom-labels" context ;
raise err