src/HOL/MicroJava/J/JTypeSafe.ML
author kleing
Thu, 21 Sep 2000 10:42:49 +0200
changeset 10042 7164dc0d24d8
parent 9385 6e1ac1629ac7
child 10613 78b1d6c3ee9c
permissions -rw-r--r--
unsymbolized
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/JTypeSafe.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 Technische Universitaet Muenchen
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     6
Type safety proof
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
9240
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
     9
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
Addsimps [split_beta];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    12
Goal "[|h a = None; (h, l)::\\<preceq>(G, lT); wf_prog wf_mb G; is_class G C|] ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    13
\ (h(a\\<mapsto>(C,(init_vars (fields (G,C))))), l)::\\<preceq>(G, lT)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
by( etac conforms_upd_obj 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
by(  rewtac oconf_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
by(  auto_tac (claset() addSDs [is_type_fields, map_of_SomeD], simpset()));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
qed "NewC_conforms";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
Goalw [cast_ok_def]
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    20
 "[| wf_prog wf_mb G; G,h\\<turnstile>v::\\<preceq>Class C; G\\<turnstile>C\\<preceq>? D; cast_ok G D h v|] \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    21
\ ==> G,h\\<turnstile>v::\\<preceq>Class D";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
by( case_tac1 "v = Null" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
by(  dtac widen_RefT 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
by(  Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
by(  rtac widen.null 1);
9348
f495dba0cb07 corrections (cast relation, Prog.ML -> Decl.ML)
oheimb
parents: 9346
diff changeset
    27
by( datac non_npD 1 1);
f495dba0cb07 corrections (cast relation, Prog.ML -> Decl.ML)
oheimb
parents: 9346
diff changeset
    28
by( auto_tac (claset() addSIs [conf_AddrI], simpset() addsimps [obj_ty_def]));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
qed "Cast_conf";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    31
Goal "[| wf_prog wf_mb G; field (G,C) fn = Some (fd, ft); (h,l)::\\<preceq>(G,lT); \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    32
\    x' = None --> G,h\\<turnstile>a'::\\<preceq> Class C; np a' x' = None |] ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    33
\ G,h\\<turnstile>the (snd (the (h (the_Addr a'))) (fn, fd))::\\<preceq>ft";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
by( dtac np_NoneD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
by( etac conjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
by( mp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
by( dtac non_np_objD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
by   Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
by( dtac (conforms_heapD RS hconfD) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
by( dtac widen_cfs_fields 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
by( dtac oconf_objD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
by Auto_tac;
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    47
qed "FAcc_type_sound";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
Goal
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    50
 "[| wf_prog wf_mb G; a = the_Addr a'; (c, fs) = the (h a); \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    51
\   (G, lT)\\<turnstile>v::T'; G\\<turnstile>T'\\<preceq>ft; \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    52
\   (G, lT)\\<turnstile>aa::Class C; \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
    53
\   field (G,C) fn = Some (fd, ft); h''\\<le>|h'; \
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    54
\   x' = None --> G,h'\\<turnstile>a'::\\<preceq> Class C; h'\\<le>|h; \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    55
\   (h, l)::\\<preceq>(G, lT); G,h\\<turnstile>x::\\<preceq>T'; np a' x' = None|] ==> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    56
\ h''\\<le>|h(a\\<mapsto>(c,(fs((fn,fd)\\<mapsto>x)))) \\<and>  \
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    57
\ (h(a\\<mapsto>(c,(fs((fn,fd)\\<mapsto>x)))), l)::\\<preceq>(G, lT) \\<and>  \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    58
\ G,h(a\\<mapsto>(c,(fs((fn,fd)\\<mapsto>x))))\\<turnstile>x::\\<preceq>T'";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    59
by( dtac np_NoneD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
by( etac conjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    62
by( dtac non_np_objD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    64
by(  SELECT_GOAL Auto_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
by( Full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
by( EVERY [forward_tac [hext_objD] 1, atac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
by( etac exE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    70
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    71
by( rtac conjI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    72
by(  fast_tac (HOL_cs addEs [hext_trans, hext_upd_obj]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    73
by( rtac conjI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    74
by(  fast_tac (HOL_cs addEs [conf_upd_obj RS iffD2]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    75
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
by( rtac conforms_upd_obj 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    77
by   Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
by(  rtac hextI 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
by(  Force_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
by( rtac oconf_hext 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    81
by(  etac hext_upd_obj 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
by( dtac widen_cfs_fields 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    83
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    84
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    85
by( rtac (oconf_obj RS iffD2) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    86
by( Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
by( strip_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    88
by( case_tac1 "(aaa, b) = (fn, fd)" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    90
by(  fast_tac (HOL_cs addIs [conf_widen]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    91
by( fast_tac (HOL_cs addDs [conforms_heapD RS hconfD, oconf_objD]) 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    92
qed "FAss_type_sound";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    94
Goalw [wf_mhead_def] "[| wf_prog wf_mb G; list_all2 (conf G h) pvs pTs; \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    95
 \ list_all2 (\\<lambda>T T'. G\\<turnstile>T\\<preceq>T') pTs pTs'; wf_mhead G (mn,pTs') rT; \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    96
\ length pTs' = length pns; nodups pns; \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    97
\ Ball (set lvars) (split (\\<lambda>vn. is_type G)) \
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
    98
\ |] ==> G,h\\<turnstile>init_vars lvars(pns[\\<mapsto>]pvs)[::\\<preceq>]map_of lvars(pns[\\<mapsto>]pTs')";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    99
by( Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   100
by( rtac lconf_ext_list 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   101
by(    rtac (Ball_set_table RS lconf_init_vars) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   102
by(    Force_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   103
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   104
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   105
by( (etac conf_list_gext_widen THEN_ALL_NEW atac) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   106
qed "Call_lemma2";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   107
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   108
Goalw [wf_java_prog_def]
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   109
 "[| wf_java_prog G; a' \\<noteq> Null; (h, l)::\\<preceq>(G, lT); \
8085
dce06445aafd new arg type for max_spec etc.
oheimb
parents: 8082
diff changeset
   110
\    max_spec G C (mn,pTsa) = {((mda,rTa),pTs')}; xc\\<le>|xh; xh\\<le>|h; \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   111
\    list_all2 (conf G h) pvs pTsa;\
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
\    (md, rT, pns, lvars, blk, res) = \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   113
\              the (method (G,fst (the (h (the_Addr a')))) (mn, pTs'));\
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   114
\ \\<forall>lT. (h, init_vars lvars(pns[\\<mapsto>]pvs)(This\\<mapsto>a'))::\\<preceq>(G, lT) --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   115
\ (G, lT)\\<turnstile>blk\\<surd> -->  h\\<le>|xi \\<and>  (xi, xl)::\\<preceq>(G, lT); \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   116
\ \\<forall>lT. (xi, xl)::\\<preceq>(G, lT) --> (\\<forall>T. (G, lT)\\<turnstile>res::T --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   117
\         xi\\<le>|h' \\<and> (h', xj)::\\<preceq>(G, lT) \\<and> (x' = None --> G,h'\\<turnstile>v::\\<preceq>T)); \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   118
\ G,xh\\<turnstile>a'::\\<preceq> Class C |] ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   119
\ xc\\<le>|h' \\<and> (h', l)::\\<preceq>(G, lT) \\<and>  (x' = None --> G,h'\\<turnstile>v::\\<preceq>rTa)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   120
by( dtac (insertI1 RSN (2,(equalityD2 RS subsetD))) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   121
by( dtac (max_spec2appl_meths RS appl_methsD) 1);
8105
2dda3e88d23f simplified definition of appl_methds, removing m_head
oheimb
parents: 8085
diff changeset
   122
by( Clarify_tac 1);
2dda3e88d23f simplified definition of appl_methds, removing m_head
oheimb
parents: 8085
diff changeset
   123
by( datac non_np_objD' 2 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   124
by(  strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   125
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   126
by( Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   127
by( EVERY'[forward_tac [hext_objD], atac] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   128
by( Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   129
by( EVERY'[dtac Call_lemma, atac, atac] 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   130
by( clarsimp_tac (claset(),simpset() addsimps [wf_java_mdecl_def])1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   131
by( thin_tac "method ?sig ?x = ?y" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   132
by( EVERY'[dtac spec, etac impE] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   133
by(  mp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   134
by(  rtac conformsI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   135
by(   etac conforms_heapD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   136
by(  rtac lconf_ext 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   137
by(   force_tac (claset() addSEs [Call_lemma2],simpset()) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   138
by(  EVERY'[etac conf_hext, etac conf_obj_AddrI, atac] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   139
by( thin_tac "?E\\<turnstile>?blk\\<surd>" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
by( etac conjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   141
by( EVERY'[dtac spec, mp_tac] 1);
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   142
(*by( thin_tac "?E::\\<preceq>(G, pT')" 1);*)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   143
by( EVERY'[dtac spec, mp_tac] 1);
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   144
by( thin_tac "?E\\<turnstile>res::?rT" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   145
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   146
by( rtac conjI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   147
by(  fast_tac (HOL_cs addIs [hext_trans]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   148
by( rtac conjI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   149
by(  rtac impI 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   150
by(  mp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   151
by(  forward_tac [conf_widen] 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   152
by(    atac 4);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   153
by(   atac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   154
by(  fast_tac (HOL_cs addSEs [widen_trans]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   155
by( etac conforms_hext 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   156
by(  etac hext_trans 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   157
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   158
by( etac conforms_heapD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   159
qed "Call_type_sound";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   160
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   161
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   162
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   163
Unify.search_bound := 40;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   164
Unify.trace_bound  := 40;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   165
Delsplits[split_if];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   166
Delsimps[fun_upd_apply];(*###*)
9240
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   167
val forward_hyp_tac = ALLGOALS (TRY o (EVERY' [dtac spec, mp_tac,
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   168
	(mp_tac ORELSE' (dtac spec THEN' mp_tac)), REPEAT o (etac conjE)]));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   169
Goal
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   170
"wf_java_prog G ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   171
\ (G\\<turnstile>(x,(h,l)) -e  \\<succ>v  -> (x', (h',l')) --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   172
\     (\\<forall>lT.    (h ,l )::\\<preceq>(G,lT) --> (\\<forall>T . (G,lT)\\<turnstile>e  :: T --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   173
\     h\\<le>|h' \\<and> (h',l')::\\<preceq>(G,lT) \\<and> (x'=None --> G,h'\\<turnstile>v  ::\\<preceq> T )))) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   174
\ (G\\<turnstile>(x,(h,l)) -es[\\<succ>]vs-> (x', (h',l')) --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   175
\     (\\<forall>lT.    (h ,l )::\\<preceq>(G,lT) --> (\\<forall>Ts. (G,lT)\\<turnstile>es[::]Ts --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   176
\     h\\<le>|h' \\<and> (h',l')::\\<preceq>(G,lT) \\<and> (x'=None --> list_all2 (\\<lambda>v T. G,h'\\<turnstile>v::\\<preceq>T) vs Ts)))) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   177
\ (G\\<turnstile>(x,(h,l)) -c       -> (x', (h',l')) --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   178
\     (\\<forall>lT.    (h ,l )::\\<preceq>(G,lT) -->       (G,lT)\\<turnstile>c  \\<surd> --> \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   179
\     h\\<le>|h' \\<and> (h',l')::\\<preceq>(G,lT)))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   180
by( rtac eval_evals_exec.induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   181
by( rewtac c_hupd_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   182
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   183
(* several simplifications, XcptE, XcptEs, XcptS, Skip *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   184
by( ALLGOALS Asm_full_simp_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   185
by( ALLGOALS strip_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   186
by( ALLGOALS (eresolve_tac ty_expr_ty_exprs_wt_stmt.elims 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   187
		THEN_ALL_NEW Full_simp_tac));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   188
by( ALLGOALS (EVERY' [REPEAT o (etac conjE), REPEAT o hyp_subst_tac]));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   189
by( rewtac wf_java_prog_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   190
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   191
(* Level 7 *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   192
9240
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   193
(* 14 NewC *)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   194
by( dtac new_AddrD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   195
by( etac disjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   196
by(  Asm_simp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   197
by( etac conjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   198
by( Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   199
by( rtac conjI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   200
by(  fast_tac (HOL_cs addSEs [NewC_conforms]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   201
by( rtac conf_obj_AddrI 1);
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   202
by(  rtac rtrancl_refl 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   203
by( Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   204
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   205
(* for Cast *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   206
by( defer_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   207
9240
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   208
(* 13 Lit *)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   209
by( etac conf_litval 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   210
9240
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   211
(* 12 BinOp *)
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   212
by forward_hyp_tac;
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   213
by forward_hyp_tac;
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   214
by( EVERY'[rtac conjI, eatac hext_trans 1] 1);
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   215
by( etac conjI 1);
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   216
by( Clarsimp_tac 1);
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   217
by( dtac eval_no_xcpt 1);
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   218
by( asm_full_simp_tac (simpset() addsplits [binop.split]) 1);
f4d76cb26433 added BinOp
oheimb
parents: 8875
diff changeset
   219
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   220
(* 11 LAcc *)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   221
by( fast_tac (claset() addEs [conforms_localD RS lconfD]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   222
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   223
(* 10 Nil *)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   224
by( Simp_tac 5);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   225
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   226
(* for FAss *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   227
by( EVERY'[eresolve_tac ty_expr_ty_exprs_wt_stmt.elims THEN_ALL_NEW Full_simp_tac, 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   228
			REPEAT o (etac conjE), hyp_subst_tac] 3);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   229
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   230
(* for if *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   231
by( (case_tac1 "the_Bool v" THEN_ALL_NEW Asm_full_simp_tac) 8);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   232
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   233
by forward_hyp_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   234
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   235
(* 10+1 if *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   236
by(  fast_tac (HOL_cs addIs [hext_trans]) 8);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   237
by( fast_tac (HOL_cs addIs [hext_trans]) 8);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   238
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   239
(* 9 Expr *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   240
by( Fast_tac 6);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   241
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   242
by( ALLGOALS Asm_full_simp_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   243
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   244
(* 8 Cast *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   245
by( EVERY'[rtac impI, dtac raise_if_NoneD, Clarsimp_tac, 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   246
           fast_tac (claset() addEs [Cast_conf])] 8);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   247
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   248
(* 7 LAss *)
9385
6e1ac1629ac7 removed obsolete expand_if = split_if;
wenzelm
parents: 9348
diff changeset
   249
by( asm_simp_tac (simpset() addsplits [split_if]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   250
by( EVERY'[eresolve_tac ty_expr_ty_exprs_wt_stmt.elims THEN_ALL_NEW Full_simp_tac] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   251
by( blast_tac (claset() addIs [conforms_upd_local, conf_widen]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   252
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   253
(* 6 FAcc *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   254
by( fast_tac (claset() addSEs [FAcc_type_sound]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   255
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   256
(* 5 While *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   257
by( fast_tac (claset() addIs [ty_expr_ty_exprs_wt_stmt.Cond, ty_expr_ty_exprs_wt_stmt.Comp, ty_expr_ty_exprs_wt_stmt.Skip]
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   258
		       addEs [ty_expr_ty_exprs_wt_stmt.Loop]) 5);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   259
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   260
by forward_hyp_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   261
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   262
(* 4 Cons *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   263
by( fast_tac (claset() addDs [evals_no_xcpt] addIs [conf_hext,hext_trans]) 3);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   264
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   265
(* 3 ;; *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   266
by( fast_tac (claset() addIs [hext_trans]) 3);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   267
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   268
(* 2 FAss *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   269
by( case_tac1 "x2 = None" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   270
by(  Asm_simp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   271
by(  fast_tac (claset() addIs [hext_trans]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   272
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   273
by( dtac eval_no_xcpt 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   274
by( SELECT_GOAL (etac FAss_type_sound 1 THEN rtac refl 1 THEN ALLGOALS atac) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   275
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   276
by prune_params_tac;
9348
f495dba0cb07 corrections (cast relation, Prog.ML -> Decl.ML)
oheimb
parents: 9346
diff changeset
   277
(* Level 51 *)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   278
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   279
(* 1 Call *)
8442
96023903c2df case_tac now subsumes both boolean and datatype cases;
wenzelm
parents: 8423
diff changeset
   280
by( case_tac "x" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   281
by(  Clarsimp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   282
by(  dtac exec_xcpt 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   283
by(  Asm_full_simp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   284
by(  dtac eval_xcpt 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   285
by(  Asm_full_simp_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   286
by(  fast_tac (HOL_cs addEs [hext_trans]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   287
by( Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   288
by( dtac evals_no_xcpt 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   289
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   290
by( case_tac1 "a' = Null" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   291
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   292
by(  dtac exec_xcpt 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   293
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   294
by(  dtac eval_xcpt 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   295
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   296
by(  fast_tac (HOL_cs addEs [hext_trans]) 1);
9348
f495dba0cb07 corrections (cast relation, Prog.ML -> Decl.ML)
oheimb
parents: 9346
diff changeset
   297
by( (rtac (rewrite_rule[wf_java_prog_def]Call_type_sound) 
f495dba0cb07 corrections (cast relation, Prog.ML -> Decl.ML)
oheimb
parents: 9346
diff changeset
   298
    THEN_ALL_NEW Asm_simp_tac) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   299
qed "eval_evals_exec_type_sound";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   300
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   301
Goal "!!E s s'. \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   302
\ [| G=prg E; wf_java_prog G; G\\<turnstile>(x,s) -e\\<succ>v -> (x',s'); s::\\<preceq>E; E\\<turnstile>e::T |] \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   303
\ ==> s'::\\<preceq>E \\<and> (x'=None --> G,heap s'\\<turnstile>v::\\<preceq>T)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   304
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   305
bd (eval_evals_exec_type_sound RS conjunct1 RS mp RS spec RS mp) 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   306
by Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   307
qed "eval_type_sound";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   308
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   309
Goal "!!E s s'. \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   310
\ [| G=prg E; wf_java_prog G; G\\<turnstile>(x,s) -s0-> (x',s'); s::\\<preceq>E; E\\<turnstile>s0\\<surd> |] \
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   311
\ ==> s'::\\<preceq>E";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   312
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   313
bd (eval_evals_exec_type_sound RS conjunct2 RS conjunct2 RS mp RS spec RS mp) 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   314
by   Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   315
qed "exec_type_sound";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   316
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   317
Goal "[|G=prg E; wf_java_prog G; G\\<turnstile>(x,s) -e\\<succ>a'-> Norm s'; a' \\<noteq> Null;\
7164dc0d24d8 unsymbolized
kleing
parents: 9385
diff changeset
   318
\         s::\\<preceq>E; E\\<turnstile>e::Class C; method (G,C) sig \\<noteq> None|] ==> \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   319
\ method (G,fst (the (heap s' (the_Addr a')))) sig \\<noteq> None";
8105
2dda3e88d23f simplified definition of appl_methds, removing m_head
oheimb
parents: 8085
diff changeset
   320
by( datac eval_type_sound 4 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   321
by( not_None_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   322
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   323
by(rewtac wf_java_prog_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   324
by( forward_tac [widen_methd] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   325
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   326
by(  rtac (not_None_eq RS iffD1) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   327
by(  Fast_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   328
by( etac conjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   329
by( dtac non_npD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   330
by Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   331
qed "all_methods_understood";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   332
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   333
Delsimps [split_beta];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   334
Addsimps[fun_upd_apply];(*###*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   335