src/HOL/MicroJava/J/WellForm.ML
author oheimb
Mon, 03 Jan 2000 14:07:08 +0100
changeset 8082 381716a86fcb
parent 8034 6fc37b5c5e98
child 8106 de9fae0cdfde
permissions -rw-r--r--
removed inj_eq from the default simpset again
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/WellForm.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
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
val class_wf = prove_goalw thy [wf_prog_def, Let_def, class_def]
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
     8
 "\\<And>X. \\<lbrakk>class G C = Some c; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> wf_cdecl wf_mb G (C,c)" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
	Asm_full_simp_tac 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
	fast_tac (set_cs addDs [get_in_set]) 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
val class_Object = prove_goalw thy [wf_prog_def, Let_def, ObjectC_def,class_def]
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    13
	"\\<And>X. wf_prog wf_mb G \\<Longrightarrow> class G Object = Some (None, [], [])" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
	safe_tac set_cs,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
	dtac in_set_get 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
	 Auto_tac]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
Addsimps [class_Object];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
val is_class_Object = prove_goalw thy [is_class_def] 
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    20
	"\\<And>X. wf_prog wf_mb G \\<Longrightarrow> is_class G Object" (K [Asm_simp_tac 1]);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
Addsimps [is_class_Object];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    23
Goal "\\<lbrakk>G\\<turnstile>C\\<prec>C1D; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> D \\<noteq> C \\<and> \\<not>(D,C)\\<in>(subcls1 G)^+";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
by( forward_tac [r_into_trancl] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
by( dtac subcls1D 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
by( strip_tac1 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    27
by( datac class_wf 1 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
by( rewtac wf_cdecl_def);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    29
by(force_tac (claset(), simpset() addsimps [reflcl_trancl RS sym] 
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    30
				  delsimps [reflcl_trancl]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
qed "subcls1_wfD";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
val wf_cdecl_supD = prove_goalw thy [wf_cdecl_def] 
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    34
"\\<And>X. \\<lbrakk>wf_cdecl wf_mb G (C, sc, r); C \\<noteq> Object\\<rbrakk> \\<Longrightarrow> \\<exists>D. sc = Some D \\<and> is_class G D" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
	pair_tac "r" 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
	Asm_full_simp_tac 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
	strip_tac1 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
	option_case_tac 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    41
Goal "\\<lbrakk>wf_prog wf_mb G; (C,D)\\<in>(subcls1 G)^+\\<rbrakk> \\<Longrightarrow> \\<not>(D,C)\\<in>(subcls1 G)^+";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
by(etac tranclE 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    43
by(TRYALL(fast_tac (HOL_cs addSDs [subcls1_wfD] addIs [trancl_trans])));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
qed "subcls_asym";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    46
val subcls_irrefl = prove_goal thy "\\<And>X. \\<lbrakk>wf_prog wf_mb G; (C,D)\\<in>(subcls1 G)^+\\<rbrakk> \\<Longrightarrow> C \\<noteq> D" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
	etac trancl_trans_induct 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
	 fast_tac (HOL_cs addDs [subcls1_wfD]) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
	fast_tac (HOL_cs addDs [subcls_asym]) 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
val acyclic_subcls1 = prove_goalw thy [acyclic_def] 
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    52
	"\\<And>X. wf_prog wf_mb G \\<Longrightarrow> acyclic (subcls1 G)" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
	strip_tac1 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
	fast_tac (HOL_cs addDs [subcls_irrefl]) 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    55
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    56
val wf_subcls1 = prove_goal thy "\\<And>X. wf_prog wf_mb G \\<Longrightarrow> wf ((subcls1 G)^-1)" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    57
	rtac finite_acyclic_wf 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    58
	 stac finite_converse 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    59
	 rtac finite_subcls1 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
	stac acyclic_converse 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
	etac acyclic_subcls1 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    62
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
val major::prems = goal thy
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    64
  "\\<lbrakk>wf_prog wf_mb G; \\<And>C. \\<forall>D. (C,D)\\<in>(subcls1 G)^+ \\<longrightarrow> P D \\<Longrightarrow> P C\\<rbrakk> \\<Longrightarrow> P C";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
by(cut_facts_tac [major RS wf_subcls1] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
by(dtac wf_trancl 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
by(asm_full_simp_tac (HOL_ss addsimps [trancl_converse]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
by(eres_inst_tac [("a","C")] wf_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
by(resolve_tac prems 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    70
by(Auto_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    71
qed "subcls_induct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    72
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    73
val prems = goal thy "\\<lbrakk>is_class G C; wf_prog wf_mb G; P Object; \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    74
\\\<And>C D fs ms. \\<lbrakk>C \\<noteq> Object; is_class G C; class G C = Some (Some D,fs,ms) \\<and> \
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    75
\   wf_cdecl wf_mb G (C, Some D,fs,ms) \\<and> G\\<turnstile>C\\<prec>C1D \\<and> is_class G D \\<and> P D\\<rbrakk> \\<Longrightarrow> P C\
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
\ \\<rbrakk> \\<Longrightarrow> P C";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    77
by( cut_facts_tac prems 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
by( rtac impE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
by(   atac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
by(  atac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    81
by( etac thin_rl 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
by( rtac subcls_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    83
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    84
by( rtac impI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    85
by( case_tac "C = Object" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    86
by(  Fast_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
by( ex_ftac is_classD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    88
by( forward_tac [class_wf] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    90
by( forward_tac [wf_cdecl_supD] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    91
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    92
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
by( rtac (hd (tl (tl (tl prems)))) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    94
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    95
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    96
by( subgoal_tac "G\\<turnstile>C\\<prec>C1D" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    97
by(  fast_tac (HOL_cs addIs [r_into_trancl]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    98
by( etac subcls1I 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    99
qed "subcls1_induct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   100
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   101
Goal "wf_prog wf_mb G \\<Longrightarrow> method (G,C) = \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   102
\ (case class G C of None \\<Rightarrow> empty | Some (sc,fs,ms) \\<Rightarrow> \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   103
\ (case sc of None \\<Rightarrow> empty | Some D \\<Rightarrow> method (G,D)) \\<oplus> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   104
\ map_of (map (\\<lambda>(s,m). (s,(C,m))) ms))";
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   105
by( stac (method_TC RS (wf_subcls1_rel RS (hd method.rules))) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   106
by( clarsimp_tac (claset(), simpset() addsimps [wf_subcls1,empty_def] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   107
		addsplits [option.split]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   108
by( case_tac "C = Object" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   109
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   110
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   111
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
by( dtac wf_cdecl_supD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   113
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   114
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   115
qed "method_rec";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   116
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   117
Goal "\\<lbrakk>class G C = Some (sc,fs,ms); wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> fields (G,C) = \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   118
\ map (\\<lambda>(fn,ft). ((fn,C),ft)) fs @ \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   119
\ (case sc of None \\<Rightarrow> [] | Some D \\<Rightarrow> fields (G,D))";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   120
by( stac (fields_TC RS (wf_subcls1_rel RS (hd fields.rules))) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   121
by( asm_simp_tac (simpset() addsimps [wf_subcls1,empty_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   122
by( option_case_tac2 "sc" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   123
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   124
by( case_tac "C = Object" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   125
by(  rotate_tac 2 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   126
by(  Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   127
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   128
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   129
by( dtac wf_cdecl_supD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   130
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   131
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   132
qed "fields_rec";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   133
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   134
val method_Object = prove_goal thy "\\<And>X. wf_prog wf_mb G \\<Longrightarrow> method (G,Object) = empty"
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   135
	(K [stac method_rec 1,Auto_tac]);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   136
val fields_Object = prove_goal thy "\\<And>X. wf_prog wf_mb G \\<Longrightarrow> fields (G,Object) = []"(K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   137
	stac fields_rec 1,Auto_tac]);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   138
Addsimps [method_Object, fields_Object];
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   139
val field_Object = prove_goalw thy [field_def]
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   140
 "\\<And>X. wf_prog wf_mb G \\<Longrightarrow> field (G,Object) = empty" (K [Asm_simp_tac 1]);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   141
Addsimps [field_Object];
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   142
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   143
Goal "\\<lbrakk>is_class G C; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> G\\<turnstile>C\\<prec>C Object";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   144
by(etac subcls1_induct 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   145
by(  atac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   146
by( Fast_tac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   147
by(auto_tac (HOL_cs addSDs [wf_cdecl_supD], simpset()));
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   148
by(eatac rtrancl_into_rtrancl2 1 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   149
qed "subcls_C_Object";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   150
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   151
val is_type_rTI = prove_goalw thy [wf_mhead_def]
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   152
	"\\<And>sig. wf_mhead G sig rT \\<Longrightarrow> is_type G rT"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   153
	(K [split_all_tac 1, Auto_tac]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   154
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   155
Goal "\\<lbrakk>wf_prog wf_mb G; is_class G C\\<rbrakk> \\<Longrightarrow> G\\<turnstile>Class C\\<preceq>Class Object";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   156
by(rtac widen.subcls 1);	
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   157
by(eatac subcls_C_Object 1 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   158
qed "widen_Class_Object";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   159
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   160
Goal "\\<lbrakk>(C',C)\\<in>(subcls1 G)^+; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> \
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   161
\ x \\<in> set (fields (G,C)) \\<longrightarrow> x \\<in> set (fields (G,C'))";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   162
by(etac trancl_trans_induct 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   163
by( safe_tac (HOL_cs addSDs [subcls1D]));
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   164
by(stac fields_rec 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   165
by(  Auto_tac);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   166
qed_spec_mp "fields_mono";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   167
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   168
Goal "\\<lbrakk>is_class G C; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   169
\ \\<forall>((fn,fd),fT)\\<in>set (fields (G,C)). G\\<turnstile>Class C\\<preceq>Class fd";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   170
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   171
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   172
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   173
by( safe_tac HOL_cs);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   174
by( stac fields_rec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   175
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   176
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   177
by( Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   178
by( rtac ballI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   179
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   180
by( Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   181
by( etac UnE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   182
by(  dtac split_Pair_eq 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   183
by(  SELECT_GOAL (Auto_tac) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   184
by( rtac widen_trans 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   185
by(  etac (r_into_rtrancl RS widen.subcls) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   186
by( etac BallE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   187
by(  contr_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   188
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   189
qed "widen_fields_defpl'";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   190
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   191
Goal "\\<lbrakk>is_class G C; wf_prog wf_mb G; ((fn,fd),fT) \\<in> set (fields (G,C))\\<rbrakk> \\<Longrightarrow> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   192
\ G\\<turnstile>Class C\\<preceq>Class fd";
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   193
by( datac widen_fields_defpl' 1 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   194
(*###################*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   195
by( dtac bspec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   196
auto();
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   197
qed "widen_fields_defpl";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   198
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   199
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   200
Goal "\\<lbrakk>is_class G C; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> unique (fields (G,C))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   201
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   202
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   203
by(  safe_tac (HOL_cs addSDs [wf_cdecl_supD]));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   204
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   205
by( dtac subcls1_wfD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   206
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   207
by( stac fields_rec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   208
by   Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   209
by( rotate_tac ~1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   210
by( ex_ftac is_classD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   211
by( forward_tac [class_wf] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   212
by  Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   213
by( asm_full_simp_tac (simpset() addsimps [wf_cdecl_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   214
by( etac unique_append 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   215
by(  rtac unique_map_Pair 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   216
by(  Step_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   217
by (EVERY1[dtac widen_fields_defpl, atac, atac]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   218
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   219
by( dtac split_Pair_eq 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   220
by( fast_tac (HOL_cs addSDs [widen_Class_Class]) 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   221
qed "unique_fields";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   222
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   223
(*####TO Trancl.ML*)
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   224
Goal "(a,b):r^* ==> a=b | a~=b & (a,b):r^+";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   225
by(force_tac (claset(), simpset() addsimps [reflcl_trancl RS sym] 
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   226
				  delsimps [reflcl_trancl]) 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   227
qed "rtranclD";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   228
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   229
Goal
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   230
"\\<lbrakk>wf_prog wf_mb G; G\\<turnstile>Class C'\\<preceq>Class C; map_of(fields (G,C )) f = Some ft\\<rbrakk> \\<Longrightarrow> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   231
\                          map_of (fields (G,C')) f = Some ft";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   232
by( dtac widen_Class_Class 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   233
by( dtac rtranclD 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   234
by( Auto_tac);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   235
by( rtac table_mono 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   236
by(   atac 3);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   237
by(  rtac unique_fields 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   238
by(   etac subcls_is_class 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   239
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   240
by( fast_tac (HOL_cs addEs [fields_mono]) 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   241
qed "widen_fields_mono";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   242
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   243
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   244
val cfs_fields_lemma = prove_goalw thy [field_def] 
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   245
"\\<And>X. field (G,C) fn = Some (fd, fT) \\<Longrightarrow> map_of(fields (G,C)) (fn, fd) = Some fT"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   246
(K [rtac table_map_Some 1, Asm_full_simp_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   247
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   248
val widen_cfs_fields = prove_goal thy "\\<And>X. \\<lbrakk>field (G,C) fn = Some (fd, fT);\
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   249
\  G\\<turnstile>Class C'\\<preceq>Class C; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> map_of (fields (G,C')) (fn, fd) = Some fT" (K[
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   250
fast_tac (HOL_cs addIs [widen_fields_mono, cfs_fields_lemma]) 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   251
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   252
Goal "wf_prog wf_mb G \\<Longrightarrow> method (G,C) sig = Some (md,mh,m)\
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   253
\  \\<longrightarrow> G\\<turnstile>Class C\\<preceq>Class md \\<and> wf_mdecl wf_mb G md (sig,(mh,m))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   254
by( case_tac "is_class G C" 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   255
by(  forw_inst_tac [("C","C")] method_rec 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   256
by(    asm_full_simp_tac (simpset() addsimps [is_class_def] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   257
	delsimps [not_None_eq]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   258
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   259
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   260
by(  Force_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   261
by( forw_inst_tac [("C","C")] method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   262
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   263
by( rotate_tac ~1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   264
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   265
by( dtac override_SomeD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   266
by( etac disjE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   267
by(  thin_tac "?P \\<longrightarrow> ?Q" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   268
by(  Clarify_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   269
by(  rtac widen_trans 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   270
by(   atac 3);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   271
by(  rtac widen.subcls 2);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   272
by(  rtac r_into_rtrancl 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   273
by(  fast_tac (HOL_cs addIs [subcls1I]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   274
by( forward_tac [table_mapf_SomeD] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   275
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   276
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   277
by( rewtac wf_cdecl_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   278
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   279
qed_spec_mp "method_wf_mdecl";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   280
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   281
Goal "\\<lbrakk>G\\<turnstile>T\\<prec>C T'; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   282
\  \\<forall>D rT b. method (G,T') sig = Some (D,rT ,b) \\<longrightarrow>\
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   283
\ (\\<exists>D' rT' b'. method (G,T) sig = Some (D',rT',b') \\<and> G\\<turnstile>rT'\\<preceq>rT)";
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   284
by( dtac rtranclD 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   285
by( etac disjE 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   286
by(  Fast_tac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   287
by( etac conjE 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   288
by( etac trancl_trans_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   289
by(  strip_tac1 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   290
by(  EVERY[dtac spec 2, dtac spec 2, dtac spec 2, mp_tac 2]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   291
by(  fast_tac (HOL_cs addEs [widen_trans]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   292
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   293
by( dtac subcls1D 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   294
by( strip_tac1 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   295
by( stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   296
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   297
by( rewtac override_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   298
by( asm_simp_tac (simpset() delsimps [split_paired_Ex]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   299
by( case_tac "\\<exists>z. map_of(map (\\<lambda>(s,m). (s, ?C, m)) ms) sig = Some z" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   300
by(  etac exE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   301
by(  asm_full_simp_tac (HOL_ss addsimps [not_None_eq RS sym]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   302
by(  ALLGOALS (rotate_tac ~1 THEN' forward_tac[ssubst] THEN' (fn n=>atac(n+1))));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   303
by(  ALLGOALS (asm_simp_tac (simpset() delsimps [split_paired_Ex])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   304
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   305
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   306
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   307
by( rewtac wf_cdecl_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   308
by( dtac table_mapf_Some2 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   309
by( Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   310
by( dres_inst_tac [("xys1","ms")] get_in_set 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   311
by Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   312
qed_spec_mp "subcls_widen_methd";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   313
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   314
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   315
Goal
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   316
 "\\<lbrakk> G\\<turnstile>Class C\\<preceq>Class D; wf_prog wf_mb G; \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   317
\    method (G,D) sig = Some (md, rT, b) \\<rbrakk> \
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   318
\ \\<Longrightarrow> \\<exists>mD' rT' b'. method (G,C) sig= Some(mD',rT',b') \\<and> G\\<turnstile>rT'\\<preceq>rT";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   319
by(auto_tac (claset() addSDs [widen_Class_Class]
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   320
                      addDs [subcls_widen_methd,method_wf_mdecl],
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   321
             simpset() addsimps [wf_mdecl_def,wf_mhead_def,split_def]));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   322
qed "subtype_widen_methd";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   323
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   324
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   325
Goal "wf_prog wf_mb G \\<Longrightarrow> \\<forall>D. method (G,C) sig = Some(D,mh,code) \\<longrightarrow> is_class G D \\<and> method (G,D) sig = Some(D,mh,code)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   326
by( case_tac "is_class G C" 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   327
by(  forw_inst_tac [("C","C")] method_rec 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   328
by(    asm_full_simp_tac (simpset() addsimps [is_class_def] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   329
	delsimps [not_None_eq]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   330
by (etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   331
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   332
 by (Asm_full_simp_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   333
by (stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   334
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   335
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   336
by (eres_inst_tac [("x","Da")] allE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   337
by (Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   338
 by (asm_full_simp_tac (simpset() addsimps [map_of_map]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   339
 by (Clarify_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   340
 by (stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   341
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   342
 by (asm_full_simp_tac (simpset() addsimps [override_def,map_of_map] addsplits [option.split]) 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   343
qed_spec_mp "method_in_md";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   344
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   345
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   346
Goal "\\<lbrakk>is_class G C; wf_prog wf_mb G\\<rbrakk> \\<Longrightarrow> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   347
\ \\<forall>f\\<in>set (fields (G,C)). is_type G (snd f)";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   348
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   349
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   350
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   351
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   352
by( stac fields_rec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   353
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   354
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   355
by( Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   356
by( safe_tac set_cs);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   357
by(  Fast_tac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   358
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   359
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   360
by( rewtac wf_cdecl_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   361
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   362
by( strip_tac1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   363
by( EVERY[dtac bspec 1, atac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   364
by( rewtac wf_fdecl_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   365
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   366
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   367
bind_thm ("is_type_fields", result() RS bspec);