equal
deleted
inserted
replaced
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 |