signature PROOF_DISPLAY = sig val pretty_theory: bool -> Proof.context -> Pretty.T val pretty_definitions: bool -> Proof.context -> Pretty.T val pretty_theorems_diff: bool -> theory list -> Proof.context -> Pretty.T list val pretty_theorems: bool -> Proof.context -> Pretty.T list val string_of_rule: Proof.context -> string -> thm -> string val pretty_goal_header: thm -> Pretty.T val pretty_goal: Proof.context -> thm -> Pretty.T val pretty_goal_facts: Proof.context -> string -> thm listoption -> Pretty.T list val pretty_goal_inst: Proof.context -> term listlist -> thm -> Pretty.T list val method_error: string -> Position.T ->
{context: Proof.context, facts: thm list, goal: thm} -> 'a Seq.result val show_results: bool Config.T val print_results: {interactive: bool, pos: Position.T} -> Proof.context ->
((string * string) * (string * thm list) list) -> unit val print_theorem: Position.T -> Proof.context -> string * thm list -> unit val print_consts: bool -> Position.T -> Proof.context ->
(string * typ -> bool) -> (string * typ) list -> unit val markup_extern_label: Position.T -> (Markup.T * xstring) option val print_label: Position.T -> string val print_context_tracing: Context.generic * Position.T -> string end
structure Proof_Display: PROOF_DISPLAY = struct
(** theory content **)
fun pretty_theory verbose ctxt = let val thy = Proof_Context.theory_of ctxt;
fun prt_cls c = Syntax.pretty_sort ctxt [c]; fun prt_sort S = Syntax.pretty_sort ctxt S; fun prt_arity t (c, Ss) = Syntax.pretty_arity ctxt (t, Ss, [c]); fun prt_typ ty = Pretty.quote (Syntax.pretty_typ ctxt ty); val prt_typ_no_tvars = prt_typ o Logic.unvarifyT_global; fun prt_term t = Pretty.quote (Syntax.pretty_term ctxt t); val prt_term_no_vars = prt_term o Logic.unvarify_global; fun prt_const (c, ty) = [Pretty.mark_str c, Pretty.str " ::", Pretty.brk 1, prt_typ_no_tvars ty];
fun pretty_classrel (c, []) = prt_cls c
| pretty_classrel (c, cs) = Pretty.block
(prt_cls c :: Pretty.str " <" :: Pretty.brk 1 :: Pretty.commas (map prt_cls cs));
fun pretty_default S = Pretty.block
[Pretty.str "default sort:", Pretty.brk 1, prt_sort S];
val tfrees = map (fn v => TFree (v, [])); fun pretty_type syn (t, Type.Logical_Type n) = if syn then NONE else SOME (prt_typ (Type (t, tfrees (Name.invent_global_types n))))
| pretty_type syn (t, Type.Abbreviation (vs, U, syn')) = if syn <> syn' then NONE else SOME (Pretty.block
[prt_typ (Type (t, tfrees vs)), Pretty.str " =", Pretty.brk 1, prt_typ U])
| pretty_type syn (t, Type.Nonterminal) = ifnot syn then NONE else SOME (prt_typ (Type (t, [])));
fun pretty_goal_facts _ _ NONE = []
| pretty_goal_facts ctxt s (SOME ths) =
(single o Pretty.block o Pretty.fbreaks)
[if s = ""then Pretty.str "this:" else Pretty.block [Pretty.keyword1 s, Pretty.brk 1, Pretty.str "this:"],
Proof_Context.pretty_fact ctxt ("", ths)];
(* goal instantiation *)
fun pretty_goal_inst ctxt propss goal = let val title = "goal instantiation:";
fun prt_inst env = if Envir.is_empty env then [] else let val Envir.Envir {tyenv, tenv, ...} = env;
val prt_type = Syntax.pretty_typ ctxt; val prt_term = Syntax.pretty_term ctxt;
fun instT v = let val T = TVar v; val T' = Envir.subst_type tyenv T; inif T = T' then NONE else SOME (prt_type T, prt_type T') end;
fun inst v = let val t = Var v; val t' =
Envir.subst_term (tyenv, tenv) t handleTYPE _ =>
Envir.subst_term (tyenv, tenv) (Envir.subst_term_types tyenv t); inif t aconv t' then NONE else SOME (prt_term t, prt_term t') end;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.