src/HOL/Import/import_package.ML
author paulson
Tue, 29 Mar 2005 12:30:48 +0200
changeset 15635 8408a06590a6
parent 15531 08c8dad8e399
child 15703 727ef1b8b3ee
permissions -rw-r--r--
converted HOL-Subst to tactic scripts
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: 14516
diff changeset
     1
(*  Title:      HOL/Import/import_package.ML
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
     2
    ID:         $Id$
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
     3
    Author:     Sebastian Skalberg (TU Muenchen)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
     4
*)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
     5
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     6
signature IMPORT_PACKAGE =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     7
sig
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     8
    val import_meth: Args.src -> Proof.context -> Proof.method
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
     9
    val setup      : (theory -> theory) list
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    10
    val debug      : bool ref
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    11
end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    12
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    13
structure ImportDataArgs: THEORY_DATA_ARGS =
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    14
struct
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    15
val name = "HOL4/import_data"
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    16
type T = ProofKernel.thm option array option
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    17
val empty = NONE
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    18
val copy = I
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    19
val prep_ext = I
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    20
fun merge _ = NONE
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    21
fun print sg import_segment =
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    22
    Pretty.writeln (Pretty.str ("Pretty printing of importer data not implemented"))
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    23
end
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    24
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    25
structure ImportData = TheoryDataFun(ImportDataArgs)
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    26
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    27
structure ImportPackage :> IMPORT_PACKAGE =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    28
struct
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    29
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    30
val debug = ref false
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    31
fun message s = if !debug then writeln s else ()
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    32
14848
83f1dc18f1f1 oops -- no Output.out here;
wenzelm
parents: 14818
diff changeset
    33
val string_of_thm = Library.setmp print_mode [] string_of_thm;
83f1dc18f1f1 oops -- no Output.out here;
wenzelm
parents: 14818
diff changeset
    34
val string_of_cterm = Library.setmp print_mode [] string_of_cterm;
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    35
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    36
fun import_tac (thyname,thmname) =
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    37
    if !SkipProof.quick_and_dirty
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    38
    then SkipProof.cheat_tac
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    39
    else
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    40
     fn thy =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    41
     fn th =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    42
	let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    43
	    val sg = sign_of_thm th
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    44
	    val prem = hd (prems_of th)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    45
	    val _ = message ("Import trying to prove " ^ (string_of_cterm (cterm_of sg prem)))
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    46
	    val int_thms = case ImportData.get thy of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    47
			       NONE => fst (Replay.setup_int_thms thyname thy)
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    48
			     | SOME a => a
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    49
	    val proof = snd (ProofKernel.import_proof thyname thmname thy) thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    50
	    val hol4thm = snd (Replay.replay_proof int_thms thyname thmname proof thy)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    51
	    val thm = snd (ProofKernel.to_isa_thm hol4thm)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    52
	    val rew = ProofKernel.rewrite_hol4_term (concl_of thm) thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    53
	    val thm = equal_elim rew thm
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    54
	    val prew = ProofKernel.rewrite_hol4_term prem thy
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    55
	    val prem' = #2 (Logic.dest_equals (prop_of prew))
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    56
	    val _ = message ("Import proved " ^ (string_of_thm thm))  
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    57
	in
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    58
	    case Shuffler.set_prop thy prem' [("",thm)] of
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    59
		SOME (_,thm) =>
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    60
		let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    61
		    val _ = if prem' aconv (prop_of thm)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    62
			    then message "import: Terms match up"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    63
			    else message "import: Terms DO NOT match up"
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    64
		    val thm' = equal_elim (symmetric prew) thm
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    65
		    val res = bicompose true (false,thm',0) 1 th
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    66
		in
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    67
		    res
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    68
		end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 14848
diff changeset
    69
	      | NONE => (message "import: set_prop didn't succeed"; no_tac th)
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    70
	end
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    71
	
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    72
val import_meth = Method.simple_args (Args.name -- Args.name)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    73
		  (fn arg =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    74
		   fn ctxt =>
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    75
		      let
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    76
			  val thy = ProofContext.theory_of ctxt
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    77
		      in
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    78
			  Method.SIMPLE_METHOD (import_tac arg thy)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    79
		      end)
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    80
14620
1be590fd2422 Minor cleanup of headers and some speedup of the HOL4 import.
skalberg
parents: 14516
diff changeset
    81
val setup = [Method.add_method("import",import_meth,"Import HOL4 theorem"),ImportData.init]
14516
a183dec876ab Added HOL proof importer.
skalberg
parents:
diff changeset
    82
end