| author | wenzelm | 
| Sat, 14 May 2011 16:03:28 +0200 | |
| changeset 42803 | 7ed59879b1b6 | 
| parent 41522 | 42d13d00ccfb | 
| child 43918 | 6ca79a354c51 | 
| permissions | -rw-r--r-- | 
| 14620 
1be590fd2422
Minor cleanup of headers and some speedup of the HOL4 import.
 skalberg parents: 
14516diff
changeset | 1 | (* Title: HOL/Import/replay.ML | 
| 
1be590fd2422
Minor cleanup of headers and some speedup of the HOL4 import.
 skalberg parents: 
14516diff
changeset | 2 | Author: Sebastian Skalberg (TU Muenchen) | 
| 
1be590fd2422
Minor cleanup of headers and some speedup of the HOL4 import.
 skalberg parents: 
14516diff
changeset | 3 | *) | 
| 
1be590fd2422
Minor cleanup of headers and some speedup of the HOL4 import.
 skalberg parents: 
14516diff
changeset | 4 | |
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 5 | structure Replay = (* FIXME proper signature *) | 
| 14516 | 6 | struct | 
| 7 | ||
| 8 | open ProofKernel | |
| 19064 | 9 | open ImportRecorder | 
| 14516 | 10 | |
| 11 | exception REPLAY of string * string | |
| 12 | fun ERR f mesg = REPLAY (f,mesg) | |
| 13 | fun NY f = raise ERR f "NOT YET!" | |
| 14 | ||
| 15 | fun replay_proof int_thms thyname thmname prf thy = | |
| 16 | let | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 17 | val _ = ImportRecorder.start_replay_proof thyname thmname | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 18 | fun rp (PRefl tm) thy = ProofKernel.REFL tm thy | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 19 | | rp (PInstT(p,lambda)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 20 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 21 | val (thy',th) = rp' p thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 22 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 23 | ProofKernel.INST_TYPE lambda th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 24 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 25 | | rp (PSubst(prfs,ctxt,prf)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 26 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 27 | val (thy',ths) = fold_rev (fn p => fn (thy, ths) => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 28 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 29 | val (thy',th) = rp' p thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 30 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 31 | (thy',th::ths) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 32 | end) prfs (thy,[]) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 33 | val (thy'',th) = rp' prf thy' | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 34 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 35 | ProofKernel.SUBST ths ctxt th thy'' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 36 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 37 | | rp (PAbs(prf,v)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 38 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 39 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 40 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 41 | ProofKernel.ABS v th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 42 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 43 | | rp (PDisch(prf,tm)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 44 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 45 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 46 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 47 | ProofKernel.DISCH tm th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 48 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 49 | | rp (PMp(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 50 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 51 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 52 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 53 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 54 | ProofKernel.MP th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 55 | end | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 56 | | rp (PHyp tm) thy = ProofKernel.ASSUME tm thy | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 57 | | rp (PDef(seg,name,rhs)) thy = | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 58 | (case ProofKernel.get_def seg name rhs thy of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 59 | (thy',SOME res) => (thy',res) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 60 | | (thy',NONE) => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 61 | if seg = thyname | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 62 | then ProofKernel.new_definition seg name rhs thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 63 |                  else raise ERR "replay_proof" ("Too late for term definition: "^seg^" != "^thyname))
 | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 64 | | rp (POracle(tg,asl,c)) thy = (*ProofKernel.mk_oracle_thm tg (map be_contract asl,c)*) NY "ORACLE" | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 65 | | rp (PSpec(prf,tm)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 66 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 67 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 68 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 69 | ProofKernel.SPEC tm th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 70 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 71 | | rp (PInst(prf,theta)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 72 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 73 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 74 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 75 | ProofKernel.INST theta th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 76 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 77 | | rp (PGen(prf,v)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 78 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 79 | val (thy',th) = rp' prf thy | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 80 | val p = ProofKernel.GEN v th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 81 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 82 | p | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 83 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 84 | | rp (PGenAbs(prf,opt,vl)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 85 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 86 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 87 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 88 | ProofKernel.GEN_ABS opt vl th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 89 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 90 | | rp (PImpAS(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 91 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 92 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 93 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 94 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 95 | ProofKernel.IMP_ANTISYM th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 96 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 97 | | rp (PSym prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 98 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 99 | val (thy1,th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 100 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 101 | ProofKernel.SYM th thy1 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 102 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 103 | | rp (PTrans(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 104 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 105 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 106 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 107 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 108 | ProofKernel.TRANS th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 109 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 110 | | rp (PComb(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 111 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 112 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 113 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 114 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 115 | ProofKernel.COMB th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 116 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 117 | | rp (PEqMp(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 118 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 119 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 120 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 121 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 122 | ProofKernel.EQ_MP th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 123 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 124 | | rp (PEqImp prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 125 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 126 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 127 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 128 | ProofKernel.EQ_IMP_RULE th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 129 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 130 | | rp (PExists(prf,ex,wit)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 131 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 132 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 133 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 134 | ProofKernel.EXISTS ex wit th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 135 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 136 | | rp (PChoose(v,prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 137 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 138 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 139 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 140 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 141 | ProofKernel.CHOOSE v th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 142 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 143 | | rp (PConj(prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 144 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 145 | val (thy1,th1) = rp' prf1 thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 146 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 147 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 148 | ProofKernel.CONJ th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 149 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 150 | | rp (PConjunct1 prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 151 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 152 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 153 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 154 | ProofKernel.CONJUNCT1 th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 155 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 156 | | rp (PConjunct2 prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 157 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 158 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 159 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 160 | ProofKernel.CONJUNCT2 th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 161 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 162 | | rp (PDisj1(prf,tm)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 163 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 164 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 165 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 166 | ProofKernel.DISJ1 th tm thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 167 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 168 | | rp (PDisj2(prf,tm)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 169 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 170 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 171 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 172 | ProofKernel.DISJ2 tm th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 173 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 174 | | rp (PDisjCases(prf,prf1,prf2)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 175 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 176 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 177 | val (thy1,th1) = rp' prf1 thy' | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 178 | val (thy2,th2) = rp' prf2 thy1 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 179 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 180 | ProofKernel.DISJ_CASES th th1 th2 thy2 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 181 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 182 | | rp (PNotI prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 183 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 184 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 185 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 186 | ProofKernel.NOT_INTRO th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 187 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 188 | | rp (PNotE prf) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 189 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 190 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 191 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 192 | ProofKernel.NOT_ELIM th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 193 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 194 | | rp (PContr(prf,tm)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 195 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 196 | val (thy',th) = rp' prf thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 197 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 198 | ProofKernel.CCONTR tm th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 199 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 200 | | rp (PTmSpec _) _ = raise ERR "rp" "Shouldn't reach here (PTmSpec)" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 201 | | rp (PTyDef _) _ = raise ERR "rp" "Shouldn't reach here (PTyDef)" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 202 | | rp (PTyIntro _) _ = raise ERR "rp" "Shouldn't reach here (PTyIntro)" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 203 | | rp PDisk _ = raise ERR "rp" "Shouldn't reach here (PDisk)" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 204 | | rp _ _ = raise ERR "rp" "What the hell is this? Which case did I forget?" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 205 | and rp' p thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 206 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 207 | val pc = content_of p | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 208 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 209 | case pc of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 210 | PDisk => (case disk_info_of p of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 211 | SOME(thyname',thmname) => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 212 | (case Int.fromString thmname of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 213 | SOME i => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 214 | if thyname' = thyname | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 215 | then | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 216 | (case Array.sub(int_thms,i-1) of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 217 | NONE => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 218 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 219 | val (thy',th) = rp' (snd (import_proof thyname' thmname thy) thy) thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 220 | val _ = Array.update(int_thms,i-1,SOME th) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 221 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 222 | (thy',th) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 223 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 224 | | SOME th => (thy,th)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 225 |                                        else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 226 | | NONE => | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 227 | (case ProofKernel.get_thm thyname' thmname thy of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 228 | (thy',SOME res) => (thy',res) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 229 | | (thy',NONE) => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 230 | if thyname' = thyname | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 231 | then | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 232 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 233 |                                                     val _ = writeln ("Found no " ^ thmname ^ " theorem, replaying...")
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 234 | val (f_opt,prf) = import_proof thyname' thmname thy' | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 235 | val prf = prf thy' | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 236 | val (thy',th) = replay_proof int_thms thyname' thmname prf thy' | 
| 17322 | 237 |                                                     val _ = writeln ("Successfully finished replaying "^thmname^" !")
 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 238 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 239 | case content_of prf of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 240 | PTmSpec _ => (thy',th) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 241 | | PTyDef _ => (thy',th) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 242 | | PTyIntro _ => (thy',th) | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 243 | | _ => ProofKernel.store_thm thyname' thmname th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 244 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 245 |                                             else raise ERR "replay_proof" ("Library " ^ thyname' ^ " should be built before " ^ thyname ^ " (" ^ thmname ^ ")")))
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 246 | | NONE => raise ERR "rp'.PDisk" "Not enough information") | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 247 | | PAxm(name,c) => | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 248 | (case ProofKernel.get_axiom thyname name thy of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 249 | (thy',SOME res) => (thy',res) | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 250 | | (thy',NONE) => ProofKernel.new_axiom name c thy') | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 251 | | PTmSpec(seg,names,prf') => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 252 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 253 | val (thy',th) = rp' prf' thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 254 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 255 | ProofKernel.new_specification seg thmname names th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 256 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 257 | | PTyDef(seg,name,prf') => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 258 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 259 | val (thy',th) = rp' prf' thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 260 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 261 | ProofKernel.new_type_definition seg thmname name th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 262 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 263 | | PTyIntro(seg,name,abs_name,rep_name,P,t,prf') => | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 264 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 265 | val (thy',th) = rp' prf' thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 266 | in | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 267 | ProofKernel.type_introduction seg thmname name abs_name rep_name (P,t) th thy' | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 268 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 269 | | _ => rp pc thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 270 | end | 
| 14516 | 271 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 272 | let | 
| 37778 
87b5dfe00387
do not intercept ML exceptions -- printing exception positions/text is the job of the Isar/ML toplevel;
 wenzelm parents: 
35842diff
changeset | 273 | val x = rp' prf thy | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 274 | val _ = ImportRecorder.stop_replay_proof thyname thmname | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 275 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 276 | x | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 277 | end | 
| 41522 
42d13d00ccfb
more FIXMEs concerning bad catch-all exception handlers;
 wenzelm parents: 
41164diff
changeset | 278 | end handle x => (ImportRecorder.abort_replay_proof thyname thmname; reraise x) (* FIXME avoid handle x ?? *) | 
| 14516 | 279 | |
| 280 | fun setup_int_thms thyname thy = | |
| 281 | let | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 282 | val fname = | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 283 | case ProofKernel.get_proof_dir thyname thy of | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 284 |                 SOME p => OS.Path.joinDirFile {dir=p,file=OS.Path.joinBaseExt{base = "facts",ext=SOME "lst"}}
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 285 | | NONE => error "Cannot find proof files" | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 286 | val is = TextIO.openIn fname | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 287 | val (num_int_thms,facts) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 288 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 289 | fun get_facts facts = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 290 | case TextIO.inputLine is of | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 291 | NONE => (case facts of | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 292 | i::facts => (the (Int.fromString i),map ProofKernel.protect_factname (rev facts)) | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 293 | | _ => raise ERR "replay_thm" "Bad facts.lst file") | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 294 | | SOME fact => get_facts ((String.substring(fact,0,String.size fact -1 ))::facts) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 295 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 296 | get_facts [] | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 297 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 298 | val _ = TextIO.closeIn is | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 299 | val int_thms = Array.array(num_int_thms,NONE:thm option) | 
| 14516 | 300 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 301 | (int_thms,facts) | 
| 14516 | 302 | end | 
| 303 | ||
| 304 | fun import_single_thm thyname int_thms thmname thy = | |
| 305 | let | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 306 | fun replay_fact (thmname,thy) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 307 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 308 | val prf = mk_proof PDisk | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 309 | val _ = set_disk_info_of prf thyname thmname | 
| 17594 | 310 |                 val _ = writeln ("Replaying "^thmname^" ...")
 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 311 | val p = fst (replay_proof int_thms thyname thmname prf thy) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 312 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 313 | p | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 314 | end | 
| 14516 | 315 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 316 | replay_fact (thmname,thy) | 
| 14516 | 317 | end | 
| 318 | ||
| 19064 | 319 | fun replay_chached_thm int_thms thyname thmname = | 
| 320 | let | |
| 32970 
fbd2bb2489a8
operations of structure Skip_Proof (formerly SkipProof) no longer require quick_and_dirty mode;
 wenzelm parents: 
32966diff
changeset | 321 | fun th_of thy = Skip_Proof.make_thm thy | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 322 | fun err msg = raise ERR "replay_cached_thm" msg | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 323 |         val _ = writeln ("Replaying (from cache) "^thmname^" ...")
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 324 | fun rps [] thy = thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 325 | | rps (t::ts) thy = rps ts (rp t thy) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 326 | and rp (ThmEntry (thyname', thmname', aborted, History history)) thy = rps history thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 327 | | rp (DeltaEntry ds) thy = fold delta ds thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 328 | and delta (Specification (names, th)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 329 | fst (Choice_Specification.add_specification NONE names (thy,th_of thy th)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 330 | | delta (Hol_mapping (thyname, thmname, isaname)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 331 | add_hol4_mapping thyname thmname isaname thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 332 | | delta (Hol_pending (thyname, thmname, th)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 333 | add_hol4_pending thyname thmname ([], th_of thy th) thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 334 | | delta (Consts cs) thy = Sign.add_consts_i (map (fn (c, T, mx) => (Binding.name c, T, mx)) cs) thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 335 | | delta (Hol_const_mapping (thyname, constname, fullcname)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 336 | add_hol4_const_mapping thyname constname true fullcname thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 337 | | delta (Hol_move (fullname, moved_thmname)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 338 | add_hol4_move fullname moved_thmname thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 339 | | delta (Defs (thmname, eq)) thy = | 
| 39557 
fe5722fce758
renamed structure PureThy to Pure_Thy and moved most content to Global_Theory, to emphasize that this is global-only;
 wenzelm parents: 
37778diff
changeset | 340 | snd (Global_Theory.add_defs false [((Binding.name thmname, eq), [])] thy) | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 341 | | delta (Hol_theorem (thyname, thmname, th)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 342 | add_hol4_theorem thyname thmname ([], th_of thy th) thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 343 | | delta (Typedef (thmname, (t, vs, mx), c, repabs, th)) thy = | 
| 35842 | 344 | snd (Typedef.add_typedef_global false (Option.map Binding.name thmname) | 
| 345 | (Binding.name t, map (rpair dummyS) vs, mx) c | |
| 30346 | 346 | (Option.map (pairself Binding.name) repabs) (rtac (th_of thy th) 1) thy) | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 347 | | delta (Hol_type_mapping (thyname, tycname, fulltyname)) thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 348 | add_hol4_type_mapping thyname tycname true fulltyname thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 349 | | delta (Indexed_theorem (i, th)) thy = | 
| 41164 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 350 | (Array.update (int_thms,i-1,SOME (ProofKernel.to_hol_thm (th_of thy th))); thy) | 
| 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 351 | | delta (Protect_varname (s,t)) thy = (ProofKernel.replay_protect_varname s t; thy) | 
| 
6854e9a40edc
avoid ML structure aliases (especially single-letter abbreviations);
 wenzelm parents: 
39557diff
changeset | 352 | | delta (Dump s) thy = ProofKernel.replay_add_dump s thy | 
| 19064 | 353 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 354 | rps | 
| 19064 | 355 | end | 
| 356 | ||
| 14516 | 357 | fun import_thms thyname int_thms thmnames thy = | 
| 358 | let | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 359 | fun zip names [] = ([], names) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 360 | | zip [] _ = ([], []) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 361 | | zip (thmname::names) ((ThmEntry (entry as (thyname',thmname',aborted,History history)))::ys) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 362 | if thyname = thyname' andalso thmname = thmname' then | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 363 | (if aborted then ([], thmname::names) else | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 364 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 365 |                      val _ = writeln ("theorem is in-sync: "^thmname)
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 366 | val (cached,normal) = zip names ys | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 367 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 368 | (entry::cached, normal) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 369 | end) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 370 | else | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 371 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 372 |                     val _ = writeln ("cached theorems are not in-sync,  expected: "^thmname^", found: "^thmname')
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 373 |                     val _ = writeln ("proceeding with next uncached theorem...")
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 374 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 375 | ([], thmname::names) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 376 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 377 |         (*      raise ERR "import_thms" ("cached theorems are not in-sync, expected: "^thmname^", found: "^thmname')*)
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 378 | | zip (thmname::_) (DeltaEntry _ :: _) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 379 |             raise ERR "import_thms" ("expected theorem '"^thmname^"', but found a delta")
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 380 | fun zip' xs (History ys) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 381 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 382 |                 val _ = writeln ("length of xs: "^(string_of_int (length xs)))
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 383 |                 val _ = writeln ("length of history: "^(string_of_int (length ys)))
 | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 384 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 385 | zip xs ys | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 386 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 387 | fun replay_fact thmname thy = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 388 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 389 | val prf = mk_proof PDisk | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 390 | val _ = set_disk_info_of prf thyname thmname | 
| 17594 | 391 |                 val _ = writeln ("Replaying "^thmname^" ...")
 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 392 | val p = fst (replay_proof int_thms thyname thmname prf thy) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 393 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 394 | p | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 395 | end | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 396 | fun replay_cache (_,thmname, _, History history) thy = replay_chached_thm int_thms thyname thmname history thy | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 397 | val (cached, normal) = zip' thmnames (ImportRecorder.get_history ()) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 398 | val _ = ImportRecorder.set_history (History (map ThmEntry cached)) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 399 | val res_thy = fold replay_fact normal (fold replay_cache cached thy) | 
| 14516 | 400 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 401 | res_thy | 
| 14516 | 402 | end | 
| 403 | ||
| 404 | fun import_thm thyname thmname thy = | |
| 405 | let | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 406 | val int_thms = fst (setup_int_thms thyname thy) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 407 | fun replay_fact (thmname,thy) = | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 408 | let | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 409 | val prf = mk_proof PDisk | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 410 | val _ = set_disk_info_of prf thyname thmname | 
| 17594 | 411 |                 val _ = writeln ("Replaying "^thmname^" ...")
 | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 412 | val p = fst (replay_proof int_thms thyname thmname prf thy) | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 413 | in | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 414 | p | 
| 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 415 | end | 
| 14516 | 416 | in | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31723diff
changeset | 417 | replay_fact (thmname,thy) | 
| 14516 | 418 | end | 
| 419 | ||
| 17959 | 420 | end |