src/Pure/thm.ML
changeset 79252 f1415f78f7a0
parent 79251 a32428d81fe5
child 79253 1c7f52f36e2e
equal deleted inserted replaced
79251:a32428d81fe5 79252:f1415f78f7a0
  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);