author | oheimb |
Tue, 09 Jan 2001 13:54:44 +0100 | |
changeset 10828 | b207d6d1bedc |
parent 10613 | 78b1d6c3ee9c |
child 10834 | a7897aebbffc |
permissions | -rw-r--r-- |
8011 | 1 |
(* Title: HOL/MicroJava/J/JBasis.ML |
2 |
ID: $Id$ |
|
3 |
Author: David von Oheimb |
|
4 |
Copyright 1999 TU Muenchen |
|
5 |
*) |
|
6 |
||
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
7 |
(*###TO Product_Type*) |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
8 |
Goalw [split_def] "Eps (split P) = (SOME xy. P (fst xy) (snd xy))"; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
9 |
by (rtac refl 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
10 |
qed "select_split"; |
8011 | 11 |
|
12 |
Addsimps [Let_def]; |
|
13 |
||
10828
b207d6d1bedc
improved evaluation judgment syntax; modified Loop rule
oheimb
parents:
10613
diff
changeset
|
14 |
bind_thm ("if_def2", read_instantiate [("P","\\<lambda>x. x")] split_if); |
b207d6d1bedc
improved evaluation judgment syntax; modified Loop rule
oheimb
parents:
10613
diff
changeset
|
15 |
|
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
16 |
(* ### To HOL.ML *) |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
17 |
Goal "[| ?!x. P x; P y |] ==> Eps P = y"; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
18 |
by (rtac some_equality 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
19 |
by (atac 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
20 |
by (etac ex1E 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
21 |
by (etac all_dupE 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
22 |
by (fast_tac HOL_cs 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
23 |
qed "ex1_some_eq_trivial"; |
8011 | 24 |
|
25 |
||
26 |
section "unique"; |
|
27 |
||
28 |
Goal "(x, y) : set l --> x : fst `` set l"; |
|
29 |
by (induct_tac "l" 1); |
|
30 |
by Auto_tac; |
|
31 |
qed_spec_mp "fst_in_set_lemma"; |
|
32 |
||
33 |
Goalw [unique_def] "unique []"; |
|
34 |
by (Simp_tac 1); |
|
35 |
qed "unique_Nil"; |
|
36 |
||
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
37 |
Goalw [unique_def] "unique ((x,y)#l) = (unique l & (!y. (x,y) ~: set l))"; |
8011 | 38 |
by (auto_tac (claset() addDs [fst_in_set_lemma],simpset())); |
39 |
qed "unique_Cons"; |
|
40 |
||
41 |
Addsimps [unique_Nil,unique_Cons]; |
|
42 |
||
43 |
Goal "unique l' ==> unique l --> \ |
|
44 |
\ (!(x,y):set l. !(x',y'):set l'. x' ~= x) --> unique (l @ l')"; |
|
45 |
by (induct_tac "l" 1); |
|
46 |
by (auto_tac (claset() addDs [fst_in_set_lemma],simpset())); |
|
47 |
qed_spec_mp "unique_append"; |
|
48 |
||
49 |
Goal "unique l --> inj f --> unique (map (%(k,x). (f k, g k x)) l)"; |
|
50 |
by (induct_tac "l" 1); |
|
8082 | 51 |
by (auto_tac (claset() addDs [fst_in_set_lemma],simpset()addsimps[inj_eq])); |
8011 | 52 |
qed_spec_mp "unique_map_inj"; |
53 |
||
54 |
(* More about Maps *) |
|
55 |
||
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
56 |
(*###Addsimps [fun_upd_same, fun_upd_other];*) |
8011 | 57 |
|
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
58 |
Goal "unique l --> (k, x) : set l --> map_of l k = Some x"; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
59 |
by (induct_tac "l" 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
60 |
by Auto_tac; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
61 |
qed_spec_mp "map_of_SomeI"; |
8011 | 62 |
|
10042 | 63 |
Goal "(\\<forall>(x,y)\\<in>set l. P x y) --> (\\<forall>x. \\<forall>y. map_of l x = Some y --> P x y)"; |
8011 | 64 |
by(induct_tac "l" 1); |
65 |
by(ALLGOALS Simp_tac); |
|
66 |
by Safe_tac; |
|
67 |
by Auto_tac; |
|
68 |
bind_thm("Ball_set_table",result() RS mp); |
|
69 |
||
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
70 |
Goal "map_of (map (\\<lambda>((k,k'),x). (k,(k',x))) t) k = Some (k',x) --> \ |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
71 |
\map_of t (k, k') = Some x"; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
72 |
by (induct_tac "t" 1); |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
73 |
by Auto_tac; |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
74 |
qed_spec_mp "table_of_remap_SomeD"; |
8011 | 75 |
|
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
76 |
(* ### To Map.ML *) |
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
77 |
Goal "map_of (map (\\<lambda>(a,b). (a,f b)) xs) x = option_map f (map_of xs x)"; |
8011 | 78 |
by (induct_tac "xs" 1); |
10613
78b1d6c3ee9c
improved superclass entry for classes and definition status of is_class, class
oheimb
parents:
10212
diff
changeset
|
79 |
by Auto_tac; |
8011 | 80 |
qed "map_of_map"; |