src/HOL/Decision_Procs/langford.ML
changeset 74570 7625b5d7cfe2
parent 74569 f4613ca298e6
child 74614 c496550dd2c2
equal deleted inserted replaced
74569:f4613ca298e6 74570:7625b5d7cfe2
    79   (case Thm.term_of ct of
    79   (case Thm.term_of ct of
    80     \<^Const>\<open>HOL.conj for _ _\<close> => Thm.dest_arg1 ct :: conjuncts (Thm.dest_arg ct)
    80     \<^Const>\<open>HOL.conj for _ _\<close> => Thm.dest_arg1 ct :: conjuncts (Thm.dest_arg ct)
    81   | _ => [ct]);
    81   | _ => [ct]);
    82 
    82 
    83 val list_conj =
    83 val list_conj =
    84   foldr1 (fn (A, B) => \<^let>\<open>A = A and B = B in cterm \<open>A \<and> B\<close>\<close>);
    84   foldr1 (fn (A, B) => \<^instantiate>\<open>A and B in cterm \<open>A \<and> B\<close>\<close>);
    85 
    85 
    86 fun mk_conj_tab th =
    86 fun mk_conj_tab th =
    87   let
    87   let
    88     fun h acc th =
    88     fun h acc th =
    89       (case Thm.prop_of th of
    89       (case Thm.prop_of th of
   142             in
   142             in
   143               case ndx of
   143               case ndx of
   144                 [] => NONE
   144                 [] => NONE
   145               | _ =>
   145               | _ =>
   146                 conj_aci_rule
   146                 conj_aci_rule
   147                   \<^let>\<open>A = p and B = \<open>list_conj (ndx @ dx)\<close> in cterm \<open>Trueprop A \<equiv> Trueprop B\<close>\<close>
   147                   \<^instantiate>\<open>A = p and B = \<open>list_conj (ndx @ dx)\<close> in cterm \<open>Trueprop A \<equiv> Trueprop B\<close>\<close>
   148                 |> Thm.abstract_rule xn x
   148                 |> Thm.abstract_rule xn x
   149                 |> Drule.arg_cong_rule e
   149                 |> Drule.arg_cong_rule e
   150                 |> Conv.fconv_rule
   150                 |> Conv.fconv_rule
   151                   (Conv.arg_conv
   151                   (Conv.arg_conv
   152                     (Simplifier.rewrite
   152                     (Simplifier.rewrite
   153                       (put_simpset HOL_basic_ss ctxt addsimps @{thms simp_thms ex_simps})))
   153                       (put_simpset HOL_basic_ss ctxt addsimps @{thms simp_thms ex_simps})))
   154                 |> SOME
   154                 |> SOME
   155             end
   155             end
   156         | _ =>
   156         | _ =>
   157             conj_aci_rule
   157             conj_aci_rule
   158               \<^let>\<open>A = p and B = \<open>list_conj (eqs @ neqs)\<close> in cterm \<open>Trueprop A \<equiv> Trueprop B\<close>\<close>
   158               \<^instantiate>\<open>A = p and B = \<open>list_conj (eqs @ neqs)\<close> in cterm \<open>Trueprop A \<equiv> Trueprop B\<close>\<close>
   159             |> Thm.abstract_rule xn x |> Drule.arg_cong_rule e
   159             |> Thm.abstract_rule xn x |> Drule.arg_cong_rule e
   160             |> Conv.fconv_rule
   160             |> Conv.fconv_rule
   161                 (Conv.arg_conv
   161                 (Conv.arg_conv
   162                   (Simplifier.rewrite
   162                   (Simplifier.rewrite
   163                     (put_simpset HOL_basic_ss ctxt addsimps @{thms simp_thms ex_simps})))
   163                     (put_simpset HOL_basic_ss ctxt addsimps @{thms simp_thms ex_simps})))