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 |