src/FOL/ex/NewLocaleSetup.thy
changeset 28887 6f28fa3bc430
parent 28873 2058a6b0eb20
child 28902 2019bcc9d8bf
equal deleted inserted replaced
28886:9cb1297b6f13 28887:6f28fa3bc430
    17 val opt_bang = Scan.optional (P.$$$ "!" >> K true) false;
    17 val opt_bang = Scan.optional (P.$$$ "!" >> K true) false;
    18 
    18 
    19 val locale_val =
    19 val locale_val =
    20   Expression.parse_expression --
    20   Expression.parse_expression --
    21     Scan.optional (P.$$$ "+" |-- P.!!! (Scan.repeat1 SpecParse.context_element)) [] ||
    21     Scan.optional (P.$$$ "+" |-- P.!!! (Scan.repeat1 SpecParse.context_element)) [] ||
    22   Scan.repeat1 SpecParse.context_element >> pair (Expression.empty_expr, []);
    22   Scan.repeat1 SpecParse.context_element >> pair ([], []);
    23 
    23 
    24 in
    24 in
    25 
    25 
    26 val _ =
    26 val _ =
    27   OuterSyntax.command "locale" "define named proof context" K.thy_decl
    27   OuterSyntax.command "locale" "define named proof context" K.thy_decl
    28     (P.name -- Scan.optional (P.$$$ "=" |-- P.!!! locale_val) ((Expression.empty_expr, []), []) -- P.opt_begin
    28     (P.name -- Scan.optional (P.$$$ "=" |-- P.!!! locale_val) (([], []), []) -- P.opt_begin
    29       >> (fn ((name, (expr, elems)), begin) =>
    29       >> (fn ((name, (expr, elems)), begin) =>
    30           (begin ? Toplevel.print) o Toplevel.begin_local_theory begin
    30           (begin ? Toplevel.print) o Toplevel.begin_local_theory begin
    31             (Expression.add_locale name name expr elems #-> TheoryTarget.begin)));
    31             (Expression.add_locale name name expr elems #-> TheoryTarget.begin)));
    32 
    32 
    33 val _ =
    33 val _ =