| author | wenzelm | 
| Sat, 09 Dec 2006 18:05:46 +0100 | |
| changeset 21726 | 092b967da9b7 | 
| parent 20289 | ba7a7c56bed5 | 
| child 24502 | 8d5326f0098b | 
| permissions | -rw-r--r-- | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 1 | (* Title: Pure/Isar/skip_proof.ML | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 2 | ID: $Id$ | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 3 | Author: Markus Wenzel, TU Muenchen | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 4 | |
| 8539 | 5 | Skipping proofs -- quick_and_dirty mode. | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 6 | *) | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 7 | |
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 8 | signature SKIP_PROOF = | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 9 | sig | 
| 11892 | 10 | val make_thm: theory -> term -> thm | 
| 11 | val cheat_tac: theory -> tactic | |
| 20289 | 12 | val prove: Proof.context -> string list -> term list -> term -> | 
| 13 |     ({prems: thm list, context: Proof.context} -> tactic) -> thm
 | |
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 14 | end; | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 15 | |
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 16 | structure SkipProof: SKIP_PROOF = | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 17 | struct | 
| 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 18 | |
| 11892 | 19 | (* oracle setup *) | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 20 | |
| 11892 | 21 | exception SkipProof of term; | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 22 | |
| 17362 | 23 | fun skip_proof (_, SkipProof prop) = | 
| 24 | if ! quick_and_dirty then prop | |
| 12318 
72348ff7d4a0
skip_proof: do not require quick_and_dirty in interactive mode;
 wenzelm parents: 
12244diff
changeset | 25 | else error "Proof may be skipped in quick_and_dirty mode only!"; | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 26 | |
| 18708 | 27 | val _ = Context.add_setup (Theory.add_oracle ("skip_proof", skip_proof));
 | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 28 | |
| 11892 | 29 | |
| 11972 | 30 | (* basic cheating *) | 
| 11892 | 31 | |
| 17362 | 32 | fun make_thm thy prop = | 
| 33 | Thm.invoke_oracle_i thy "Pure.skip_proof" (thy, SkipProof prop); | |
| 11892 | 34 | |
| 8539 | 35 | fun cheat_tac thy st = | 
| 11892 | 36 |   ALLGOALS (Tactic.rtac (make_thm thy (Var (("A", 0), propT)))) st;
 | 
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 37 | |
| 20049 | 38 | fun prove ctxt xs asms prop tac = | 
| 39 | Goal.prove ctxt xs asms prop | |
| 40 | (if ! quick_and_dirty then (K (cheat_tac (ProofContext.theory_of ctxt))) else tac); | |
| 11972 | 41 | |
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: diff
changeset | 42 | end; |