let fpp_item predicate pp_tau pp_term fmt x =
function
| Formula.Name k ->
fprintf fmt "Definition %s:name:= mk_name(%d).@\n" x k
| Formula.Cons k ->
fprintf fmt "Definition %s:Z:= %d.@\n" x k
| Formula.Function ([], t) ->
fprintf fmt "Parameter %s: %a.@\n" x pp_tau t
| Formula.Function (tl, t) ->
fprintf fmt "Parameter %s: @[<hov 0>%a -> %a@].@\n" x (pp_typelist pp_tau) tl pp_tau t
| Formula.Predicate [] ->
fprintf fmt "Parameter %s: Prop.@\n" x
| Formula.Predicate tl ->
fprintf fmt "Parameter %s: @[<hov 0>%a -> Prop.@]@\n" x (pp_typelist pp_tau) tl
| Formula.Axiom p ->
begin
match Fol_norm.coq_normalize p with
| Pred p' -> fprintf fmt "@[<hv 2>Axiom %s:@ %a.@\n@]@\n" x predicate p'
| Conv (defs,p') ->
fpp_lf_let pp_tau pp_term fmt defs ;
fprintf fmt "@[<hv 2>Axiom %s:@ %a.@\n@]@\n" x predicate p'
end
| Formula.Type 0 ->
fprintf fmt "Definition %s:=Set.@\n" x
| Formula.Type n ->
fprintf fmt "[<hov 2>Definition %s:=Set" x;
for k=1 to n do fprintf fmt " -> Set" done ;
fprintf fmt ".@]@\n"