2259 fun rename_bvars dpairs tpairs B As = |
2259 fun rename_bvars dpairs tpairs B As = |
2260 let val {vars, bounds} = rename_bvs dpairs tpairs B As in |
2260 let val {vars, bounds} = rename_bvs dpairs tpairs B As in |
2261 if null vars andalso null bounds then NONE |
2261 if null vars andalso null bounds then NONE |
2262 else |
2262 else |
2263 let |
2263 let |
2264 fun rename (t as Var ((x, i), T)) = |
2264 fun term (Var ((x, i), T)) = |
2265 (case AList.lookup (op =) vars x of |
2265 let val y = perhaps (AList.lookup (op =) vars) x |
2266 SOME y => Var ((y, i), T) |
2266 in if x = y then raise Same.SAME else Var ((y, i), T) end |
2267 | NONE => t) |
2267 | term (Abs (x, T, t)) = |
2268 | rename (Abs (x, T, t)) = |
2268 let val y = perhaps (AList.lookup (op =) bounds) x |
2269 Abs (perhaps (AList.lookup (op =) bounds) x, T, rename t) |
2269 in if x = y then Abs (x, T, term t) else Abs (y, T, Same.commit term t) end |
2270 | rename (f $ t) = rename f $ rename t |
2270 | term (t $ u) = (term t $ Same.commit term u handle Same.SAME => t $ term u) |
2271 | rename t = t; |
2271 | term _ = raise Same.SAME; |
2272 in SOME rename end |
2272 in SOME term end |
2273 end; |
2273 end; |
2274 |
2274 |
2275 |
2275 |
2276 (*** RESOLUTION ***) |
2276 (*** RESOLUTION ***) |
2277 |
2277 |
2379 else |
2379 else |
2380 (case rename_bvars dpairs tpairs B As0 of |
2380 (case rename_bvars dpairs tpairs B As0 of |
2381 NONE => (As0, rder) |
2381 NONE => (As0, rder) |
2382 | SOME f => |
2382 | SOME f => |
2383 let |
2383 let |
2384 fun proof p = Proofterm.map_proof_terms f I p; |
2384 fun proof p = Same.commit (Proofterm.map_proof_terms_same f I) p; |
2385 fun zproof p = ZTerm.todo_proof p; |
2385 fun zproof p = ZTerm.todo_proof p; |
2386 in (map (strip_apply f B) As0, deriv_rule1 zproof proof rder) end); |
2386 in (map (strip_apply (Same.commit f) B) As0, deriv_rule1 zproof proof rder) end); |
2387 in |
2387 in |
2388 (if flatten then map (Logic.flatten_params n) As1 else As1, As1, rder', n) |
2388 (if flatten then map (Logic.flatten_params n) As1 else As1, As1, rder', n) |
2389 handle TERM _ => raise THM("bicompose: 1st premise", 0, [orule]) |
2389 handle TERM _ => raise THM("bicompose: 1st premise", 0, [orule]) |
2390 end; |
2390 end; |
2391 val BBi = if lifted then strip_assums2 (B, Bi) else (B, Bi); |
2391 val BBi = if lifted then strip_assums2 (B, Bi) else (B, Bi); |