src/HOL/Import/import_syntax.ML
author wenzelm
Tue, 12 Aug 2008 21:27:48 +0200
changeset 27835 ff8b8513965a
parent 27775 a9d16f8b997a
child 32740 9dd0a2f83429
permissions -rw-r--r--
Symbol.source/OuterLex.source: more explicit do_recover argument;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
     1
(*  Title:      HOL/Import/import_syntax.ML
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
     2
    ID:         $Id$
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
     3
    Author:     Sebastian Skalberg (TU Muenchen)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
     4
*)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
     5
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     6
signature HOL4_IMPORT_SYNTAX =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     7
sig
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
     8
    type token = OuterLex.token
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
     9
    type command  = token list -> (theory -> theory) * token list 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    10
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    11
    val import_segment: token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    12
    val import_theory : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    13
    val end_import    : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    14
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    15
    val setup_theory  : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    16
    val end_setup     : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    17
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    18
    val thm_maps      : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    19
    val ignore_thms   : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    20
    val type_maps     : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    21
    val def_maps      : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    22
    val const_maps    : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    23
    val const_moves   : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    24
    val const_renames : token list -> (theory -> theory) * token list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    25
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    26
    val skip_import_dir : token list -> (theory -> theory) * token list
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    27
    val skip_import     : token list -> (theory -> theory) * token list
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    28
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    29
    val setup        : unit -> unit
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    30
end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    31
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    32
structure HOL4ImportSyntax :> HOL4_IMPORT_SYNTAX =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    33
struct
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    34
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
    35
type token = OuterLex.token
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    36
type command  = token list -> (theory -> theory) * token list 
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    37
17057
0934ac31985f OuterKeyword;
wenzelm
parents: 15570
diff changeset
    38
local structure P = OuterParse and K = OuterKeyword in
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    39
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    40
(* Parsers *)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    41
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    42
val import_segment = P.name >> set_import_segment
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    43
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    44
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    45
val import_theory = P.name >> (fn thyname =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    46
			       fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    47
				  thy |> set_generating_thy thyname
24712
64ed05609568 proper Sign operations instead of Theory aliases;
wenzelm
parents: 24707
diff changeset
    48
				      |> Sign.add_path thyname
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    49
				      |> add_dump (";setup_theory " ^ thyname))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    50
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    51
fun do_skip_import_dir s = (ImportRecorder.set_skip_import_dir (SOME s); I)
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    52
val skip_import_dir : command = P.string >> do_skip_import_dir
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    53
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    54
val lower = String.map Char.toLower
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    55
fun do_skip_import s = (ImportRecorder.set_skip_import (case lower s of "on" => true | "off" => false | _ => Scan.fail ()); I)
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    56
val skip_import : command = P.short_ident >> do_skip_import
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    57
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    58
fun end_import toks =
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    59
    Scan.succeed
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    60
	(fn thy =>
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    61
	    let
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    62
		val thyname = get_generating_thy thy
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    63
		val segname = get_import_segment thy
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    64
		val (int_thms,facts) = Replay.setup_int_thms thyname thy
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
    65
		val thmnames = List.filter (not o should_ignore thyname thy) facts
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    66
		fun replay thy = 
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    67
		    let
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    68
			val _ = ImportRecorder.load_history thyname
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    69
			val thy = Replay.import_thms thyname int_thms thmnames thy
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    70
			    handle x => (ImportRecorder.save_history thyname; raise x)
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    71
			val _ = ImportRecorder.save_history thyname
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    72
			val _ = ImportRecorder.clear_history ()
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    73
		    in
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    74
			thy
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    75
		    end					
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    76
	    in
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    77
		thy |> clear_import_thy
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    78
		    |> set_segment thyname segname
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    79
		    |> set_used_names facts
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
    80
		    |> replay 
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    81
		    |> clear_used_names
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    82
		    |> export_hol4_pending
24712
64ed05609568 proper Sign operations instead of Theory aliases;
wenzelm
parents: 24707
diff changeset
    83
		    |> Sign.parent_path
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    84
		    |> dump_import_thy thyname
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    85
		    |> add_dump ";end_setup"
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
    86
	    end) toks
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    87
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    88
val ignore_thms = Scan.repeat1 P.name
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    89
			       >> (fn ignored =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    90
				   fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    91
				      let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    92
					  val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    93
				      in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
    94
					  Library.foldl (fn (thy,thmname) => ignore_hol4 thyname thmname thy) (thy,ignored)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    95
				      end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    96
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    97
val thm_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    98
			    >> (fn thmmaps =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    99
				fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   100
				   let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   101
				       val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   102
				   in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   103
				       Library.foldl (fn (thy,(hol,isa)) => add_hol4_mapping thyname hol isa thy) (thy,thmmaps)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   104
				   end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   105
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   106
val type_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   107
			     >> (fn typmaps =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   108
				 fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   109
				    let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   110
					val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   111
				    in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   112
					Library.foldl (fn (thy,(hol,isa)) => add_hol4_type_mapping thyname hol false isa thy) (thy,typmaps)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   113
				    end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   114
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   115
val def_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   116
			    >> (fn defmaps =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   117
				fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   118
				   let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   119
				       val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   120
				   in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   121
				       Library.foldl (fn (thy,(hol,isa)) => add_defmap thyname hol isa thy) (thy,defmaps)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   122
				   end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   123
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   124
val const_renames = Scan.repeat1 (P.name --| P.$$$ ">" -- P.name)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   125
				 >> (fn renames =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   126
				     fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   127
					let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   128
					    val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   129
					in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   130
					    Library.foldl (fn (thy,(hol,isa)) => add_hol4_const_renaming thyname hol isa thy) (thy,renames)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   131
					end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   132
																      
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   133
val const_maps = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   134
			      >> (fn constmaps =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   135
				  fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   136
				     let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   137
					 val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   138
				     in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   139
					 Library.foldl (fn (thy,((hol,isa),NONE)) => add_hol4_const_mapping thyname hol false isa thy
24707
dfeb98f84e93 Syntax.parse/check/read;
wenzelm
parents: 24577
diff changeset
   140
						 | (thy,((hol,isa),SOME ty)) => add_hol4_const_wt_mapping thyname hol false isa (Syntax.read_typ_global thy ty) thy) (thy,constmaps)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   141
				     end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   142
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   143
val const_moves = Scan.repeat1 (P.name --| P.$$$ ">" -- P.xname -- Scan.option (P.$$$ "::" |-- P.typ))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   144
			       >> (fn constmaps =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   145
				   fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   146
				      let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   147
					  val thyname = get_import_thy thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   148
				      in
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   149
					  Library.foldl (fn (thy,((hol,isa),NONE)) => add_hol4_const_mapping thyname hol true isa thy
24707
dfeb98f84e93 Syntax.parse/check/read;
wenzelm
parents: 24577
diff changeset
   150
						  | (thy,((hol,isa),SOME ty)) => add_hol4_const_wt_mapping thyname hol true isa (Syntax.read_typ_global thy ty) thy) (thy,constmaps)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   151
				      end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   152
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   153
fun import_thy s =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   154
    let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   155
	val is = TextIO.openIn(s ^ ".imp")
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   156
	val inp = TextIO.inputAll is
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   157
	val _ = TextIO.closeIn is
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   158
	val orig_source = Source.of_string inp
27835
ff8b8513965a Symbol.source/OuterLex.source: more explicit do_recover argument;
wenzelm
parents: 27775
diff changeset
   159
	val symb_source = Symbol.source {do_recover = false} orig_source
24577
c6acb6d79757 removed redundant OuterLex.make_lexicon;
wenzelm
parents: 23677
diff changeset
   160
	val lexes = ref (Scan.make_lexicon (map Symbol.explode ["import_segment","ignore_thms","import","end",">","::","const_maps","const_moves","thm_maps","const_renames","type_maps","def_maps"]),
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   161
			 Scan.empty_lexicon)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   162
	val get_lexes = fn () => !lexes
27835
ff8b8513965a Symbol.source/OuterLex.source: more explicit do_recover argument;
wenzelm
parents: 27775
diff changeset
   163
	val token_source = OuterLex.source {do_recover = NONE} get_lexes Position.start symb_source
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   164
	val token_list = filter_out (OuterLex.is_kind OuterLex.Space) (Source.exhaust token_source)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   165
	val import_segmentP = OuterParse.$$$ "import_segment" |-- import_segment
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   166
	val type_mapsP = OuterParse.$$$ "type_maps" |-- type_maps
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   167
	val def_mapsP = OuterParse.$$$ "def_maps" |-- def_maps
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   168
	val const_mapsP = OuterParse.$$$ "const_maps" |-- const_maps
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   169
	val const_movesP = OuterParse.$$$ "const_moves" |-- const_moves
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   170
	val const_renamesP = OuterParse.$$$ "const_renames" |-- const_renames
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   171
	val ignore_thmsP = OuterParse.$$$ "ignore_thms" |-- ignore_thms
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   172
	val thm_mapsP = OuterParse.$$$ "thm_maps" |-- thm_maps
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   173
	val parser = type_mapsP || def_mapsP || const_mapsP || const_movesP || const_renamesP || thm_mapsP || ignore_thmsP || import_segmentP
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   174
	val importP = OuterParse.$$$ "import" |-- Scan.repeat parser --| OuterParse.$$$ "end"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   175
	fun apply [] thy = thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   176
	  | apply (f::fs) thy = apply fs (f thy)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   177
    in
24712
64ed05609568 proper Sign operations instead of Theory aliases;
wenzelm
parents: 24707
diff changeset
   178
	apply (set_replaying_thy s::Sign.add_path s::(fst (importP token_list)))
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   179
    end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   180
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   181
fun create_int_thms thyname thy =
17370
754b7fcff03e global quick_and_dirty;
wenzelm
parents: 17057
diff changeset
   182
    if ! quick_and_dirty
14627
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   183
    then thy
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   184
    else
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   185
	case ImportData.get thy of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14627
diff changeset
   186
	    NONE => ImportData.put (SOME (fst (Replay.setup_int_thms thyname thy))) thy
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14627
diff changeset
   187
	  | SOME _ => error "Import data not closed - forgotten an end_setup, mayhap?"
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   188
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   189
fun clear_int_thms thy =
17370
754b7fcff03e global quick_and_dirty;
wenzelm
parents: 17057
diff changeset
   190
    if ! quick_and_dirty
14627
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   191
    then thy
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   192
    else
5d137da82f03 Forgot a couple of checks for the quick_and_dirty flag the other day.
skalberg
parents: 14620
diff changeset
   193
	case ImportData.get thy of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14627
diff changeset
   194
	    NONE => error "Import data already cleared - forgotten a setup_theory?"
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14627
diff changeset
   195
	  | SOME _ => ImportData.put NONE thy
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   196
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   197
val setup_theory = P.name
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   198
		       >>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   199
		       (fn thyname =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   200
			fn thy =>
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   201
			   (case HOL4DefThy.get thy of
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   202
				NoImport => thy
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   203
			      | Generating _ => error "Currently generating a theory!"
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   204
			      | Replaying _ => thy |> clear_import_thy)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   205
			       |> import_thy thyname
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   206
			       |> create_int_thms thyname)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   207
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   208
fun end_setup toks =
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   209
    Scan.succeed
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   210
	(fn thy =>
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   211
	    let
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   212
		val thyname = get_import_thy thy
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   213
		val segname = get_import_segment thy
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   214
	    in
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   215
		thy |> set_segment thyname segname
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   216
		    |> clear_import_thy
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14518
diff changeset
   217
		    |> clear_int_thms
24712
64ed05609568 proper Sign operations instead of Theory aliases;
wenzelm
parents: 24707
diff changeset
   218
		    |> Sign.parent_path
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   219
	    end) toks
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   220
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   221
val set_dump  = P.string -- P.string   >> setup_dump
14518
c3019a66180f Added a number of explicit type casts and delayed evaluations (all seemingly
skalberg
parents: 14516
diff changeset
   222
fun fl_dump toks  = Scan.succeed flush_dump toks
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   223
val append_dump = (P.verbatim || P.string) >> add_dump
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   224
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   225
fun setup () =
27353
71c4dd53d4cb moved global keywords from OuterSyntax to OuterKeyword, tuned interfaces;
wenzelm
parents: 24867
diff changeset
   226
  (OuterKeyword.keyword ">";
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   227
   OuterSyntax.command "import_segment"
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   228
		       "Set import segment name"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   229
		       K.thy_decl (import_segment >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   230
   OuterSyntax.command "import_theory"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   231
		       "Set default HOL4 theory name"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   232
		       K.thy_decl (import_theory >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   233
   OuterSyntax.command "end_import"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   234
		       "End HOL4 import"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   235
		       K.thy_decl (end_import >> Toplevel.theory);
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
   236
   OuterSyntax.command "skip_import_dir" 
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
   237
                       "Sets caching directory for skipping importing"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   238
                       K.thy_decl (skip_import_dir >> Toplevel.theory);
19064
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
   239
   OuterSyntax.command "skip_import" 
bf19cc5a7899 fixed bugs, added caching
obua
parents: 17644
diff changeset
   240
                       "Switches skipping importing on or off"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   241
                       K.thy_decl (skip_import >> Toplevel.theory);		      
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   242
   OuterSyntax.command "setup_theory"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   243
		       "Setup HOL4 theory replaying"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   244
		       K.thy_decl (setup_theory >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   245
   OuterSyntax.command "end_setup"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   246
		       "End HOL4 setup"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   247
		       K.thy_decl (end_setup >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   248
   OuterSyntax.command "setup_dump"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   249
		       "Setup the dump file name"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   250
		       K.thy_decl (set_dump >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   251
   OuterSyntax.command "append_dump"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   252
		       "Add text to dump file"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   253
		       K.thy_decl (append_dump >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   254
   OuterSyntax.command "flush_dump"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   255
		       "Write the dump to file"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   256
		       K.thy_decl (fl_dump >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   257
   OuterSyntax.command "ignore_thms"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   258
		       "Theorems to ignore in next HOL4 theory import"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   259
		       K.thy_decl (ignore_thms >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   260
   OuterSyntax.command "type_maps"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   261
		       "Map HOL4 type names to existing Isabelle/HOL type names"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   262
		       K.thy_decl (type_maps >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   263
   OuterSyntax.command "def_maps"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   264
		       "Map HOL4 constant names to their primitive definitions"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   265
		       K.thy_decl (def_maps >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   266
   OuterSyntax.command "thm_maps"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   267
		       "Map HOL4 theorem names to existing Isabelle/HOL theorem names"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   268
		       K.thy_decl (thm_maps >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   269
   OuterSyntax.command "const_renames"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   270
		       "Rename HOL4 const names"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   271
		       K.thy_decl (const_renames >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   272
   OuterSyntax.command "const_moves"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   273
		       "Rename HOL4 const names to other HOL4 constants"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   274
		       K.thy_decl (const_moves >> Toplevel.theory);
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   275
   OuterSyntax.command "const_maps"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   276
		       "Map HOL4 const names to existing Isabelle/HOL const names"
24867
e5b55d7be9bb simplified interfaces for outer syntax;
wenzelm
parents: 24712
diff changeset
   277
		       K.thy_decl (const_maps >> Toplevel.theory));
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   278
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   279
end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   280
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
   281
end