25 {prems: 'a, context: Proof.context} -> tactic |
25 {prems: 'a, context: Proof.context} -> tactic |
26 val mk_coalg_final_tac: int -> thm -> thm list -> thm list -> thm list list -> thm list list -> |
26 val mk_coalg_final_tac: int -> thm -> thm list -> thm list -> thm list list -> thm list list -> |
27 tactic |
27 tactic |
28 val mk_coalg_set_tac: thm -> tactic |
28 val mk_coalg_set_tac: thm -> tactic |
29 val mk_coalg_thePull_tac: int -> thm -> thm list -> thm list list -> (int -> tactic) list -> |
29 val mk_coalg_thePull_tac: int -> thm -> thm list -> thm list list -> (int -> tactic) list -> |
|
30 {prems: 'a, context: Proof.context} -> tactic |
|
31 val mk_coind_wit_tac: thm -> thm list -> thm list -> thm list -> |
30 {prems: 'a, context: Proof.context} -> tactic |
32 {prems: 'a, context: Proof.context} -> tactic |
31 val mk_coiter_unique_mor_tac: thm list -> thm -> thm -> thm list -> tactic |
33 val mk_coiter_unique_mor_tac: thm list -> thm -> thm -> thm list -> tactic |
32 val mk_col_bd_tac: int -> int -> cterm option list -> thm list -> thm list -> thm -> thm -> |
34 val mk_col_bd_tac: int -> int -> cterm option list -> thm list -> thm list -> thm -> thm -> |
33 thm list list -> tactic |
35 thm list list -> tactic |
34 val mk_col_natural_tac: cterm option list -> thm list -> thm list -> thm list -> thm list list -> |
36 val mk_col_natural_tac: cterm option list -> thm list -> thm list -> thm list -> thm list list -> |
112 val mk_unf_coinduct_upto_tac: int list -> ctyp option list -> cterm option list -> thm -> thm -> |
114 val mk_unf_coinduct_upto_tac: int list -> ctyp option list -> cterm option list -> thm -> thm -> |
113 thm -> tactic |
115 thm -> tactic |
114 val mk_unf_o_fld_tac: thm -> thm -> thm -> thm -> thm list -> |
116 val mk_unf_o_fld_tac: thm -> thm -> thm -> thm -> thm list -> |
115 {prems: 'a, context: Proof.context} -> tactic |
117 {prems: 'a, context: Proof.context} -> tactic |
116 val mk_unique_mor_tac: thm list -> thm -> tactic |
118 val mk_unique_mor_tac: thm list -> thm -> tactic |
117 val mk_wit_tac: int -> thm list -> thm list -> thm list -> |
119 val mk_wit_tac: int -> thm list -> thm list -> thm list -> thm list -> |
118 {prems: 'a, context: Proof.context} -> tactic |
120 {prems: 'a, context: Proof.context} -> tactic |
119 val mk_wpull_tac: int -> thm -> thm -> thm -> thm -> thm -> thm list -> thm list -> tactic |
121 val mk_wpull_tac: int -> thm -> thm -> thm -> thm -> thm -> thm list -> thm list -> tactic |
120 end; |
122 end; |
121 |
123 |
122 structure BNF_GFP_Tactics : BNF_GFP_TACTICS = |
124 structure BNF_GFP_Tactics : BNF_GFP_TACTICS = |
1461 rtac pick, REPEAT_DETERM_N (m - 1) o etac conjI, atac, |
1463 rtac pick, REPEAT_DETERM_N (m - 1) o etac conjI, atac, |
1462 rtac @{thm set_mp[OF equalityD2[OF thePull_def]]}, rtac CollectI, |
1464 rtac @{thm set_mp[OF equalityD2[OF thePull_def]]}, rtac CollectI, |
1463 rtac @{thm prod_caseI}, etac conjI, etac conjI, atac]) |
1465 rtac @{thm prod_caseI}, etac conjI, etac conjI, atac]) |
1464 (pick_cols ~~ hset_defs)] 1; |
1466 (pick_cols ~~ hset_defs)] 1; |
1465 |
1467 |
1466 fun mk_wit_tac n unf_flds set_simp wit {context = ctxt, prems = _} = |
1468 fun mk_wit_tac n unf_flds set_simp wit coind_wits {context = ctxt, prems = _} = |
|
1469 ALLGOALS (TRY o (eresolve_tac coind_wits THEN' rtac refl)) THEN |
1467 REPEAT_DETERM (atac 1 ORELSE |
1470 REPEAT_DETERM (atac 1 ORELSE |
1468 EVERY' [dtac @{thm set_rev_mp}, rtac equalityD1, resolve_tac set_simp, |
1471 EVERY' [dtac @{thm set_rev_mp}, rtac equalityD1, resolve_tac set_simp, |
1469 K (Local_Defs.unfold_tac ctxt unf_flds), |
1472 K (Local_Defs.unfold_tac ctxt unf_flds), |
1470 REPEAT_DETERM_N n o etac UnE, |
1473 REPEAT_DETERM_N n o etac UnE, |
1471 REPEAT_DETERM o |
1474 REPEAT_DETERM o |
1473 (eresolve_tac wit ORELSE' |
1476 (eresolve_tac wit ORELSE' |
1474 (dresolve_tac wit THEN' |
1477 (dresolve_tac wit THEN' |
1475 (etac FalseE ORELSE' |
1478 (etac FalseE ORELSE' |
1476 EVERY' [hyp_subst_tac, dtac @{thm set_rev_mp}, rtac equalityD1, resolve_tac set_simp, |
1479 EVERY' [hyp_subst_tac, dtac @{thm set_rev_mp}, rtac equalityD1, resolve_tac set_simp, |
1477 K (Local_Defs.unfold_tac ctxt unf_flds), REPEAT_DETERM_N n o etac UnE]))))] 1); |
1480 K (Local_Defs.unfold_tac ctxt unf_flds), REPEAT_DETERM_N n o etac UnE]))))] 1); |
|
1481 |
|
1482 fun mk_coind_wit_tac induct coiters set_nats wits {context = ctxt, prems = _} = |
|
1483 rtac induct 1 THEN ALLGOALS (TRY o rtac impI THEN' TRY o hyp_subst_tac) THEN |
|
1484 Local_Defs.unfold_tac ctxt (coiters @ set_nats @ @{thms image_id id_apply}) THEN |
|
1485 ALLGOALS (REPEAT_DETERM o etac imageE THEN' TRY o hyp_subst_tac) THEN |
|
1486 ALLGOALS (TRY o |
|
1487 FIRST' [rtac TrueI, rtac refl, etac (refl RSN (2, mp)), dresolve_tac wits THEN' etac FalseE]) |
1478 |
1488 |
1479 fun mk_rel_unfold_tac in_Jrels i in_rel map_comp map_cong map_simp set_simps unf_inject unf_fld |
1489 fun mk_rel_unfold_tac in_Jrels i in_rel map_comp map_cong map_simp set_simps unf_inject unf_fld |
1480 set_naturals set_incls set_set_inclss = |
1490 set_naturals set_incls set_set_inclss = |
1481 let |
1491 let |
1482 val m = length set_incls; |
1492 val m = length set_incls; |