X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=components%2Facic_content%2FcicNotationPp.ml;h=2873912c0129d51b9b17e9a6f2f3aae80c144797;hb=63f876b112e1be016e8063e6a00ec47f841ee615;hp=47bfe2748693c07975996bd6f7662fb91ddc44d4;hpb=213cc7cf3c9da7c024b44b54e07035b831f7a31f;p=helm.git diff --git a/components/acic_content/cicNotationPp.ml b/components/acic_content/cicNotationPp.ml index 47bfe2748..2873912c0 100644 --- a/components/acic_content/cicNotationPp.ml +++ b/components/acic_content/cicNotationPp.ml @@ -79,6 +79,11 @@ let pp_attribute = | `Loc _ -> "@" | `ChildPos p -> sprintf "P(%s)" (pp_pos p) +let pp_capture_variable pp_term = + function + | term, None -> pp_term (* ~pp_parens:false *) term + | term, Some typ -> "(" ^ pp_term (* ~pp_parens:false *) term ^ ": " ^ pp_term typ ^ ")" + let rec pp_term ?(pp_parens = true) t = let t_pp = match t with @@ -94,7 +99,7 @@ let rec pp_term ?(pp_parens = true) t = (match typ with None -> "?" | Some typ -> pp_term typ) (pp_term ~pp_parens:true body) | Ast.Binder (kind, var, body) -> - sprintf "\\%s %s.%s" (pp_binder kind) (pp_capture_variable var) + sprintf "\\%s %s.%s" (pp_binder kind) (pp_capture_variable pp_term var) (pp_term ~pp_parens:true body) | Ast.Case (term, indtype, typ, patterns) -> sprintf "match %s%s%s with %s" @@ -111,7 +116,7 @@ let rec pp_term ?(pp_parens = true) 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) -> - sprintf "let %s \\def %s in %s" (pp_capture_variable var) (pp_term ~pp_parens:true t1) + sprintf "let %s \\def %s in %s" (pp_capture_variable pp_term var) (pp_term ~pp_parens:true t1) (pp_term ~pp_parens:true t2) | Ast.LetRec (kind, definitions, term) -> let rec get_guard i = function @@ -127,7 +132,7 @@ let rec pp_term ?(pp_parens = true) t = in sprintf "%s %s on %s: %s \\def %s" (pp_term ~pp_parens:false term) - (String.concat " " (List.map pp_capture_variable params)) + (String.concat " " (List.map (pp_capture_variable pp_term) params)) (pp_term ~pp_parens:false (get_guard i params)) (pp_term typ) (pp_term body) in @@ -183,17 +188,12 @@ and pp_pattern ((head, href, vars), term) = | [] -> head_pp | _ -> sprintf "(%s %s)" head_pp - (String.concat " " (List.map pp_capture_variable vars))) + (String.concat " " (List.map (pp_capture_variable pp_term) vars))) (pp_term term) and pp_patterns patterns = sprintf "[%s]" (String.concat " | " (List.map pp_pattern patterns)) -and pp_capture_variable = - function - | term, None -> pp_term ~pp_parens:false term - | term, Some typ -> "(" ^ pp_term ~pp_parens:false term ^ ": " ^ pp_term typ ^ ")" - and pp_box_spec (kind, spacing, indent) = let int_of_bool b = if b then 1 else 0 in let kind_string = @@ -257,12 +257,13 @@ let _pp_term = ref (pp_term ~pp_parens:false) let pp_term t = !_pp_term t let set_pp_term f = _pp_term := f -let pp_params = function +let pp_params pp_term = function | [] -> "" - | params -> " " ^ String.concat " " (List.map pp_capture_variable params) + | params -> " " ^ String.concat " " (List.map (pp_capture_variable pp_term) params) let pp_flavour = function | `Definition -> "definition" + | `MutualDefinition -> assert false | `Fact -> "fact" | `Goal -> "goal" | `Lemma -> "lemma" @@ -271,7 +272,7 @@ let pp_flavour = function | `Variant -> "variant" | `Axiom -> "axiom" -let pp_fields fields = +let pp_fields pp_term fields = (if fields <> [] then "\n" else "") ^ String.concat ";\n" (List.map @@ -281,7 +282,7 @@ let pp_fields fields = if arity > 0 then string_of_int arity else "" ^ ">") else ": " ^ pp_term ty) fields) -let pp_obj = function +let pp_obj pp_term = function | Ast.Inductive (params, types) -> let pp_constructors constructors = String.concat "\n" @@ -297,10 +298,12 @@ let pp_obj = function | (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) + (if inductive then "" else "co") name (pp_params pp_term params) (pp_term typ) (pp_constructors constructors) in fst_typ_pp ^ String.concat "" (List.map pp_type tl)) + | Ast.Theorem (`MutualDefinition, name, typ, body) -> + sprintf "<>" | Ast.Theorem (flavour, name, typ, body) -> sprintf "%s %s:\n %s\n%s" (pp_flavour flavour) @@ -310,8 +313,8 @@ let pp_obj = function | None -> "" | 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}" + "record " ^ name ^ " " ^ pp_params pp_term params ^ ": " ^ pp_term ty ^ + " \\def {" ^ pp_fields pp_term fields ^ "\n}" let rec pp_value = function | Env.TermValue t -> sprintf "$%s$" (pp_term t)