| author | traytel | 
| Thu, 16 Jul 2015 12:23:22 +0200 | |
| changeset 60728 | 26ffdb966759 | 
| parent 59498 | 50b60f501b05 | 
| child 62778 | f0e8ed202ce5 | 
| permissions | -rw-r--r-- | 
| 55061 | 1  | 
(* Title: HOL/Tools/BNF/bnf_fp_n2m_tactics.ML  | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
2  | 
Author: Dmitriy Traytel, TU Muenchen  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
3  | 
Copyright 2013  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
5  | 
Tactics for mutualization of nested (co)datatypes.  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
6  | 
*)  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
7  | 
|
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
8  | 
signature BNF_FP_N2M_TACTICS =  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
9  | 
sig  | 
| 
55575
 
a5e33e18fb5c
moved 'primrec' up (for real this time) and removed temporary 'old_primrec'
 
blanchet 
parents: 
55061 
diff
changeset
 | 
10  | 
val mk_rel_xtor_co_induct_tactic: BNF_Util.fp_kind -> thm list -> thm list -> thm list ->  | 
| 
58375
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
11  | 
    thm list -> thm list -> thm list -> {prems: thm list, context: Proof.context} -> tactic
 | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
12  | 
end;  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
13  | 
|
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
14  | 
structure BNF_FP_N2M_Tactics : BNF_FP_N2M_TACTICS =  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
15  | 
struct  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
16  | 
|
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
17  | 
open BNF_Util  | 
| 
55803
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
18  | 
open BNF_Tactics  | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
19  | 
open BNF_FP_Util  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
20  | 
|
| 
55803
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
21  | 
val vimage2p_unfolds = o_apply :: @{thms vimage2p_def};
 | 
| 
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
22  | 
|
| 
58375
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
23  | 
fun mk_rel_xtor_co_induct_tactic fp abs_inverses co_inducts0 rel_defs rel_monos nesting_rel_eqs0  | 
| 
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
24  | 
  nesting_rel_monos0 {context = ctxt, prems = raw_C_IHs} =
 | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
25  | 
let  | 
| 
58375
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
26  | 
    val nesting_rel_eqs = @{thms prod.rel_eq sum.rel_eq} @ nesting_rel_eqs0;
 | 
| 
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
27  | 
    val nesting_rel_monos = map (fn thm => rotate_prems ~1 (thm RS @{thm predicate2D}))
 | 
| 
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
28  | 
      (@{thms prod.rel_mono sum.rel_mono} @ nesting_rel_monos0);
 | 
| 
 
7b92932ffea5
careful with op = in n2m (actually by Dmitriy Traytel)
 
blanchet 
parents: 
58237 
diff
changeset
 | 
29  | 
val co_inducts = map (unfold_thms ctxt (vimage2p_unfolds @ nesting_rel_eqs)) co_inducts0;  | 
| 
55803
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
30  | 
val unfolds = map (fn def =>  | 
| 
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
31  | 
unfold_thms ctxt (id_apply :: vimage2p_unfolds @ abs_inverses @ no_reflexive [def])) rel_defs;  | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
32  | 
    val folded_C_IHs = map (fn thm => thm RS @{thm spec2} RS mp) raw_C_IHs;
 | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
33  | 
val C_IHs = map2 (curry op |>) folded_C_IHs unfolds;  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
34  | 
val C_IH_monos =  | 
| 
58634
 
9f10d82e8188
added parameterized ML antiquotations @{map N}, @{fold N}, @{fold_map N}, @{split_list N};
 
wenzelm 
parents: 
58375 
diff
changeset
 | 
35  | 
      @{map 3} (fn C_IH => fn mono => fn unfold =>
 | 
| 
55803
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
36  | 
        (mono RSN (2, @{thm vimage2p_mono}), C_IH)
 | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
37  | 
|> fp = Greatest_FP ? swap  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
38  | 
|> op RS  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
39  | 
|> unfold)  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
40  | 
folded_C_IHs rel_monos unfolds;  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
41  | 
in  | 
| 
55803
 
74d3fe9031d8
joint work with blanchet: intermediate typedef for the input to fp-operations
 
traytel 
parents: 
55575 
diff
changeset
 | 
42  | 
unfold_thms_tac ctxt vimage2p_unfolds THEN  | 
| 60728 | 43  | 
    HEADGOAL (CONJ_WRAP_GEN' (rtac ctxt @{thm context_conjI})
 | 
44  | 
(fn thm => rtac ctxt thm THEN_ALL_NEW (rotate_tac ~1 THEN'  | 
|
| 
59498
 
50b60f501b05
proper context for resolve_tac, eresolve_tac, dresolve_tac, forward_tac etc.;
 
wenzelm 
parents: 
58963 
diff
changeset
 | 
45  | 
REPEAT_ALL_NEW (FIRST' [eresolve_tac ctxt C_IHs, eresolve_tac ctxt C_IH_monos,  | 
| 60728 | 46  | 
           SELECT_GOAL (unfold_thms_tac ctxt nesting_rel_eqs) THEN' rtac ctxt @{thm order_refl},
 | 
| 
59498
 
50b60f501b05
proper context for resolve_tac, eresolve_tac, dresolve_tac, forward_tac etc.;
 
wenzelm 
parents: 
58963 
diff
changeset
 | 
47  | 
assume_tac ctxt, resolve_tac ctxt co_inducts,  | 
| 
 
50b60f501b05
proper context for resolve_tac, eresolve_tac, dresolve_tac, forward_tac etc.;
 
wenzelm 
parents: 
58963 
diff
changeset
 | 
48  | 
resolve_tac ctxt C_IH_monos THEN' REPEAT_ALL_NEW (eresolve_tac ctxt nesting_rel_monos)])))  | 
| 
53303
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
49  | 
co_inducts)  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
50  | 
end;  | 
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
51  | 
|
| 
 
ae49b835ca01
moved files related to "primrec_new", "primcorec", and "datatype_compat" from bitbucket co-rec repository
 
blanchet 
parents:  
diff
changeset
 | 
52  | 
end;  |