392 val _ = |
392 val _ = |
393 OuterSyntax.command "locale" "define named proof context" K.thy_decl |
393 OuterSyntax.command "locale" "define named proof context" K.thy_decl |
394 (P.name -- Scan.optional (P.$$$ "=" |-- P.!!! locale_val) (Locale.empty, []) -- P.opt_begin |
394 (P.name -- Scan.optional (P.$$$ "=" |-- P.!!! locale_val) (Locale.empty, []) -- P.opt_begin |
395 >> (fn ((name, (expr, elems)), begin) => |
395 >> (fn ((name, (expr, elems)), begin) => |
396 (begin ? Toplevel.print) o Toplevel.begin_local_theory begin |
396 (begin ? Toplevel.print) o Toplevel.begin_local_theory begin |
397 (Locale.add_locale "" name expr elems #-> TheoryTarget.begin))); |
397 (Locale.add_locale_cmd name expr elems #-> TheoryTarget.begin))); |
398 |
398 |
399 val opt_prefix = Scan.optional (P.binding --| P.$$$ ":") Name.no_binding; |
399 val opt_prefix = Scan.optional (P.binding --| P.$$$ ":") Name.no_binding; |
400 |
400 |
401 val _ = |
401 val _ = |
402 OuterSyntax.command "interpretation" |
402 OuterSyntax.command "interpretation" |
404 (P.xname --| (P.$$$ "\\<subseteq>" || P.$$$ "<") -- P.!!! SpecParse.locale_expr |
404 (P.xname --| (P.$$$ "\\<subseteq>" || P.$$$ "<") -- P.!!! SpecParse.locale_expr |
405 >> (Toplevel.print oo (Toplevel.theory_to_proof o Locale.interpretation_in_locale I)) || |
405 >> (Toplevel.print oo (Toplevel.theory_to_proof o Locale.interpretation_in_locale I)) || |
406 opt_prefix -- SpecParse.locale_expr -- SpecParse.locale_insts |
406 opt_prefix -- SpecParse.locale_expr -- SpecParse.locale_insts |
407 >> (fn ((name, expr), insts) => Toplevel.print o |
407 >> (fn ((name, expr), insts) => Toplevel.print o |
408 Toplevel.theory_to_proof |
408 Toplevel.theory_to_proof |
409 (Locale.interpretation I (true, Name.name_of name) expr insts #> snd))); |
409 (Locale.interpretation_cmd (Name.name_of name) expr insts))); |
410 |
410 |
411 val _ = |
411 val _ = |
412 OuterSyntax.command "interpret" |
412 OuterSyntax.command "interpret" |
413 "prove and register interpretation of locale expression in proof context" |
413 "prove and register interpretation of locale expression in proof context" |
414 (K.tag_proof K.prf_goal) |
414 (K.tag_proof K.prf_goal) |
415 (opt_prefix -- SpecParse.locale_expr -- SpecParse.locale_insts |
415 (opt_prefix -- SpecParse.locale_expr -- SpecParse.locale_insts |
416 >> (fn ((name, expr), insts) => Toplevel.print o |
416 >> (fn ((name, expr), insts) => Toplevel.print o |
417 Toplevel.proof' |
417 Toplevel.proof' |
418 (fn int => Locale.interpret Seq.single (true, Name.name_of name) expr insts int #> snd))); |
418 (fn int => Locale.interpret_cmd (Name.name_of name) expr insts int))); |
419 |
419 |
420 |
420 |
421 (* classes *) |
421 (* classes *) |
422 |
422 |
423 val class_val = |
423 val class_val = |