src/HOL/Nominal/nominal_primrec.ML
changeset 46949 94aa7b81bcf6
parent 46215 0da9433f959e
child 46961 5c6955f487e5
equal deleted inserted replaced
46948:aae5566d6756 46949:94aa7b81bcf6
   390 (* outer syntax *)
   390 (* outer syntax *)
   391 
   391 
   392 val freshness_context = Parse.reserved "freshness_context";
   392 val freshness_context = Parse.reserved "freshness_context";
   393 val invariant = Parse.reserved "invariant";
   393 val invariant = Parse.reserved "invariant";
   394 
   394 
   395 fun unless_flag scan = Scan.unless ((freshness_context || invariant) -- Parse.$$$ ":") scan;
   395 fun unless_flag scan = Scan.unless ((freshness_context || invariant) -- @{keyword ":"}) scan;
   396 
   396 
   397 val parser1 = (freshness_context -- Parse.$$$ ":") |-- unless_flag Parse.term >> SOME;
   397 val parser1 = (freshness_context -- @{keyword ":"}) |-- unless_flag Parse.term >> SOME;
   398 val parser2 = (invariant -- Parse.$$$ ":") |--
   398 val parser2 = (invariant -- @{keyword ":"}) |--
   399     (Scan.repeat1 (unless_flag Parse.term) >> SOME) -- Scan.optional parser1 NONE ||
   399     (Scan.repeat1 (unless_flag Parse.term) >> SOME) -- Scan.optional parser1 NONE ||
   400   (parser1 >> pair NONE);
   400   (parser1 >> pair NONE);
   401 val options =
   401 val options =
   402   Scan.optional (Parse.$$$ "(" |-- Parse.!!! (parser2 --| Parse.$$$ ")")) (NONE, NONE);
   402   Scan.optional (@{keyword "("} |-- Parse.!!! (parser2 --| @{keyword ")"})) (NONE, NONE);
   403 
   403 
   404 val _ =
   404 val _ =
   405   Outer_Syntax.local_theory_to_proof "nominal_primrec"
   405   Outer_Syntax.local_theory_to_proof "nominal_primrec"
   406     "define primitive recursive functions on nominal datatypes" Keyword.thy_goal
   406     "define primitive recursive functions on nominal datatypes" Keyword.thy_goal
   407     (options -- Parse.fixes -- Parse.for_fixes -- Parse_Spec.where_alt_specs
   407     (options -- Parse.fixes -- Parse.for_fixes -- Parse_Spec.where_alt_specs