336 (* (R1 ===> R2) (%x...) (%x...) ----> [|R1 x y|] ==> R2 (...x) (...y) *) |
336 (* (R1 ===> R2) (%x...) (%x...) ----> [|R1 x y|] ==> R2 (...x) (...y) *) |
337 (Const (@{const_name fun_rel}, _) $ _ $ _) $ (Abs _) $ (Abs _) |
337 (Const (@{const_name fun_rel}, _) $ _ $ _) $ (Abs _) $ (Abs _) |
338 => rtac @{thm fun_relI} THEN' quot_true_tac ctxt unlam |
338 => rtac @{thm fun_relI} THEN' quot_true_tac ctxt unlam |
339 |
339 |
340 (* (op =) (Ball...) (Ball...) ----> (op =) (...) (...) *) |
340 (* (op =) (Ball...) (Ball...) ----> (op =) (...) (...) *) |
341 | (Const (@{const_name "op ="},_) $ |
341 | (Const (@{const_name HOL.eq},_) $ |
342 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
342 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
343 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _)) |
343 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _)) |
344 => rtac @{thm ball_rsp} THEN' dtac @{thm QT_all} |
344 => rtac @{thm ball_rsp} THEN' dtac @{thm QT_all} |
345 |
345 |
346 (* (R1 ===> op =) (Ball...) (Ball...) ----> [|R1 x y|] ==> (Ball...x) = (Ball...y) *) |
346 (* (R1 ===> op =) (Ball...) (Ball...) ----> [|R1 x y|] ==> (Ball...x) = (Ball...y) *) |
348 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
348 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
349 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) |
349 (Const(@{const_name Ball},_) $ (Const (@{const_name Respects}, _) $ _) $ _) |
350 => rtac @{thm fun_relI} THEN' quot_true_tac ctxt unlam |
350 => rtac @{thm fun_relI} THEN' quot_true_tac ctxt unlam |
351 |
351 |
352 (* (op =) (Bex...) (Bex...) ----> (op =) (...) (...) *) |
352 (* (op =) (Bex...) (Bex...) ----> (op =) (...) (...) *) |
353 | Const (@{const_name "op ="},_) $ |
353 | Const (@{const_name HOL.eq},_) $ |
354 (Const(@{const_name Bex},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
354 (Const(@{const_name Bex},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
355 (Const(@{const_name Bex},_) $ (Const (@{const_name Respects}, _) $ _) $ _) |
355 (Const(@{const_name Bex},_) $ (Const (@{const_name Respects}, _) $ _) $ _) |
356 => rtac @{thm bex_rsp} THEN' dtac @{thm QT_ex} |
356 => rtac @{thm bex_rsp} THEN' dtac @{thm QT_ex} |
357 |
357 |
358 (* (R1 ===> op =) (Bex...) (Bex...) ----> [|R1 x y|] ==> (Bex...x) = (Bex...y) *) |
358 (* (R1 ===> op =) (Bex...) (Bex...) ----> [|R1 x y|] ==> (Bex...x) = (Bex...y) *) |
368 | (_ $ |
368 | (_ $ |
369 (Const(@{const_name Babs},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
369 (Const(@{const_name Babs},_) $ (Const (@{const_name Respects}, _) $ _) $ _) $ |
370 (Const(@{const_name Babs},_) $ (Const (@{const_name Respects}, _) $ _) $ _)) |
370 (Const(@{const_name Babs},_) $ (Const (@{const_name Respects}, _) $ _) $ _)) |
371 => rtac @{thm babs_rsp} THEN' RANGE [quotient_tac ctxt] |
371 => rtac @{thm babs_rsp} THEN' RANGE [quotient_tac ctxt] |
372 |
372 |
373 | Const (@{const_name "op ="},_) $ (R $ _ $ _) $ (_ $ _ $ _) => |
373 | Const (@{const_name HOL.eq},_) $ (R $ _ $ _) $ (_ $ _ $ _) => |
374 (rtac @{thm refl} ORELSE' |
374 (rtac @{thm refl} ORELSE' |
375 (equals_rsp_tac R ctxt THEN' RANGE [ |
375 (equals_rsp_tac R ctxt THEN' RANGE [ |
376 quot_true_tac ctxt (fst o dest_bcomb), quot_true_tac ctxt (snd o dest_bcomb)])) |
376 quot_true_tac ctxt (fst o dest_bcomb), quot_true_tac ctxt (snd o dest_bcomb)])) |
377 |
377 |
378 (* reflexivity of operators arising from Cong_tac *) |
378 (* reflexivity of operators arising from Cong_tac *) |
379 | Const (@{const_name "op ="},_) $ _ $ _ => rtac @{thm refl} |
379 | Const (@{const_name HOL.eq},_) $ _ $ _ => rtac @{thm refl} |
380 |
380 |
381 (* respectfulness of constants; in particular of a simple relation *) |
381 (* respectfulness of constants; in particular of a simple relation *) |
382 | _ $ (Const _) $ (Const _) (* fun_rel, list_rel, etc but not equality *) |
382 | _ $ (Const _) $ (Const _) (* fun_rel, list_rel, etc but not equality *) |
383 => resolve_tac (rsp_rules_get ctxt) THEN_ALL_NEW quotient_tac ctxt |
383 => resolve_tac (rsp_rules_get ctxt) THEN_ALL_NEW quotient_tac ctxt |
384 |
384 |