src/Pure/Isar/isar_thy.ML
changeset 6404 2daaf2943c79
parent 6371 8469852acbc0
child 6483 3e5d450c2b31
equal deleted inserted replaced
6403:86e9d24f4238 6404:2daaf2943c79
    59   val have_i: string -> Proof.context attribute list -> term * term list
    59   val have_i: string -> Proof.context attribute list -> term * term list
    60     -> ProofHistory.T -> ProofHistory.T
    60     -> ProofHistory.T -> ProofHistory.T
    61   val begin_block: ProofHistory.T -> ProofHistory.T
    61   val begin_block: ProofHistory.T -> ProofHistory.T
    62   val next_block: ProofHistory.T -> ProofHistory.T
    62   val next_block: ProofHistory.T -> ProofHistory.T
    63   val end_block: ProofHistory.T -> ProofHistory.T
    63   val end_block: ProofHistory.T -> ProofHistory.T
    64   val qed_with: bstring option * Args.src list option -> ProofHistory.T -> theory
    64   val tac: Method.text -> ProofHistory.T -> ProofHistory.T
    65   val qed_with_i: bstring option * theory attribute list option -> ProofHistory.T -> theory
    65   val then_tac: Method.text -> ProofHistory.T -> ProofHistory.T
    66   val qed: ProofHistory.T -> theory
    66   val proof: Method.text option -> ProofHistory.T -> ProofHistory.T
    67   val kill_proof: ProofHistory.T -> theory
    67   val kill_proof: ProofHistory.T -> theory
    68   val tac: Method.text -> ProofHistory.T -> ProofHistory.T
    68   val global_qed_with: bstring option * Args.src list option -> Method.text option
    69   val tac_i: (Proof.context -> Proof.method) -> ProofHistory.T -> ProofHistory.T
    69     -> Toplevel.transition -> Toplevel.transition
    70   val then_tac: Method.text -> ProofHistory.T -> ProofHistory.T
    70   val global_qed_with_i: bstring option * theory attribute list option -> Method.text option
    71   val then_tac_i: (Proof.context -> Proof.method) -> ProofHistory.T -> ProofHistory.T
    71     -> Toplevel.transition -> Toplevel.transition
    72   val proof: Method.text option -> ProofHistory.T -> ProofHistory.T
    72   val qed: Method.text option -> Toplevel.transition -> Toplevel.transition
    73   val proof_i: (Proof.context -> Proof.method) option -> ProofHistory.T -> ProofHistory.T
    73   val terminal_proof: Method.text -> Toplevel.transition -> Toplevel.transition
    74   val terminal_proof: Method.text -> ProofHistory.T -> ProofHistory.T
    74   val immediate_proof: Toplevel.transition -> Toplevel.transition
    75   val terminal_proof_i: (Proof.context -> Proof.method) -> ProofHistory.T -> ProofHistory.T
    75   val default_proof: Toplevel.transition -> Toplevel.transition
    76   val immediate_proof: ProofHistory.T -> ProofHistory.T
       
    77   val default_proof: ProofHistory.T -> ProofHistory.T
       
    78   val use_mltext: string -> theory option -> theory option
    76   val use_mltext: string -> theory option -> theory option
    79   val use_mltext_theory: string -> theory -> theory
    77   val use_mltext_theory: string -> theory -> theory
    80   val use_setup: string -> theory -> theory
    78   val use_setup: string -> theory -> theory
    81   val parse_ast_translation: string -> theory -> theory
    79   val parse_ast_translation: string -> theory -> theory
    82   val parse_translation: string -> theory -> theory
    80   val parse_translation: string -> theory -> theory
   199 val show_i = local_statement_i true Proof.show_i;
   197 val show_i = local_statement_i true Proof.show_i;
   200 val have = local_statement true Proof.have;
   198 val have = local_statement true Proof.have;
   201 val have_i = local_statement_i true Proof.have_i;
   199 val have_i = local_statement_i true Proof.have_i;
   202 
   200 
   203 
   201 
   204 (* end proof *)
   202 (* blocks *)
   205 
   203 
   206 fun gen_qed_with prep_att (alt_name, raw_atts) prf =
   204 val begin_block = ProofHistory.apply_open Proof.begin_block;
       
   205 val next_block = ProofHistory.apply Proof.next_block;
       
   206 val end_block = ProofHistory.apply_close Proof.end_block;
       
   207 
       
   208 
       
   209 (* backward steps *)
       
   210 
       
   211 val tac = ProofHistory.applys o Method.tac;
       
   212 val then_tac = ProofHistory.applys o Method.then_tac;
       
   213 val proof = ProofHistory.applys o Method.proof;
       
   214 
       
   215 
       
   216 (* local endings *)
       
   217 
       
   218 val local_qed = Toplevel.proof o ProofHistory.applys_close o Method.local_qed;
       
   219 val local_terminal_proof = Toplevel.proof o ProofHistory.applys_close o Method.local_terminal_proof;
       
   220 val local_immediate_proof = Toplevel.proof (ProofHistory.applys_close Method.local_immediate_proof);
       
   221 val local_default_proof = Toplevel.proof (ProofHistory.applys_close Method.local_default_proof);
       
   222 
       
   223 
       
   224 (* global endings *)
       
   225 
       
   226 val kill_proof = Proof.theory_of o ProofHistory.current;
       
   227 
       
   228 fun global_result finish = Toplevel.proof_to_theory (fn prf =>
   207   let
   229   let
   208     val state = ProofHistory.current prf;
   230     val state = ProofHistory.current prf;
       
   231     val _ = if Proof.at_bottom state then () else raise Toplevel.UNDEF;
       
   232     val (thy, (kind, name, thm)) = finish state;
       
   233 
       
   234     val prt_result = Pretty.block
       
   235       [Pretty.str (kind ^ " " ^ name ^ ":"), Pretty.fbrk, Display.pretty_thm thm];
       
   236   in Pretty.writeln prt_result; thy end);
       
   237 
       
   238 fun gen_global_qed_with prep_att (alt_name, raw_atts) opt_text state =
       
   239   let
   209     val thy = Proof.theory_of state;
   240     val thy = Proof.theory_of state;
   210     val alt_atts = apsome (map (prep_att thy)) raw_atts;
   241     val alt_atts = apsome (map (prep_att thy)) raw_atts;
   211     val (thy', (kind, name, thm)) = Method.qed alt_name alt_atts state;
   242   in Method.global_qed alt_name alt_atts opt_text state end;
   212 
   243 
   213     val prt_result = Pretty.block
   244 val global_qed_with = global_result oo gen_global_qed_with Attrib.global_attribute;
   214       [Pretty.str (kind ^ " " ^ name ^ ":"), Pretty.fbrk, Display.pretty_thm thm];
   245 val global_qed_with_i = global_result oo gen_global_qed_with (K I);
   215   in Pretty.writeln prt_result; thy end;
   246 val global_qed = global_qed_with (None, None);
   216 
   247 
   217 val qed_with = gen_qed_with Attrib.global_attribute;
   248 val global_terminal_proof = global_result o Method.global_terminal_proof;
   218 val qed_with_i = gen_qed_with (K I);
   249 val global_immediate_proof = global_result Method.global_immediate_proof;
   219 
   250 val global_default_proof = global_result Method.global_default_proof;
   220 val qed = qed_with (None, None);
   251 
   221 
   252 
   222 val kill_proof = Proof.theory_of o ProofHistory.current;
   253 (* common endings *)
   223 
   254 
   224 
   255 fun qed opt_text = local_qed opt_text o global_qed opt_text;
   225 (* blocks *)
   256 fun terminal_proof opt_text = local_terminal_proof opt_text o global_terminal_proof opt_text;
   226 
   257 val immediate_proof = local_immediate_proof o global_immediate_proof;
   227 val begin_block = ProofHistory.apply_open Proof.begin_block;
   258 val default_proof = local_default_proof o global_default_proof;
   228 val next_block = ProofHistory.apply Proof.next_block;
       
   229 
       
   230 
       
   231 (* backward steps *)
       
   232 
       
   233 val tac = ProofHistory.applys o Method.tac;
       
   234 val tac_i = tac o Method.Basic;
       
   235 val then_tac = ProofHistory.applys o Method.then_tac;
       
   236 val then_tac_i = then_tac o Method.Basic;
       
   237 val proof = ProofHistory.applys o Method.proof;
       
   238 val proof_i = proof o apsome Method.Basic;
       
   239 val end_block = ProofHistory.applys_close Method.end_block;
       
   240 val terminal_proof = ProofHistory.applys_close o Method.terminal_proof;
       
   241 val terminal_proof_i = terminal_proof o Method.Basic;
       
   242 val immediate_proof = ProofHistory.applys_close Method.immediate_proof;
       
   243 val default_proof = ProofHistory.applys_close Method.default_proof;
       
   244 
   259 
   245 
   260 
   246 (* use ML text *)
   261 (* use ML text *)
   247 
   262 
   248 fun use_mltext txt opt_thy = #2 (Context.pass opt_thy (use_text false) txt);
   263 fun use_mltext txt opt_thy = #2 (Context.pass opt_thy (use_text false) txt);