equal
deleted
inserted
replaced
176 Conv.implies_conv split_paired_all_conv Conv.all_conv) |
176 Conv.implies_conv split_paired_all_conv Conv.all_conv) |
177 |
177 |
178 val inst_rule = |
178 val inst_rule = |
179 cterm_instantiate' [SOME cuncurry, NONE, SOME ccurry] rule |
179 cterm_instantiate' [SOME cuncurry, NONE, SOME ccurry] rule |
180 |
180 |
181 val plain_resultT = |
181 val P_rangeT = |
182 Thm.prop_of inst_rule |> Logic.strip_imp_concl |> HOLogic.dest_Trueprop |
182 Thm.prop_of inst_rule |> Logic.strip_imp_concl |> HOLogic.dest_Trueprop |
183 |> Term.head_of |> Term.dest_Var |> snd |> range_type |> domain_type |
183 |> Term.head_of |> Term.dest_Var |> snd |> range_type |
184 val PT = map (snd o dest_Free) args ---> plain_resultT --> HOLogic.boolT |
184 val PT = map (snd o dest_Free) args ---> P_rangeT |
185 val x_inst = cert (foldl1 HOLogic.mk_prod args) |
185 val x_inst = cert (foldl1 HOLogic.mk_prod args) |
186 val P_inst = cert (uncurry_n (length args) (Free (P, PT))) |
186 val P_inst = cert (uncurry_n (length args) (Free (P, PT))) |
187 |
187 |
188 val inst_rule' = inst_rule |
188 val inst_rule' = inst_rule |
189 |> Tactic.rule_by_tactic ctxt |
189 |> Tactic.rule_by_tactic ctxt |