| author | blanchet | 
| Fri, 21 Apr 2017 21:37:01 +0200 | |
| changeset 65547 | 701bb74c5f97 | 
| parent 62513 | 702085ca8564 | 
| child 69597 | ff784d5a5bfb | 
| permissions | -rw-r--r-- | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 1 | (* Title: HOL/Import/import_rule.ML | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 2 | Author: Cezary Kaliszyk, University of Innsbruck | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 3 | Author: Alexander Krauss, QAware GmbH | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 4 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 5 | Importer proof rules and processing of lines and files. | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 6 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 7 | Based on earlier code by Steven Obua and Sebastian Skalberg. | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 8 | *) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 9 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 10 | signature IMPORT_RULE = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 11 | sig | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 12 | val beta : cterm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 13 | val eq_mp : thm -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 14 | val comb : thm -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 15 | val trans : thm -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 16 | val deduct : thm -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 17 | val conj1 : thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 18 | val conj2 : thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 19 | val refl : cterm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 20 | val abs : cterm -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 21 | val mdef : string -> theory -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 22 | val def : string -> cterm -> theory -> thm * theory | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 23 | val mtydef : string -> theory -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 24 | val tydef : | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 25 | string -> string -> string -> cterm -> cterm -> thm -> theory -> thm * theory | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 26 | val inst_type : (ctyp * ctyp) list -> thm -> theory -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 27 | val inst : (cterm * cterm) list -> thm -> thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 28 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 29 | type state | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 30 | val init_state : state | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 31 | val process_line : string -> (theory * state) -> (theory * state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 32 | val process_file : Path.T -> theory -> theory | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 33 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 34 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 35 | structure Import_Rule: IMPORT_RULE = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 36 | struct | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 37 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 38 | val init_state = ((Inttab.empty, 0), (Inttab.empty, 0), (Inttab.empty, 0)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 39 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 40 | type state = (ctyp Inttab.table * int) * (cterm Inttab.table * int) * (thm Inttab.table * int) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 41 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 42 | fun implies_elim_all th = implies_elim_list th (map Thm.assume (cprems_of th)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 43 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 44 | fun meta_mp th1 th2 = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 45 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 46 | val th1a = implies_elim_all th1 | 
| 59582 | 47 | val th1b = Thm.implies_intr (strip_imp_concl (Thm.cprop_of th2)) th1a | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 48 | val th2a = implies_elim_all th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 49 | val th3 = Thm.implies_elim th1b th2a | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 50 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 51 | implies_intr_hyps th3 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 52 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 53 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 54 | fun meta_eq_to_obj_eq th = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 55 | let | 
| 59582 | 56 | val (tml, tmr) = Thm.dest_binop (strip_imp_concl (Thm.cprop_of th)) | 
| 59586 | 57 | val cty = Thm.ctyp_of_cterm tml | 
| 60801 | 58 | val i = Thm.instantiate' [SOME cty] [SOME tml, SOME tmr] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 59 |       @{thm meta_eq_to_obj_eq}
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 60 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 61 | Thm.implies_elim i th | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 62 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 63 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 64 | fun beta ct = meta_eq_to_obj_eq (Thm.beta_conversion false ct) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 65 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 66 | fun eq_mp th1 th2 = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 67 | let | 
| 59582 | 68 | val (tm1l, tm1r) = Thm.dest_binop (Thm.dest_arg (strip_imp_concl (Thm.cprop_of th1))) | 
| 60801 | 69 |     val i1 = Thm.instantiate' [] [SOME tm1l, SOME tm1r] @{thm iffD1}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 70 | val i2 = meta_mp i1 th1 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 71 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 72 | meta_mp i2 th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 73 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 74 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 75 | fun comb th1 th2 = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 76 | let | 
| 59582 | 77 | val t1c = Thm.dest_arg (strip_imp_concl (Thm.cprop_of th1)) | 
| 78 | val t2c = Thm.dest_arg (strip_imp_concl (Thm.cprop_of th2)) | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 79 | val (cf, cg) = Thm.dest_binop t1c | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 80 | val (cx, cy) = Thm.dest_binop t2c | 
| 59586 | 81 | val [fd, fr] = Thm.dest_ctyp (Thm.ctyp_of_cterm cf) | 
| 60801 | 82 | val i1 = Thm.instantiate' [SOME fd, SOME fr] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 83 |       [SOME cf, SOME cg, SOME cx, SOME cy] @{thm cong}
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 84 | val i2 = meta_mp i1 th1 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 85 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 86 | meta_mp i2 th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 87 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 88 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 89 | fun trans th1 th2 = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 90 | let | 
| 59582 | 91 | val t1c = Thm.dest_arg (strip_imp_concl (Thm.cprop_of th1)) | 
| 92 | val t2c = Thm.dest_arg (strip_imp_concl (Thm.cprop_of th2)) | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 93 | val (r, s) = Thm.dest_binop t1c | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 94 | val (_, t) = Thm.dest_binop t2c | 
| 59586 | 95 | val ty = Thm.ctyp_of_cterm r | 
| 60801 | 96 |     val i1 = Thm.instantiate' [SOME ty] [SOME r, SOME s, SOME t] @{thm trans}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 97 | val i2 = meta_mp i1 th1 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 98 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 99 | meta_mp i2 th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 100 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 101 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 102 | fun deduct th1 th2 = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 103 | let | 
| 59582 | 104 | val th1c = strip_imp_concl (Thm.cprop_of th1) | 
| 105 | val th2c = strip_imp_concl (Thm.cprop_of th2) | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 106 | val th1a = implies_elim_all th1 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 107 | val th2a = implies_elim_all th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 108 | val th1b = Thm.implies_intr th2c th1a | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 109 | val th2b = Thm.implies_intr th1c th2a | 
| 60801 | 110 | val i = Thm.instantiate' [] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 111 |       [SOME (Thm.dest_arg th1c), SOME (Thm.dest_arg th2c)] @{thm iffI}
 | 
| 59582 | 112 | val i1 = Thm.implies_elim i (Thm.assume (Thm.cprop_of th2b)) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 113 | val i2 = Thm.implies_elim i1 th1b | 
| 59582 | 114 | val i3 = Thm.implies_intr (Thm.cprop_of th2b) i2 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 115 | val i4 = Thm.implies_elim i3 th2b | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 116 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 117 | implies_intr_hyps i4 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 118 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 119 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 120 | fun conj1 th = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 121 | let | 
| 59582 | 122 | val (tml, tmr) = Thm.dest_binop (Thm.dest_arg (strip_imp_concl (Thm.cprop_of th))) | 
| 60801 | 123 |     val i = Thm.instantiate' [] [SOME tml, SOME tmr] @{thm conjunct1}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 124 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 125 | meta_mp i th | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 126 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 127 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 128 | fun conj2 th = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 129 | let | 
| 59582 | 130 | val (tml, tmr) = Thm.dest_binop (Thm.dest_arg (strip_imp_concl (Thm.cprop_of th))) | 
| 60801 | 131 |     val i = Thm.instantiate' [] [SOME tml, SOME tmr] @{thm conjunct2}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 132 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 133 | meta_mp i th | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 134 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 135 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 136 | fun refl ctm = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 137 | let | 
| 59586 | 138 | val cty = Thm.ctyp_of_cterm ctm | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 139 | in | 
| 60801 | 140 |     Thm.instantiate' [SOME cty] [SOME ctm] @{thm refl}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 141 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 142 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 143 | fun abs cv th = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 144 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 145 | val th1 = implies_elim_all th | 
| 59582 | 146 | val (tl, tr) = Thm.dest_binop (Thm.dest_arg (strip_imp_concl (Thm.cprop_of th1))) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 147 | val (ll, lr) = (Thm.lambda cv tl, Thm.lambda cv tr) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 148 | val (al, ar) = (Thm.apply ll cv, Thm.apply lr cv) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 149 | val bl = beta al | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 150 | val br = meta_eq_to_obj_eq (Thm.symmetric (Thm.beta_conversion false ar)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 151 | val th2 = trans (trans bl th1) br | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 152 | val th3 = implies_elim_all th2 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 153 | val th4 = Thm.forall_intr cv th3 | 
| 60801 | 154 | val i = Thm.instantiate' [SOME (Thm.ctyp_of_cterm cv), SOME (Thm.ctyp_of_cterm tl)] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 155 |       [SOME ll, SOME lr] @{thm ext2}
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 156 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 157 | meta_mp i th4 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 158 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 159 | |
| 60648 | 160 | fun freezeT thy thm = | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 161 | let | 
| 59582 | 162 | val tvars = Term.add_tvars (Thm.prop_of thm) [] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 163 | val tfrees = map (fn ((t, _), s) => TFree (t, s)) tvars | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 164 | in | 
| 60642 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 165 | Thm.instantiate ((tvars ~~ map (Thm.global_ctyp_of thy) tfrees), []) thm | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 166 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 167 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 168 | fun def' constname rhs thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 169 | let | 
| 59582 | 170 | val rhs = Thm.term_of rhs | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 171 | val typ = type_of rhs | 
| 56267 
deab4d428bc6
proper Sign.full_name to get internal name (like Sign.add_consts);
 wenzelm parents: 
56256diff
changeset | 172 | val constbinding = Binding.name constname | 
| 
deab4d428bc6
proper Sign.full_name to get internal name (like Sign.add_consts);
 wenzelm parents: 
56256diff
changeset | 173 | val thy1 = Sign.add_consts [(constbinding, typ, NoSyn)] thy | 
| 
deab4d428bc6
proper Sign.full_name to get internal name (like Sign.add_consts);
 wenzelm parents: 
56256diff
changeset | 174 | val eq = Logic.mk_equals (Const (Sign.full_name thy1 constbinding, typ), rhs) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 175 | val (thms, thy2) = Global_Theory.add_defs false | 
| 56267 
deab4d428bc6
proper Sign.full_name to get internal name (like Sign.add_consts);
 wenzelm parents: 
56256diff
changeset | 176 | [((Binding.suffix_name "_hldef" constbinding, eq), [])] thy1 | 
| 60648 | 177 | val def_thm = freezeT thy1 (hd thms) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 178 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 179 | (meta_eq_to_obj_eq def_thm, thy2) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 180 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 181 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 182 | fun mdef name thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 183 | case Import_Data.get_const_def name thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 184 | SOME th => th | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 185 |   | NONE => error ("constant mapped but no definition: " ^ name)
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 186 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 187 | fun def constname rhs thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 188 | case Import_Data.get_const_def constname thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 189 | SOME _ => | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 190 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 191 |         val () = warning ("Const mapped but def provided: " ^ constname)
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 192 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 193 | (mdef constname thy, thy) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 194 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 195 | | NONE => def' constname rhs thy | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 196 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 197 | fun typedef_hollight th thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 198 | let | 
| 59582 | 199 | val (th_s, cn) = Thm.dest_comb (Thm.dest_arg (Thm.cprop_of th)) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 200 | val (th_s, abst) = Thm.dest_comb th_s | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 201 | val rept = Thm.dest_arg th_s | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 202 | val P = Thm.dest_arg cn | 
| 59586 | 203 | val [nty, oty] = Thm.dest_ctyp (Thm.ctyp_of_cterm rept) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 204 | in | 
| 60801 | 205 | Thm.instantiate' [SOME nty, SOME oty] [SOME rept, SOME abst, SOME P, | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 206 |       SOME (Thm.global_cterm_of thy (Free ("a", Thm.typ_of nty))),
 | 
| 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 207 |       SOME (Thm.global_cterm_of thy (Free ("r", Thm.typ_of oty)))] @{thm typedef_hol2hollight}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 208 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 209 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 210 | fun tydef' tycname abs_name rep_name cP ct td_th thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 211 | let | 
| 59586 | 212 | val ctT = Thm.ctyp_of_cterm ct | 
| 60801 | 213 |     val nonempty = Thm.instantiate' [SOME ctT] [SOME cP, SOME ct] @{thm light_ex_imp_nonempty}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 214 | val th2 = meta_mp nonempty td_th | 
| 59582 | 215 | val c = | 
| 216 | case Thm.concl_of th2 of | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 217 |         _ $ (Const(@{const_name Ex},_) $ Abs(_,_,Const(@{const_name Set.member},_) $ _ $ c)) => c
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 218 | | _ => error "type_introduction: bad type definition theorem" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 219 | val tfrees = Term.add_tfrees c [] | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 220 | val tnames = sort_strings (map fst tfrees) | 
| 61110 | 221 | val typedef_bindings = | 
| 62513 
702085ca8564
take qualification of type name more seriously: derived consts and facts are qualified uniformly;
 wenzelm parents: 
62436diff
changeset | 222 |      {Rep_name = Binding.name rep_name,
 | 
| 
702085ca8564
take qualification of type name more seriously: derived consts and facts are qualified uniformly;
 wenzelm parents: 
62436diff
changeset | 223 | Abs_name = Binding.name abs_name, | 
| 
702085ca8564
take qualification of type name more seriously: derived consts and facts are qualified uniformly;
 wenzelm parents: 
62436diff
changeset | 224 |       type_definition_name = Binding.name ("type_definition_" ^ tycname)}
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 225 | val ((_, typedef_info), thy') = | 
| 61260 | 226 |      Typedef.add_typedef_global {overloaded = false}
 | 
| 227 | (Binding.name tycname, map (rpair dummyS) tnames, NoSyn) c | |
| 61110 | 228 | (SOME typedef_bindings) (fn ctxt => resolve_tac ctxt [th2] 1) thy | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 229 | val aty = #abs_type (#1 typedef_info) | 
| 60648 | 230 | val th = freezeT thy' (#type_definition (#2 typedef_info)) | 
| 59582 | 231 | val (th_s, _) = Thm.dest_comb (Thm.dest_arg (Thm.cprop_of th)) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 232 | val (th_s, abst) = Thm.dest_comb th_s | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 233 | val rept = Thm.dest_arg th_s | 
| 59586 | 234 | val [nty, oty] = Thm.dest_ctyp (Thm.ctyp_of_cterm rept) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 235 | val typedef_th = | 
| 60801 | 236 | Thm.instantiate' | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 237 | [SOME nty, SOME oty] | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 238 |           [SOME rept, SOME abst, SOME cP, SOME (Thm.global_cterm_of thy' (Free ("a", aty))),
 | 
| 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 239 |              SOME (Thm.global_cterm_of thy' (Free ("r", Thm.typ_of ctT)))]
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 240 |           @{thm typedef_hol2hollight}
 | 
| 47363 
c7fc95e722ff
HOL/Import typed matches against Isabelle typedef result
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 241 | val th4 = typedef_th OF [#type_definition (#2 typedef_info)] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 242 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 243 | (th4, thy') | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 244 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 245 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 246 | fun mtydef name thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 247 | case Import_Data.get_typ_def name thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 248 | SOME thn => meta_mp (typedef_hollight thn thy) thn | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 249 |   | NONE => error ("type mapped but no tydef thm registered: " ^ name)
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 250 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 251 | fun tydef tycname abs_name rep_name P t td_th thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 252 | case Import_Data.get_typ_def tycname thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 253 | SOME _ => | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 254 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 255 |         val () = warning ("Type mapped but proofs provided: " ^ tycname)
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 256 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 257 | (mtydef tycname thy, thy) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 258 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 259 | | NONE => tydef' tycname abs_name rep_name P t td_th thy | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 260 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 261 | fun inst_type lambda th thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 262 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 263 | fun assoc _ [] = error "assoc" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 264 | | assoc x ((x',y)::rest) = if x = x' then y else assoc x rest | 
| 59582 | 265 | val lambda = map (fn (a, b) => (Thm.typ_of a, b)) lambda | 
| 266 | val tys_before = Term.add_tfrees (Thm.prop_of th) [] | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 267 | val th1 = Thm.varifyT_global th | 
| 59582 | 268 | val tys_after = Term.add_tvars (Thm.prop_of th1) [] | 
| 60642 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 269 | val tyinst = | 
| 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 270 | map2 (fn bef => fn iS => | 
| 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 271 | (case try (assoc (TFree bef)) lambda of | 
| 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 272 | SOME cty => (iS, cty) | 
| 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 273 | | NONE => (iS, Thm.global_ctyp_of thy (TFree bef)))) | 
| 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 274 | tys_before tys_after | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 275 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 276 | Thm.instantiate (tyinst,[]) th1 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 277 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 278 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 279 | fun inst sigma th = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 280 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 281 | val (dom, rng) = ListPair.unzip (rev sigma) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 282 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 283 | th |> forall_intr_list dom | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 284 | |> forall_elim_list rng | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 285 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 286 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 287 | fun transl_dotc #"." = "dot" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 288 | | transl_dotc c = Char.toString c | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 289 | val transl_dot = String.translate transl_dotc | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 290 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 291 | fun transl_qmc #"?" = "t" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 292 | | transl_qmc c = Char.toString c | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 293 | val transl_qm = String.translate transl_qmc | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 294 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 295 | fun getconstname s thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 296 | case Import_Data.get_const_map s thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 297 | SOME s => s | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 298 | | NONE => Sign.full_name thy (Binding.name (transl_dot s)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 299 | fun gettyname s thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 300 | case Import_Data.get_typ_map s thy of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 301 | SOME s => s | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 302 | | NONE => Sign.full_name thy (Binding.name s) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 303 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 304 | fun get (map, no) s = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 305 | case Int.fromString s of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 306 | NONE => error "Import_Rule.get: not a number" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 307 | | SOME i => (case Inttab.lookup map (Int.abs i) of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 308 | NONE => error "Import_Rule.get: lookup failed" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 309 | | SOME res => (res, (if i < 0 then Inttab.delete (Int.abs i) map else map, no))) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 310 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 311 | fun getty i (thy, (tyi, tmi, thi)) = let val (i, tyi) = (get tyi i) in (i, (thy, (tyi, tmi, thi))) end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 312 | fun gettm i (thy, (tyi, tmi, thi)) = let val (i, tmi) = (get tmi i) in (i, (thy, (tyi, tmi, thi))) end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 313 | fun getth i (thy, (tyi, tmi, thi)) = let val (i, thi) = (get thi i) in (i, (thy, (tyi, tmi, thi))) end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 314 | fun set (map, no) v = (Inttab.update_new (no + 1, v) map, no + 1) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 315 | fun setty v (thy, (tyi, tmi, thi)) = (thy, (set tyi v, tmi, thi)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 316 | fun settm v (thy, (tyi, tmi, thi)) = (thy, (tyi, set tmi v, thi)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 317 | fun setth v (thy, (tyi, tmi, thi)) = (thy, (tyi, tmi, set thi v)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 318 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 319 | fun last_thm (_, _, (map, no)) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 320 | case Inttab.lookup map no of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 321 | NONE => error "Import_Rule.last_thm: lookup failed" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 322 | | SOME thm => thm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 323 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 324 | fun listLast (h1 :: (h2 :: t)) = apfst (fn t => h1 :: h2 :: t) (listLast t) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 325 | | listLast [p] = ([], p) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 326 | | listLast [] = error "listLast: empty" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 327 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 328 | fun pairList (h1 :: (h2 :: t)) = ((h1, h2) :: pairList t) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 329 | | pairList [] = [] | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 330 | | pairList _ = error "pairList: odd list length" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 331 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 332 | fun store_thm binding thm thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 333 | let | 
| 60367 | 334 | val ctxt = Proof_Context.init_global thy | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 335 | val thm = Drule.export_without_context_open thm | 
| 59582 | 336 | val tvs = Term.add_tvars (Thm.prop_of thm) [] | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 337 | val tns = map (fn (_, _) => "'") tvs | 
| 60367 | 338 | val nms = fst (fold_map Name.variant tns (Variable.names_of ctxt)) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 339 | val vs = map TVar ((nms ~~ (map (snd o fst) tvs)) ~~ (map snd tvs)) | 
| 60642 
48dd1cefb4ae
simplified Thm.instantiate and derivatives: the LHS refers to non-certified variables -- this merely serves as index into already certified structures (or is ignored);
 wenzelm parents: 
60367diff
changeset | 340 | val thm' = Thm.instantiate ((tvs ~~ map (Thm.ctyp_of ctxt) vs), []) thm | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 341 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 342 | snd (Global_Theory.add_thm ((binding, thm'), []) thy) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 343 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 344 | |
| 47371 | 345 | fun log_timestamp () = | 
| 346 | let | |
| 347 | val time = Time.now () | |
| 348 | val millis = nth (space_explode "." (Time.fmt 3 time)) 1 | |
| 349 | in | |
| 350 | Date.fmt "%d.%m.%Y %H:%M:%S." (Date.fromTimeLocal time) ^ millis | |
| 351 | end | |
| 352 | ||
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 353 | fun process_line str tstate = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 354 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 355 | fun process tstate (#"R", [t]) = gettm t tstate |>> refl |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 356 | | process tstate (#"B", [t]) = gettm t tstate |>> beta |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 357 | | process tstate (#"1", [th]) = getth th tstate |>> conj1 |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 358 | | process tstate (#"2", [th]) = getth th tstate |>> conj2 |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 359 | | process tstate (#"H", [t]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 360 |           gettm t tstate |>> Thm.apply @{cterm Trueprop} |>> Thm.trivial |-> setth
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 361 | | process tstate (#"A", [_, t]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 362 |           gettm t tstate |>> Thm.apply @{cterm Trueprop} |>> Skip_Proof.make_thm_cterm |-> setth
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 363 | | process tstate (#"C", [th1, th2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 364 | getth th1 tstate ||>> getth th2 |>> (fn (t1, t2) => comb t1 t2) |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 365 | | process tstate (#"T", [th1, th2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 366 | getth th1 tstate ||>> getth th2 |>> (fn (t1, t2) => trans t1 t2) |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 367 | | process tstate (#"E", [th1, th2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 368 | getth th1 tstate ||>> getth th2 |>> (fn (t1, t2) => eq_mp t1 t2) |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 369 | | process tstate (#"D", [th1, th2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 370 | getth th1 tstate ||>> getth th2 |>> (fn (t1, t2) => deduct t1 t2) |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 371 | | process tstate (#"L", [t, th]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 372 | gettm t tstate ||>> (fn ti => getth th ti) |>> (fn (tm, th) => abs tm th) |-> setth | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 373 | | process (thy, state) (#"M", [s]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 374 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 375 | val ctxt = Variable.set_body false (Proof_Context.init_global thy) | 
| 60648 | 376 | val thm = freezeT thy (Global_Theory.get_thm thy s) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 377 | val ((_, [th']), _) = Variable.import true [thm] ctxt | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 378 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 379 | setth th' (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 380 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 381 | | process (thy, state) (#"Q", l) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 382 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 383 | val (tys, th) = listLast l | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 384 | val (th, tstate) = getth th (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 385 | val (tys, tstate) = fold_map getty tys tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 386 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 387 | setth (inst_type (pairList tys) th thy) tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 388 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 389 | | process tstate (#"S", l) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 390 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 391 | val (tms, th) = listLast l | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 392 | val (th, tstate) = getth th tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 393 | val (tms, tstate) = fold_map gettm tms tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 394 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 395 | setth (inst (pairList tms) th) tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 396 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 397 | | process tstate (#"F", [name, t]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 398 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 399 | val (tm, (thy, state)) = gettm t tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 400 | val (th, thy) = def (transl_dot name) tm thy | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 401 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 402 | setth th (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 403 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 404 | | process (thy, state) (#"F", [name]) = setth (mdef name thy) (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 405 | | process tstate (#"Y", [name, absname, repname, t1, t2, th]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 406 | let | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 407 | val (th, tstate) = getth th tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 408 | val (t1, tstate) = gettm t1 tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 409 | val (t2, (thy, state)) = gettm t2 tstate | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 410 | val (th, thy) = tydef name absname repname t1 t2 th thy | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 411 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 412 | setth th (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 413 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 414 | | process (thy, state) (#"Y", [name, _, _]) = setth (mtydef name thy) (thy, state) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 415 | | process (thy, state) (#"t", [n]) = | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 416 |           setty (Thm.global_ctyp_of thy (TFree ("'" ^ (transl_qm n), @{sort type}))) (thy, state)
 | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 417 | | process (thy, state) (#"a", n :: l) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 418 | fold_map getty l (thy, state) |>> | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 419 | (fn tys => Thm.global_ctyp_of thy (Type (gettyname n thy, map Thm.typ_of tys))) |-> setty | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 420 | | process (thy, state) (#"v", [n, ty]) = | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 421 | getty ty (thy, state) |>> (fn ty => Thm.global_cterm_of thy (Free (transl_dot n, Thm.typ_of ty))) |-> settm | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 422 | | process (thy, state) (#"c", [n, ty]) = | 
| 59621 
291934bac95e
Thm.cterm_of and Thm.ctyp_of operate on local context;
 wenzelm parents: 
59586diff
changeset | 423 | getty ty (thy, state) |>> (fn ty => Thm.global_cterm_of thy (Const (getconstname n thy, Thm.typ_of ty))) |-> settm | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 424 | | process tstate (#"f", [t1, t2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 425 | gettm t1 tstate ||>> gettm t2 |>> (fn (t1, t2) => Thm.apply t1 t2) |-> settm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 426 | | process tstate (#"l", [t1, t2]) = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 427 | gettm t1 tstate ||>> gettm t2 |>> (fn (t1, t2) => Thm.lambda t1 t2) |-> settm | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 428 | | process (thy, state) (#"+", [s]) = | 
| 62436 | 429 | (store_thm (Binding.name (transl_dot s)) (last_thm state) thy, state) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 430 |       | process _ (c, _) = error ("process: unknown command: " ^ String.implode [c])
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 431 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 432 | fun parse_line s = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 433 | case String.tokens (fn x => (x = #"\n" orelse x = #" ")) s of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 434 | [] => error "parse_line: empty" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 435 | | h :: t => (case String.explode h of | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 436 | [] => error "parse_line: empty command" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 437 | | sh :: st => (sh, (String.implode st) :: t)) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 438 | in | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 439 | process tstate (parse_line str) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 440 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 441 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 442 | fun process_file path thy = | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 443 | (thy, init_state) |> File.fold_lines process_line path |> fst | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 444 | |
| 59936 
b8ffc3dc9e24
@{command_spec} is superseded by @{command_keyword};
 wenzelm parents: 
59621diff
changeset | 445 | val _ = Outer_Syntax.command @{command_keyword import_file}
 | 
| 50214 | 446 | "import a recorded proof file" | 
| 48881 
46e053eda5dd
clarified Parse.path vs. Parse.explode -- prefer errors in proper transaction context;
 wenzelm parents: 
47371diff
changeset | 447 | (Parse.path >> (fn name => Toplevel.theory (fn thy => process_file (Path.explode name) thy))) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 448 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 449 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 450 | end |