src/HOL/Tools/ATP/recon_translate_proof.ML
changeset 20294 a69cda724b5a
parent 20259 5eda3b38ec90
equal deleted inserted replaced
20293:e7bed14f4de2 20294:a69cda724b5a
     4 *)
     4 *)
     5 
     5 
     6 structure ReconTranslateProof =
     6 structure ReconTranslateProof =
     7 struct
     7 struct
     8 
     8 
     9 fun thm_vars thm = map (fn ((name,ix),_) => name) (Drule.vars_of thm);
     9 fun thm_varnames thm =
       
    10   (Drule.fold_terms o Term.fold_aterms)
       
    11     (fn Var ((x, _), _) => insert (op =) x | _ => I) thm [];
    10 
    12 
    11 exception Reflex_equal;
    13 exception Reflex_equal;
    12 
    14 
    13 (********************************)
    15 (********************************)
    14 (* Proofstep datatype           *)
    16 (* Proofstep datatype           *)
    78 (************************************************)
    80 (************************************************)
    79 
    81 
    80 fun follow_axiom clauses  allvars (clausenum:int) thml clause_strs =  
    82 fun follow_axiom clauses  allvars (clausenum:int) thml clause_strs =  
    81     let val this_axiom = (the o AList.lookup (op =) clauses) clausenum
    83     let val this_axiom = (the o AList.lookup (op =) clauses) clausenum
    82 	val (res, numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause this_axiom clause_strs allvars)         
    84 	val (res, numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause this_axiom clause_strs allvars)         
    83 	val thmvars = thm_vars res
    85 	val thmvars = thm_varnames res
    84     in
    86     in
    85 	(res, (Axiom,clause_strs,thmvars )  )
    87 	(res, (Axiom,clause_strs,thmvars )  )
    86     end
    88     end
    87     handle Option => reconstruction_failed "follow_axiom"
    89     handle Option => reconstruction_failed "follow_axiom"
    88 
    90 
    94 fun follow_binary ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs =
    96 fun follow_binary ((clause1, lit1), (clause2 , lit2)) allvars thml clause_strs =
    95     let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
    97     let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
    96 	val thm2 =  (the o AList.lookup (op =) thml) clause2
    98 	val thm2 =  (the o AList.lookup (op =) thml) clause2
    97 	val res =   thm1 RSN ((lit2 +1), thm2)
    99 	val res =   thm1 RSN ((lit2 +1), thm2)
    98 	val (res', numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause res clause_strs allvars)
   100 	val (res', numlist, symlist, nsymlist) = (ReconOrderClauses.rearrange_clause res clause_strs allvars)
    99 	val thmvars = thm_vars res
   101 	val thmvars = thm_varnames res
   100     in
   102     in
   101        (res',  ((Binary ((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars) )
   103        (res',  ((Binary ((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars) )
   102     end
   104     end
   103     handle Option => reconstruction_failed "follow_binary"
   105     handle Option => reconstruction_failed "follow_binary"
   104 
   106 
   113     let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
   115     let val thm1 =  select_literal (lit1 + 1) ((the o AList.lookup (op =) thml) clause1)
   114 	val thm2 =  (the o AList.lookup (op =) thml) clause2
   116 	val thm2 =  (the o AList.lookup (op =) thml) clause2
   115 	val res =   thm1 RSN ((lit2 +1), thm2)
   117 	val res =   thm1 RSN ((lit2 +1), thm2)
   116 	val (res', numlist, symlist, nsymlist) = 
   118 	val (res', numlist, symlist, nsymlist) = 
   117 	    (ReconOrderClauses.rearrange_clause res clause_strs allvars)
   119 	    (ReconOrderClauses.rearrange_clause res clause_strs allvars)
   118 	val thmvars = thm_vars res
   120 	val thmvars = thm_varnames res
   119     in
   121     in
   120        (res',  ((MRR ((clause1, lit1), (clause2 , lit2))) ,clause_strs,thmvars))
   122        (res',  ((MRR ((clause1, lit1), (clause2 , lit2))) ,clause_strs,thmvars))
   121     end
   123     end
   122     handle Option => reconstruction_failed "follow_mrr"
   124     handle Option => reconstruction_failed "follow_mrr"
   123 
   125 
   178 	     val str2 = lit_string_with_nums t2;
   180 	     val str2 = lit_string_with_nums t2;
   179 	     val facthm = read_instantiate [(str1,str2)] th;
   181 	     val facthm = read_instantiate [(str1,str2)] th;
   180 	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
   182 	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
   181 	     val (res', numlist, symlist, nsymlist) = 
   183 	     val (res', numlist, symlist, nsymlist) = 
   182 	         ReconOrderClauses.rearrange_clause res clause_strs allvars
   184 	         ReconOrderClauses.rearrange_clause res clause_strs allvars
   183 	     val thmvars = thm_vars res'
   185 	     val thmvars = thm_varnames res'
   184 	  in 
   186 	  in 
   185 		 (res',((Factor (clause,  lit1, lit2)),clause_strs,thmvars))
   187 		 (res',((Factor (clause,  lit1, lit2)),clause_strs,thmvars))
   186 	  end
   188 	  end
   187       else
   189       else
   188 	  let
   190 	  let
   190 	     val str1 = lit_string_with_nums t2;
   192 	     val str1 = lit_string_with_nums t2;
   191 	     val facthm = read_instantiate [(str1,str2)] th;
   193 	     val facthm = read_instantiate [(str1,str2)] th;
   192 	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
   194 	     val res = hd (Seq.list_of(delete_assump_tac  facthm (lit1 + 1)))
   193 	     val (res', numlist, symlist, nsymlist) = 
   195 	     val (res', numlist, symlist, nsymlist) = 
   194 	         ReconOrderClauses.rearrange_clause res clause_strs allvars
   196 	         ReconOrderClauses.rearrange_clause res clause_strs allvars
   195 	     val thmvars = thm_vars res'
   197 	     val thmvars = thm_varnames res'
   196 	  in 
   198 	  in 
   197 		 (res', ((Factor (clause,  lit1, lit2)),clause_strs, thmvars))         
   199 		 (res', ((Factor (clause,  lit1, lit2)),clause_strs, thmvars))         
   198 	  end
   200 	  end
   199    end
   201    end
   200    handle Option => reconstruction_failed "follow_factor"
   202    handle Option => reconstruction_failed "follow_factor"
   242 		   val newth = Seq.hd (biresolution false [(false, mod_lit_th')] 1 eqsubst)
   244 		   val newth = Seq.hd (biresolution false [(false, mod_lit_th')] 1 eqsubst)
   243 		   val newth' =negate_head newth 
   245 		   val newth' =negate_head newth 
   244 		in 
   246 		in 
   245 		   ReconOrderClauses.rearrange_clause newth' clause_strs allvars
   247 		   ReconOrderClauses.rearrange_clause newth' clause_strs allvars
   246 		end)
   248 		end)
   247       val thmvars = thm_vars res
   249       val thmvars = thm_varnames res
   248    in 
   250    in 
   249      (res, ((Para((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars))
   251      (res, ((Para((clause1, lit1), (clause2 , lit2))),clause_strs,thmvars))
   250    end
   252    end
   251    handle Option => reconstruction_failed "follow_standard_para"
   253    handle Option => reconstruction_failed "follow_standard_para"
   252 
   254 
   296 	  val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
   298 	  val newth = Seq.hd (biresolution false [(false, mod_lit_th)] 1 eqsubst)
   297      	  val newthm = negate_head newth
   299      	  val newthm = negate_head newth
   298 	  val newthm' = delete_assumps eq_lit_prem_num newthm
   300 	  val newthm' = delete_assumps eq_lit_prem_num newthm
   299 	  val (res, numlist, symlist, nsymlist) =
   301 	  val (res, numlist, symlist, nsymlist) =
   300 	      ReconOrderClauses.rearrange_clause newthm clause_strs allvars
   302 	      ReconOrderClauses.rearrange_clause newthm clause_strs allvars
   301 	  val thmvars = thm_vars res
   303 	  val thmvars = thm_varnames res
   302        in
   304        in
   303 	   (res, ((Rewrite ((clause1, lit1),  (clause2, lit2))),clause_strs,thmvars))
   305 	   (res, ((Rewrite ((clause1, lit1),  (clause2, lit2))),clause_strs,thmvars))
   304        end
   306        end
   305        handle Option => reconstruction_failed "follow_rewrite"
   307        handle Option => reconstruction_failed "follow_rewrite"
   306 
   308 
   316 	val prems1 = prems_of th1
   318 	val prems1 = prems_of th1
   317 	val newthm = refl RSN ((lit1+ 1), th1)
   319 	val newthm = refl RSN ((lit1+ 1), th1)
   318 		     handle THM _ =>  hd (Seq.list_of(delete_assump_tac  th1 (lit1 + 1)))
   320 		     handle THM _ =>  hd (Seq.list_of(delete_assump_tac  th1 (lit1 + 1)))
   319 	val (res, numlist, symlist, nsymlist) =
   321 	val (res, numlist, symlist, nsymlist) =
   320 	    ReconOrderClauses.rearrange_clause newthm clause_strs allvars
   322 	    ReconOrderClauses.rearrange_clause newthm clause_strs allvars
   321 	val thmvars = thm_vars res
   323 	val thmvars = thm_varnames res
   322     in 
   324     in 
   323 	(res, ((Obvious (clause1, lit1)),clause_strs,thmvars))
   325 	(res, ((Obvious (clause1, lit1)),clause_strs,thmvars))
   324     end
   326     end
   325     handle Option => reconstruction_failed "follow_obvious"
   327     handle Option => reconstruction_failed "follow_obvious"
   326 
   328