src/Pure/Interface/proof_general.ML
author wenzelm
Tue, 26 Oct 1999 22:34:01 +0200
changeset 7939 131a2c54036f
parent 7937 82025fe607d3
child 7954 ea6b79f32cfd
permissions -rw-r--r--
tuned; always ml_prompts;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Interface/proof_general.ML
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     4
7266
28d95a7a265a isa_action: don't lock pretend_used files;
wenzelm
parents: 7235
diff changeset
     5
Configuration for Proof General of LFCS Edinburgh.
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     6
*)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     7
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     8
signature PROOF_GENERAL =
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
     9
sig
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    10
  val setup: (theory -> theory) list
7579
20adf381fb0a added thms_containing;
wenzelm
parents: 7407
diff changeset
    11
  val thms_containing: xstring list -> unit
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    12
  val help: unit -> unit
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    13
  val show_context: unit -> theory
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    14
  val kill_goal: unit -> unit
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    15
  val repeat_undo: int -> unit
7235
3c3defaad8ae Goals.reset_goals;
wenzelm
parents: 7210
diff changeset
    16
  val isa_restart: unit -> unit
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    17
  val inform_file_processed: string -> unit
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    18
  val inform_file_retracted: string -> unit
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    19
  val init: bool -> unit
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    20
  val write_keywords: unit -> unit
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    21
end;
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    22
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    23
structure ProofGeneral: PROOF_GENERAL =
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    24
struct
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    25
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    26
(** compile-time theory setup **)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    27
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    28
(* token translations *)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    29
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    30
val proof_generalN = "ProofGeneral";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    31
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    32
local
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    33
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    34
val end_tag = oct_char "350";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    35
val tclass_tag = oct_char "351";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    36
val tfree_tag = oct_char "352";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    37
val tvar_tag = oct_char "353";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    38
val free_tag = oct_char "354";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    39
val bound_tag = oct_char "355";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    40
val var_tag = oct_char "356";
7597
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    41
val skolem_tag = oct_char "357";
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    42
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    43
fun tagit p x = (p ^ x ^ end_tag, real (size x));
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    44
7597
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    45
fun free_or_skolem x =
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    46
  (case try Syntax.dest_skolem x of
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    47
    None => tagit free_tag x
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    48
  | Some x' => tagit skolem_tag x');
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    49
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    50
in
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    51
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    52
val proof_general_trans =
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    53
 Syntax.tokentrans_mode proof_generalN
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    54
  [("class", tagit tclass_tag),
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    55
   ("tfree", tagit tfree_tag),
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    56
   ("tvar", tagit tvar_tag),
7597
4fbdb8a0c378 skolem_tag;
wenzelm
parents: 7581
diff changeset
    57
   ("free", free_or_skolem),
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    58
   ("bound", tagit bound_tag),
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    59
   ("var", tagit var_tag)];
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    60
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    61
end;
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    62
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    63
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    64
(* setup *)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    65
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    66
val setup = [Theory.add_tokentrfuns proof_general_trans];
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    67
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    68
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    69
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    70
(** run-time operations **)
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    71
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    72
(* messages *)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    73
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    74
val plain_output = std_output o suffix "\n";
7195
a38dc0c6b244 made SML happy;
wenzelm
parents: 7193
diff changeset
    75
fun plain_writeln x = Library.setmp writeln_fn plain_output x;
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    76
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    77
fun decorate_lines bg en "" = plain_output o enclose bg en
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    78
  | decorate_lines bg en prfx = plain_output o enclose bg en o prefix_lines prfx;
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    79
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    80
fun setup_messages () =
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    81
 (writeln_fn := (decorate_lines (oct_char "360") (oct_char "361") "");
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    82
  warning_fn := (decorate_lines (oct_char "362") (oct_char "363") "### ");
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    83
  error_fn := (decorate_lines (oct_char "364") (oct_char "365") "*** "));
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    84
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    85
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    86
(* notification *)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    87
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    88
fun tell_clear_goals () = writeln "Proof General, please clear the goals buffer.";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    89
fun tell_clear_response () = writeln "Proof General, please clear the response buffer.";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    90
fun tell_file msg path = writeln ("Proof General, " ^ msg ^ " " ^ quote (File.sysify_path path));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    91
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    92
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
    93
(* theory / proof state output *)
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    94
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    95
fun print_current_goals n max th = plain_writeln (Goals.print_current_goals_default n max) th;
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
    96
7939
wenzelm
parents: 7937
diff changeset
    97
fun setup_state () =
wenzelm
parents: 7937
diff changeset
    98
 (current_goals_markers :=
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
    99
    let
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   100
      val begin_state = oct_char "366";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   101
      val end_state= oct_char "367";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   102
      val begin_goal = oct_char "370";
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   103
    in (begin_state, end_state, begin_goal) end;
7939
wenzelm
parents: 7937
diff changeset
   104
  Toplevel.print_state_fn := plain_writeln Toplevel.print_state_default;
wenzelm
parents: 7937
diff changeset
   105
  Toplevel.prompt_state_fn := (suffix (oct_char "372") o Toplevel.prompt_state_default);
wenzelm
parents: 7937
diff changeset
   106
  Goals.print_current_goals_fn := print_current_goals);
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   107
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   108
7100
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   109
(* theory loader actions *)
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   110
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   111
local
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   112
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   113
fun add_master_files name files =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   114
  let val masters = [ThyLoad.thy_path name, ThyLoad.ml_path name]
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   115
  in masters @ gen_rems (op = o pairself Path.base) (files, masters) end;
7100
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   116
7893
fef0738b62d7 eliminated isar_action;
wenzelm
parents: 7610
diff changeset
   117
fun trace_action action name =
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   118
  if action = ThyInfo.Update then
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   119
    seq (tell_file "this file is loaded:") (ThyInfo.loaded_files name)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   120
  else if action = ThyInfo.Outdate orelse action = ThyInfo.Remove then
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   121
    seq (tell_file "you can unlock the file") (add_master_files name (ThyInfo.loaded_files name))
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   122
  else ();
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   123
7100
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   124
in
7893
fef0738b62d7 eliminated isar_action;
wenzelm
parents: 7610
diff changeset
   125
  fun setup_thy_loader () = ThyInfo.add_hook trace_action;
7100
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   126
end;
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   127
4f777a0e1c8b setup_thy_loader;
wenzelm
parents: 7027
diff changeset
   128
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   129
(* get informed about files *)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   130
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   131
val thy_name = Path.pack o Path.drop_ext o Path.base o Path.unpack;
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   132
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   133
(* FIXME improve, e.g. do something like pretend_use_thy *)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   134
fun inform_file_processed file =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   135
  ThyInfo.if_known_thy ThyInfo.touch_child_thys (thy_name file);
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   136
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   137
fun inform_file_retracted file =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   138
  ThyInfo.if_known_thy ThyInfo.touch_child_thys (thy_name file);
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   139
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   140
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   141
(* misc commands for ProofGeneral/isa *)
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   142
7610
c803ba5347fd ThmDatabase.print_thms_containing;
wenzelm
parents: 7597
diff changeset
   143
fun thms_containing cs = ThmDatabase.print_thms_containing (the_context ()) cs;
7579
20adf381fb0a added thms_containing;
wenzelm
parents: 7407
diff changeset
   144
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   145
val help = writeln o Session.welcome;
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   146
val show_context = Context.the_context;
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   147
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   148
fun kill_goal () = (Goals.reset_goals (); tell_clear_goals ());
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   149
7922
b284079cd902 tuned repeat_undo;
wenzelm
parents: 7911
diff changeset
   150
fun no_print_goals f = setmp print_current_goals_fn (fn _ => fn _ => fn _ => ()) f;
b284079cd902 tuned repeat_undo;
wenzelm
parents: 7911
diff changeset
   151
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   152
fun repeat_undo 0 = ()
7922
b284079cd902 tuned repeat_undo;
wenzelm
parents: 7911
diff changeset
   153
  | repeat_undo 1 = undo ()
b284079cd902 tuned repeat_undo;
wenzelm
parents: 7911
diff changeset
   154
  | repeat_undo n = (no_print_goals undo (); repeat_undo (n - 1));
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   155
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   156
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   157
(* re-init process (an approximation) *)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   158
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   159
local
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   160
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   161
fun restart isar =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   162
 (ThyInfo.touch_all_thys ();
7939
wenzelm
parents: 7937
diff changeset
   163
  if isar then tell_clear_goals () else kill_goal ();
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   164
  tell_clear_response ();
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   165
  writeln (Session.welcome ()));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   166
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   167
in
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   168
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   169
fun isa_restart () = restart false;
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   170
fun isar_restart () = (restart true; raise Toplevel.RESTART);
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   171
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   172
end;
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   173
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   174
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   175
(* outer syntax *)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   176
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   177
local structure P = OuterParse and K = OuterSyntax.Keyword in
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   178
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   179
val restartP =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   180
  OuterSyntax.improper_command "ProofGeneral.restart" "(internal)" K.control
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   181
    (P.opt_unit >> K (Toplevel.imperative isar_restart));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   182
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   183
val kill_proofP =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   184
  OuterSyntax.improper_command "ProofGeneral.kill_proof" "(internal)" K.control
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   185
    (Scan.succeed (IsarCmd.kill_proof_notify tell_clear_goals));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   186
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   187
val inform_file_processedP =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   188
  OuterSyntax.improper_command "ProofGeneral.inform_file_processed" "(internal)" K.control
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   189
    (P.name >> (fn name => Toplevel.imperative (fn () => inform_file_processed name)));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   190
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   191
val inform_file_retractedP =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   192
  OuterSyntax.improper_command "ProofGeneral.inform_file_retracted" "(internal)" K.control
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   193
    (P.name >> (fn name => Toplevel.imperative (fn () => inform_file_retracted name)));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   194
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   195
fun init_outer_syntax () =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   196
  OuterSyntax.add_parsers [restartP, kill_proofP, inform_file_processedP, inform_file_retractedP];
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   197
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   198
end;
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   199
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   200
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   201
(* init *)
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   202
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   203
fun init isar =
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   204
 (setup_messages ();
7939
wenzelm
parents: 7937
diff changeset
   205
  setup_state ();
7893
fef0738b62d7 eliminated isar_action;
wenzelm
parents: 7610
diff changeset
   206
  setup_thy_loader ();
7330
109b1ef4686a print_mode activated again;
wenzelm
parents: 7289
diff changeset
   207
  print_mode := [proof_generalN];
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   208
  set quick_and_dirty;
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   209
  if isar then init_outer_syntax () else ();
7939
wenzelm
parents: 7937
diff changeset
   210
  ml_prompts ("> " ^ oct_char "372") ("- " ^ oct_char "373");
7193
cc7a89d233f7 proper ProofGeneral/isa setup;
wenzelm
parents: 7100
diff changeset
   211
  if isar then Isar.sync_main () else isa_restart ());
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   212
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   213
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   214
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   215
(** generate keyword classification file **)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   216
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   217
local
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   218
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   219
val regexp_meta = explode ".*+?[]^$";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   220
val regexp_quote = implode o map (fn c => if c mem regexp_meta then "\\\\" ^ c else c) o explode;
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   221
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   222
fun defconst name strs =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   223
  "\n(defconst isar-keywords-" ^ name ^
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   224
  "\n  '(" ^ space_implode "\n    " (map (quote o regexp_quote) strs) ^ "))\n";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   225
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   226
fun make_elisp_commands commands kind =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   227
  defconst kind (mapfilter (fn (c, _, k, _) => if k = kind then Some c else None) commands);
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   228
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   229
fun make_elisp_syntax (keywords, commands) =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   230
  ";;\n\
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   231
  \;; Keyword classification tables for Isabelle/Isar.\n\
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   232
  \;; This file generated by Isabelle -- DO NOT EDIT!\n\
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   233
  \;;\n\
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   234
  \;; $" ^ "Id$\n\
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   235
  \;;\n" ^
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   236
  defconst "minor" (filter Syntax.is_identifier keywords) ^
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   237
  implode (map (make_elisp_commands commands) OuterSyntax.Keyword.kinds) ^
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   238
  "\n(provide 'isar-keywords)\n";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   239
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   240
val keywords_file = "isar-keywords.el";
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   241
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   242
in
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   243
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   244
fun write_keywords () =
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   245
  (init_outer_syntax ();
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   246
    File.write (Path.unpack keywords_file)
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   247
      (make_elisp_syntax (OuterSyntax.dest_keywords (), OuterSyntax.dest_parsers ())));
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   248
6699
1471f2bd74a0 Configuration for ProofGeneral of LFCS Edinburgh.
wenzelm
parents:
diff changeset
   249
end;
7937
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   250
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   251
82025fe607d3 added inform_file_processed, inform_file_retracted;
wenzelm
parents: 7922
diff changeset
   252
end;