src/HOL/Tools/Quotient/quotient_tacs.ML
changeset 38865 43c934dd4bc3
parent 38862 2795499a20bd
parent 38864 4abe644fcea5
child 40469 f208cb239da1
equal deleted inserted replaced
38863:9070a7c356c9 38865:43c934dd4bc3
   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