src/HOL/Nominal/nominal_induct.ML
changeset 30510 4120fc59dd85
parent 30092 9c3b1c136d1f
child 30549 d2d7874648bd
equal deleted inserted replaced
30509:e19d5b459a61 30510:4120fc59dd85
     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 -> Method.method
    11   val nominal_induct_method: Method.src -> Proof.context -> Proof.method
    12 end =
    12 end =
    13 struct
    13 struct
    14 
    14 
    15 (* proper tuples -- nested left *)
    15 (* proper tuples -- nested left *)
    16 
    16 
   155 fun nominal_induct_method src =
   155 fun nominal_induct_method src =
   156   Method.syntax
   156   Method.syntax
   157    (P.and_list' (Scan.repeat (unless_more_args def_inst)) --
   157    (P.and_list' (Scan.repeat (unless_more_args def_inst)) --
   158     avoiding -- fixing -- rule_spec) src
   158     avoiding -- fixing -- rule_spec) src
   159   #> (fn ((((x, y), z), w), ctxt) =>
   159   #> (fn ((((x, y), z), w), ctxt) =>
   160     Method.RAW_METHOD_CASES (fn facts =>
   160     RAW_METHOD_CASES (fn facts =>
   161       HEADGOAL (nominal_induct_tac ctxt x y z w facts)));
   161       HEADGOAL (nominal_induct_tac ctxt x y z w facts)));
   162 
   162 
   163 end;
   163 end;
   164 
   164 
   165 end;
   165 end;