From 6d5e3e4ec26caa02e4cd3e29fa8c4a989f8b0352 Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Thu, 9 Dec 2004 17:20:56 +0000 Subject: [PATCH] implemented pretty printer for (mutual) (co)inductive types --- helm/ocaml/cic_transformations/tacticAstPp.ml | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/helm/ocaml/cic_transformations/tacticAstPp.ml b/helm/ocaml/cic_transformations/tacticAstPp.ml index 32f7ace8e..bc021c134 100644 --- a/helm/ocaml/cic_transformations/tacticAstPp.ml +++ b/helm/ocaml/cic_transformations/tacticAstPp.ml @@ -100,22 +100,49 @@ let pp_command = function | Abort -> "Abort" | Baseuri (Some uri) -> sprintf "Baseuri \"%s\"" uri | Baseuri None -> "Baseuri" - | Check term -> sprintf "Check %s" (CicAstPp.pp_term term) + | Check term -> sprintf "Check %s" (pp_term term) | Proof -> "Proof" | Qed name -> (match name with None -> "Qed" | Some name -> sprintf "Save %s" name) | Quit -> "Quit" | Redo None -> "Redo" | Redo (Some n) -> sprintf "Redo %d" n - | Inductive _ -> (* TODO Zack *) assert false + | Inductive (params, types) -> + let pp_params = function + | [] -> "" + | params -> + " " ^ + String.concat " " + (List.map + (fun (name, typ) -> sprintf "(%s:%s)" name (pp_term typ)) + params) + in + let pp_constructors constructors = + String.concat "\n" + (List.map (fun (name, typ) -> sprintf "| %s: %s" name (pp_term typ)) + constructors) + in + let pp_type (name, _, typ, constructors) = + sprintf "\nwith %s: %s \\def\n%s" name (pp_term typ) + (pp_constructors constructors) + in + (match types with + | [] -> assert false + | (name, inductive, typ, constructors) :: tl -> + let fst_typ_pp = + sprintf "%sinductive %s%s: %s \\def\n%s" + (if inductive then "" else "co") name (pp_params params) + (pp_term typ) (pp_constructors constructors) + in + fst_typ_pp ^ String.concat "" (List.map pp_type tl)) | Theorem (flavour, name, typ, body) -> sprintf "%s %s: %s %s" (pp_flavour flavour) (match name with None -> "" | Some name -> name) - (CicAstPp.pp_term typ) + (pp_term typ) (match body with | None -> "" - | Some body -> "\\def " ^ CicAstPp.pp_term body) + | Some body -> "\\def " ^ pp_term body) | Undo None -> "Undo" | Undo (Some n) -> sprintf "Undo %d" n -- 2.39.2