| `Generated -> "generated "
let pp_obj pp_term = function
- | Ast.Inductive (params, types) ->
+ | Ast.Inductive (params, types, source) ->
let pp_constructors constructors =
String.concat "\n"
(List.map (fun (name, typ) -> sprintf "| %s: %s" name (pp_term typ))
| [] -> assert false
| (name, inductive, typ, constructors) :: tl ->
let fst_typ_pp =
- sprintf "%sinductive %s%s: %s \\def\n%s"
+ sprintf "%s%sinductive %s%s: %s \\def\n%s"
+ (string_of_source source)
(if inductive then "" else "co") name (pp_params pp_term params)
(pp_term typ) (pp_constructors constructors)
in
(match body with
| None -> ""
| Some body -> "\\def\n " ^ pp_term body)
- | Ast.Record (params,name,ty,fields) ->
+ | Ast.Record (params,name,ty,fields, source) ->
+ string_of_source source ^
"record " ^ name ^ " " ^ pp_params pp_term params ^ ": " ^ pp_term ty ^
" \\def {" ^ pp_fields pp_term fields ^ "\n}"
- | Ast.LetRec (kind, definitions, (source, _, _)) ->
+ | Ast.LetRec (kind, definitions, (source, flavour, _)) ->
let rec get_guard i = function
| [] -> assert false (* Ast.Implicit `JustOne *)
| [term, _] when i = 1 -> term
(pp_term (get_guard i params))
(pp_term typ) (pp_term body)
in
- sprintf "%slet %s %s"
+ sprintf "%s%s %s %s"
(string_of_source source)
(match kind with `Inductive -> "rec" | `CoInductive -> "corec")
+ (NCicPp.string_of_flavour flavour)
(String.concat " and " (List.map map definitions))
let rec pp_value (status: #NCic.status) = function