src/HOL/Library/Old_SMT/old_smt_normalize.ML
changeset 59058 a78612c67ec0
parent 58112 8081087096ad
child 59621 291934bac95e
equal deleted inserted replaced
59057:5b649fb2f2e1 59058:a78612c67ec0
   183 
   183 
   184   fun minimal_pats vs ct =
   184   fun minimal_pats vs ct =
   185     if has_all_vars vs (Thm.term_of ct) then
   185     if has_all_vars vs (Thm.term_of ct) then
   186       (case Thm.term_of ct of
   186       (case Thm.term_of ct of
   187         _ $ _ =>
   187         _ $ _ =>
   188           (case pairself (minimal_pats vs) (Thm.dest_comb ct) of
   188           (case apply2 (minimal_pats vs) (Thm.dest_comb ct) of
   189             ([], []) => [[ct]]
   189             ([], []) => [[ct]]
   190           | (ctss, ctss') => union (eq_set (op aconvc)) ctss ctss')
   190           | (ctss, ctss') => union (eq_set (op aconvc)) ctss ctss')
   191       | _ => [])
   191       | _ => [])
   192     else []
   192     else []
   193 
   193 
   201 
   201 
   202   val pat =
   202   val pat =
   203     Old_SMT_Utils.mk_const_pat @{theory} @{const_name pat} Old_SMT_Utils.destT1
   203     Old_SMT_Utils.mk_const_pat @{theory} @{const_name pat} Old_SMT_Utils.destT1
   204   fun mk_pat ct = Thm.apply (Old_SMT_Utils.instT' ct pat) ct
   204   fun mk_pat ct = Thm.apply (Old_SMT_Utils.instT' ct pat) ct
   205 
   205 
   206   fun mk_clist T = pairself (Thm.cterm_of @{theory})
   206   fun mk_clist T = apply2 (Thm.cterm_of @{theory})
   207     (HOLogic.cons_const T, HOLogic.nil_const T)
   207     (HOLogic.cons_const T, HOLogic.nil_const T)
   208   fun mk_list (ccons, cnil) f cts = fold_rev (Thm.mk_binop ccons o f) cts cnil
   208   fun mk_list (ccons, cnil) f cts = fold_rev (Thm.mk_binop ccons o f) cts cnil
   209   val mk_pat_list = mk_list (mk_clist @{typ pattern})
   209   val mk_pat_list = mk_list (mk_clist @{typ pattern})
   210   val mk_mpat_list = mk_list (mk_clist @{typ "pattern list"})  
   210   val mk_mpat_list = mk_list (mk_clist @{typ "pattern list"})  
   211   fun mk_trigger ctss = mk_mpat_list (mk_pat_list mk_pat) ctss
   211   fun mk_trigger ctss = mk_mpat_list (mk_pat_list mk_pat) ctss