equal
deleted
inserted
replaced
139 |
139 |
140 |
140 |
141 (*** the admissibility tactic ***) |
141 (*** the admissibility tactic ***) |
142 |
142 |
143 fun try_dest_adm (Const _ $ (Const (name, _) $ Abs abs)) = |
143 fun try_dest_adm (Const _ $ (Const (name, _) $ Abs abs)) = |
144 if name = adm_name then Some abs else None |
144 if name = adm_name then SOME abs else NONE |
145 | try_dest_adm _ = None; |
145 | try_dest_adm _ = NONE; |
146 |
146 |
147 fun adm_tac tac i state = |
147 fun adm_tac tac i state = |
148 state |> |
148 state |> |
149 let val goali = nth_subgoal i state in |
149 let val goali = nth_subgoal i state in |
150 (case try_dest_adm (Logic.strip_assums_concl goali) of |
150 (case try_dest_adm (Logic.strip_assums_concl goali) of |
151 None => no_tac |
151 NONE => no_tac |
152 | Some (s, T, t) => |
152 | SOME (s, T, t) => |
153 let |
153 let |
154 val sign = sign_of_thm state; |
154 val sign = sign_of_thm state; |
155 val prems = Logic.strip_assums_hyp goali; |
155 val prems = Logic.strip_assums_hyp goali; |
156 val params = Logic.strip_params goali; |
156 val params = Logic.strip_params goali; |
157 val ts = find_subterms t 0 []; |
157 val ts = find_subterms t 0 []; |