src/HOL/Nominal/nominal_induct.ML
changeset 19036 73782d21e855
parent 18610 05a5e950d5f1
child 19115 bc8da9b4a81c
equal deleted inserted replaced
19035:678ef6658a0e 19036:73782d21e855
   123 
   123 
   124 val avoidingN = "avoiding";
   124 val avoidingN = "avoiding";
   125 val fixingN = "fixing";
   125 val fixingN = "fixing";
   126 val ruleN = "rule";
   126 val ruleN = "rule";
   127 
   127 
   128 val inst = Scan.lift (Args.$$$ "_") >> K NONE || Args.local_term >> SOME;
   128 val inst = Scan.lift (Args.$$$ "_") >> K NONE || Args.term >> SOME;
   129 
   129 
   130 val def_inst =
   130 val def_inst =
   131   ((Scan.lift (Args.name --| (Args.$$$ "\\<equiv>" || Args.$$$ "==")) >> SOME)
   131   ((Scan.lift (Args.name --| (Args.$$$ "\\<equiv>" || Args.$$$ "==")) >> SOME)
   132       -- Args.local_term) >> SOME ||
   132       -- Args.term) >> SOME ||
   133     inst >> Option.map (pair NONE);
   133     inst >> Option.map (pair NONE);
   134 
   134 
   135 val free = Scan.state -- Args.local_term >> (fn (_, Free v) => v | (ctxt, t) =>
   135 val free = Scan.state -- Args.term >> (fn (_, Free v) => v | (ctxt, t) =>
   136   error ("Bad free variable: " ^ ProofContext.string_of_term ctxt t));
   136   error ("Bad free variable: " ^ ProofContext.string_of_term (Context.proof_of ctxt) t));
   137 
   137 
   138 fun unless_more_args scan = Scan.unless (Scan.lift
   138 fun unless_more_args scan = Scan.unless (Scan.lift
   139   ((Args.$$$ avoidingN || Args.$$$ fixingN || Args.$$$ ruleN) -- Args.colon)) scan;
   139   ((Args.$$$ avoidingN || Args.$$$ fixingN || Args.$$$ ruleN) -- Args.colon)) scan;
   140 
   140 
   141 
   141 
   143   Scan.repeat (unless_more_args free)) [];
   143   Scan.repeat (unless_more_args free)) [];
   144 
   144 
   145 val fixing = Scan.optional (Scan.lift (Args.$$$ fixingN -- Args.colon) |--
   145 val fixing = Scan.optional (Scan.lift (Args.$$$ fixingN -- Args.colon) |--
   146   Args.and_list (Scan.repeat (unless_more_args free))) [];
   146   Args.and_list (Scan.repeat (unless_more_args free))) [];
   147 
   147 
   148 val rule_spec = Scan.lift (Args.$$$ "rule" -- Args.colon) |-- Attrib.local_thmss;
   148 val rule_spec = Scan.lift (Args.$$$ "rule" -- Args.colon) |-- Attrib.thms;
   149 
   149 
   150 in
   150 in
   151 
   151 
   152 fun nominal_induct_method src =
   152 fun nominal_induct_method src =
   153   Method.syntax
   153   Method.syntax