src/HOL/MicroJava/J/JBasis.thy
author paulson <lp15@cam.ac.uk>
Wed, 24 Apr 2024 20:56:26 +0100
changeset 80149 40a3fc07a587
parent 67613 ce654b0e6d69
permissions -rw-r--r--
More tidying of proofs
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.thy
41589
bbd861837ebc tuned headers;
wenzelm
parents: 35416
diff changeset
     2
    Author:     David von Oheimb, TU Muenchen
11070
cc421547e744 improved document (added headers etc)
oheimb
parents: 11026
diff changeset
     3
*)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
61361
8b5f00202e1a isabelle update_cartouches;
wenzelm
parents: 58886
diff changeset
     5
chapter \<open>Java Source Language \label{cha:j}\<close>
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 45634
diff changeset
     6
61361
8b5f00202e1a isabelle update_cartouches;
wenzelm
parents: 58886
diff changeset
     7
section \<open>Some Auxiliary Definitions\<close>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
63258
576fb8068ba6 tuned proofs;
wenzelm
parents: 61361
diff changeset
     9
theory JBasis
576fb8068ba6 tuned proofs;
wenzelm
parents: 61361
diff changeset
    10
imports
576fb8068ba6 tuned proofs;
wenzelm
parents: 61361
diff changeset
    11
  Main
66453
cc19f7ca2ed6 session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
wenzelm
parents: 63258
diff changeset
    12
  "HOL-Library.Transitive_Closure_Table"
cc19f7ca2ed6 session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
wenzelm
parents: 63258
diff changeset
    13
  "HOL-Eisbach.Eisbach"
63258
576fb8068ba6 tuned proofs;
wenzelm
parents: 61361
diff changeset
    14
begin
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    16
lemmas [simp] = Let_def
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    17
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 45634
diff changeset
    18
subsection "unique"
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    19
 
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 24783
diff changeset
    20
definition unique :: "('a \<times> 'b) list => bool" where
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    21
  "unique == distinct \<circ> map fst"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    23
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    24
lemma fst_in_set_lemma: "(x, y) \<in> set xys \<Longrightarrow> x \<in> fst ` set xys"
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    25
  by (induct xys) auto
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    26
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    27
lemma unique_Nil [simp]: "unique []"
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    28
  by (simp add: unique_def)
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    29
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    30
lemma unique_Cons [simp]: "unique ((x,y)#l) = (unique l & (\<forall>y. (x,y) \<notin> set l))"
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    31
  by (auto simp: unique_def dest: fst_in_set_lemma)
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    32
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    33
lemma unique_append: "unique l' \<Longrightarrow> unique l \<Longrightarrow>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    34
    (\<forall>(x,y) \<in> set l. \<forall>(x',y') \<in> set l'. x' \<noteq> x) \<Longrightarrow> unique (l @ l')"
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    35
  by (induct l) (auto dest: fst_in_set_lemma)
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    36
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    37
lemma unique_map_inj: "unique l ==> inj f ==> unique (map (%(k,x). (f k, g k x)) l)"
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    38
  by (induct l) (auto dest: fst_in_set_lemma simp add: inj_eq)
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    39
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    40
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 45634
diff changeset
    41
subsection "More about Maps"
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    42
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    43
lemma map_of_SomeI: "unique l \<Longrightarrow> (k, x) \<in> set l \<Longrightarrow> map_of l k = Some x"
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    44
  by (induct l) auto
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    45
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    46
lemma Ball_set_table: "(\<forall>(x,y)\<in>set l. P x y) ==> (\<forall>x. \<forall>y. map_of l x = Some y --> P x y)"
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    47
  by (induct l) auto
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    48
45634
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    49
lemma table_of_remap_SomeD:
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    50
  "map_of (map (\<lambda>((k,k'),x). (k,(k',x))) t) k = Some (k',x) ==>
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    51
    map_of t (k, k') = Some x"
b3dce535960f tuned proofs;
wenzelm
parents: 44035
diff changeset
    52
  by (atomize (full), induct t) auto
11026
a50365d21144 converted to Isar, simplifying recursion on class hierarchy
oheimb
parents: 10042
diff changeset
    53
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
end