src/HOL/Nominal/nominal_induct.ML
changeset 30549 d2d7874648bd
parent 30510 4120fc59dd85
child 32952 aeb1e44fbc19
equal deleted inserted replaced
30548:2eef5e71edd6 30549:d2d7874648bd
     6 structure NominalInduct:
     6 structure NominalInduct:
     7 sig
     7 sig
     8   val nominal_induct_tac: Proof.context -> (binding option * term) option list list ->
     8   val nominal_induct_tac: Proof.context -> (binding option * term) option list list ->
     9     (string * typ) list -> (string * typ) list list -> thm list ->
     9     (string * typ) list -> (string * typ) list list -> thm list ->
    10     thm list -> int -> RuleCases.cases_tactic
    10     thm list -> int -> RuleCases.cases_tactic
    11   val nominal_induct_method: Method.src -> Proof.context -> Proof.method
    11   val nominal_induct_method: (Proof.context -> Proof.method) context_parser
    12 end =
    12 end =
    13 struct
    13 struct
    14 
    14 
    15 (* proper tuples -- nested left *)
    15 (* proper tuples -- nested left *)
    16 
    16 
   150 
   150 
   151 val rule_spec = Scan.lift (Args.$$$ "rule" -- Args.colon) |-- Attrib.thms;
   151 val rule_spec = Scan.lift (Args.$$$ "rule" -- Args.colon) |-- Attrib.thms;
   152 
   152 
   153 in
   153 in
   154 
   154 
   155 fun nominal_induct_method src =
   155 val nominal_induct_method =
   156   Method.syntax
   156   P.and_list' (Scan.repeat (unless_more_args def_inst)) --
   157    (P.and_list' (Scan.repeat (unless_more_args def_inst)) --
   157   avoiding -- fixing -- rule_spec >>
   158     avoiding -- fixing -- rule_spec) src
   158   (fn (((x, y), z), w) => fn ctxt =>
   159   #> (fn ((((x, y), z), w), ctxt) =>
       
   160     RAW_METHOD_CASES (fn facts =>
   159     RAW_METHOD_CASES (fn facts =>
   161       HEADGOAL (nominal_induct_tac ctxt x y z w facts)));
   160       HEADGOAL (nominal_induct_tac ctxt x y z w facts)));
   162 
   161 
   163 end;
   162 end;
   164 
   163