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