| author | wenzelm | 
| Fri, 08 Dec 2017 14:39:52 +0100 | |
| changeset 67161 | b762ed417ed9 | 
| 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: 
60367 
diff
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: 
56256 
diff
changeset
 | 
172  | 
val constbinding = Binding.name constname  | 
| 
 
deab4d428bc6
proper Sign.full_name to get internal name (like Sign.add_consts);
 
wenzelm 
parents: 
56256 
diff
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: 
56256 
diff
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: 
56256 
diff
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: 
59586 
diff
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: 
59586 
diff
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: 
62436 
diff
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: 
62436 
diff
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: 
62436 
diff
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: 
59586 
diff
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: 
59586 
diff
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: 
47258 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
60367 
diff
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: 
59586 
diff
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: 
59586 
diff
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: 
59586 
diff
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: 
59586 
diff
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: 
59621 
diff
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: 
47371 
diff
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  |