src/HOLCF/adm.ML
changeset 15531 08c8dad8e399
parent 14981 e73f8140af78
child 15570 8d8c70b41bab
equal deleted inserted replaced
15530:6f43714517ee 15531:08c8dad8e399
   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 [];