src/HOL/Tools/Function/partial_function.ML
changeset 51484 49eb8d73ae10
parent 46961 5c6955f487e5
child 51717 9e7d1c139569
equal deleted inserted replaced
51470:a981a5c8a505 51484:49eb8d73ae10
   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