| Ast.Case (term, indtype, typ, patterns) ->
sprintf "match %s%s%s with %s"
(pp_term term)
- (match typ with None -> "" | Some t -> sprintf " return %s" (pp_term t))
(match indtype with
| None -> ""
| Some (ty, href_opt) ->
(match debug_printing, href_opt with
| true, Some uri ->
sprintf "(i.e.%s)" (UriManager.string_of_uri uri)
- | _ -> ""))
+ | _ -> ""))
+ (match typ with None -> "" | Some t -> sprintf " return %s" (pp_term t))
(pp_patterns patterns)
| Ast.Cast (t1, t2) -> sprintf "(%s: %s)" (pp_term ~pp_parens:true t1) (pp_term ~pp_parens:true t2)
| Ast.LetIn (var, t1, t2) ->
| body -> List.rev l, body
in
aux i [] t
- in
+ in
+ let rec get_guard i = function
+ | [] -> assert false
+ | [term, _] when i = 1 -> term
+ | _ :: tl -> get_guard (pred i) tl
+ in
let map (var, body, i) =
let id, vars, typ, body = match var with
| term, Some typ ->
term, pvars, pbody, bbody
| _ -> assert false
in
- sprintf "%s %s: %s \\def %s"
+ sprintf "%s %s on %s: %s \\def %s"
(pp_term ~pp_parens:false term)
(String.concat " " (List.map pp_capture_variable vars))
+ (pp_term ~pp_parens:false (get_guard i vars))
(pp_term typ) (pp_term body)
in
sprintf "let %s %s in %s"
in
match pp_parens, t with
| false, _
+ | true, Ast.Implicit
| true, Ast.Sort _
| true, Ast.Ident (_, Some [])
| true, Ast.Ident (_, None) -> t_pp
in
fst_typ_pp ^ String.concat "" (List.map pp_type tl))
| Ast.Theorem (flavour, name, typ, body) ->
- sprintf "%s %s: %s %s"
+ sprintf "%s %s:\n %s\n%s"
(pp_flavour flavour)
name
(pp_term typ)
(match body with
| None -> ""
- | Some body -> "\\def " ^ pp_term body)
+ | Some body -> "\\def\n " ^ pp_term body)
| Ast.Record (params,name,ty,fields) ->
"record " ^ name ^ " " ^ pp_params params ^ ": " ^ pp_term ty ^
" \\def {" ^ pp_fields fields ^ "\n}"