equal
deleted
inserted
replaced
22 EVERY [res_inst_tac [("x",a)] list.induct i, |
22 EVERY [res_inst_tac [("x",a)] list.induct i, |
23 rename_last_tac a ["1"] (i+2), |
23 rename_last_tac a ["1"] (i+2), |
24 ares_tac prems i]; |
24 ares_tac prems i]; |
25 |
25 |
26 goal List.thy "list(A) = {0} + (A * list(A))"; |
26 goal List.thy "list(A) = {0} + (A * list(A))"; |
27 by (rtac (list.unfold RS trans) 1); |
27 let open list; val rew = rewrite_rule con_defs in |
28 bws list.con_defs; |
28 by (fast_tac (sum_cs addSIs (equalityI :: map rew intrs) |
29 br equalityI 1; |
29 addEs [rew elim]) 1) |
30 by (fast_tac sum_cs 1); |
30 end; |
31 by (fast_tac (sum_cs addIs datatype_intrs |
|
32 addDs [list.dom_subset RS subsetD]) 1); |
|
33 val list_unfold = result(); |
31 val list_unfold = result(); |
34 |
32 |
35 (** Lemmas to justify using "list" in other recursive type definitions **) |
33 (** Lemmas to justify using "list" in other recursive type definitions **) |
36 |
34 |
37 goalw List.thy list.defs "!!A B. A<=B ==> list(A) <= list(B)"; |
35 goalw List.thy list.defs "!!A B. A<=B ==> list(A) <= list(B)"; |
46 by (rtac (A_subset_univ RS univ_mono) 2); |
44 by (rtac (A_subset_univ RS univ_mono) 2); |
47 by (fast_tac (ZF_cs addSIs [zero_in_univ, Inl_in_univ, Inr_in_univ, |
45 by (fast_tac (ZF_cs addSIs [zero_in_univ, Inl_in_univ, Inr_in_univ, |
48 Pair_in_univ]) 1); |
46 Pair_in_univ]) 1); |
49 val list_univ = result(); |
47 val list_univ = result(); |
50 |
48 |
|
49 (*These two theorems are unused -- useful??*) |
51 val list_subset_univ = standard ([list_mono, list_univ] MRS subset_trans); |
50 val list_subset_univ = standard ([list_mono, list_univ] MRS subset_trans); |
52 |
51 |
53 goal List.thy "!!l A B. [| l: list(A); A <= univ(B) |] ==> l: univ(B)"; |
52 goal List.thy "!!l A B. [| l: list(A); A <= univ(B) |] ==> l: univ(B)"; |
54 by (REPEAT (ares_tac [list_subset_univ RS subsetD] 1)); |
53 by (REPEAT (ares_tac [list_subset_univ RS subsetD] 1)); |
55 val list_into_univ = result(); |
54 val list_into_univ = result(); |