src/HOL/MicroJava/J/JBasis.ML
author oheimb
Tue, 09 Jan 2001 13:54:44 +0100
changeset 10828 b207d6d1bedc
parent 10613 78b1d6c3ee9c
child 10834 a7897aebbffc
permissions -rw-r--r--
improved evaluation judgment syntax; modified Loop rule
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/JBasis.ML
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    ID:         $Id$
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Author:     David von Oheimb
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
    Copyright   1999 TU Muenchen
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
Addsimps [Let_def];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
section "unique";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
Goal "(x, y) : set l --> x : fst `` set l";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
by (induct_tac "l" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
by  Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
qed_spec_mp "fst_in_set_lemma";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
Goalw [unique_def] "unique []";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
by (Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
qed "unique_Nil";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
by  (auto_tac (claset() addDs [fst_in_set_lemma],simpset()));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
qed "unique_Cons";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
Addsimps [unique_Nil,unique_Cons];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
Goal "unique l' ==> unique l --> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
\ (!(x,y):set l. !(x',y'):set l'. x' ~= x) --> unique (l @ l')";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
by (induct_tac "l" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
by  (auto_tac (claset() addDs [fst_in_set_lemma],simpset()));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
qed_spec_mp "unique_append";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
Goal "unique l --> inj f --> unique (map (%(k,x). (f k, g k x)) l)";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
by (induct_tac "l" 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8011
diff changeset
    51
by  (auto_tac (claset() addDs [fst_in_set_lemma],simpset()addsimps[inj_eq]));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
qed_spec_mp "unique_map_inj";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
(* More about Maps *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    62
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9969
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    64
by(induct_tac "l" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
by(ALLGOALS Simp_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
by Safe_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
by Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
bind_thm("Ball_set_table",result() RS mp);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
qed "map_of_map";