src/HOL/MicroJava/J/WellForm.ML
author oheimb
Thu, 18 Jan 2001 17:38:56 +0100
changeset 10925 5ffe7ed8899a
parent 10613 78b1d6c3ee9c
child 10996 74e970389def
permissions -rw-r--r--
is_class and class now as defs (rather than translations); corrected Digest.thy
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
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
     7
Goalw [wf_prog_def, class_def]
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
     8
 "[|class G C = Some c; wf_prog wf_mb G|] ==> wf_cdecl wf_mb G (C,c)";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
     9
by (Asm_full_simp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    10
by (fast_tac (set_cs addDs [map_of_SomeD]) 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    11
qed "class_wf";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    13
Goalw [wf_prog_def, ObjectC_def, class_def]
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    14
	"wf_prog wf_mb G ==> class G Object = Some (arbitrary, [], [])";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    15
by (auto_tac (claset() addIs [map_of_SomeI], simpset()));
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    16
qed "class_Object";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
Addsimps [class_Object];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    19
Goalw [is_class_def] "wf_prog wf_mb G ==> is_class G Object";
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    20
by (Asm_simp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    21
qed "is_class_Object";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
Addsimps [is_class_Object];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
    24
Goal "[|G\\<turnstile>C\\<prec>C1D; wf_prog wf_mb G|] ==> D \\<noteq> C \\<and> \\<not>(D,C)\\<in>(subcls1 G)^+";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
by( forward_tac [r_into_trancl] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
by( dtac subcls1D 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    27
by(Clarify_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    28
by( datac class_wf 1 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
by( rewtac wf_cdecl_def);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    30
by(force_tac (claset(), simpset() addsimps [reflcl_trancl RS sym] 
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    31
				  delsimps [reflcl_trancl]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
qed "subcls1_wfD";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    34
Goalw [wf_cdecl_def] 
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    35
"!!r. \\<lbrakk>wf_cdecl wf_mb G (C,D,r); C \\<noteq> Object\\<rbrakk> \\<Longrightarrow> is_class G D";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    36
by (auto_tac (claset(), simpset() addsplits [option.split_asm]));
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    37
qed "wf_cdecl_supD";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
    39
Goal "[|wf_prog wf_mb G; (C,D)\\<in>(subcls1 G)^+|] ==> \\<not>(D,C)\\<in>(subcls1 G)^+";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
by(etac tranclE 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    41
by(TRYALL(fast_tac (claset() addSDs [subcls1_wfD] addIs [trancl_trans])));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
qed "subcls_asym";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    44
Goal "[|wf_prog wf_mb G; (C,D)\\<in>(subcls1 G)^+|] ==> C \\<noteq> D";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    45
by (etac trancl_trans_induct 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    46
by  (auto_tac (claset() addDs [subcls1_wfD,subcls_asym],simpset()));
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    47
qed "subcls_irrefl";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    49
Goalw [acyclic_def] "wf_prog wf_mb G ==> acyclic (subcls1 G)";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    50
by (fast_tac (claset() addDs [subcls_irrefl]) 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    51
qed "acyclic_subcls1";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    53
Goal "wf_prog wf_mb G ==> wf ((subcls1 G)^-1)";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    54
by (rtac finite_acyclic_wf 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    55
by ( stac finite_converse 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    56
by ( rtac finite_subcls1 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    57
by (stac acyclic_converse 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    58
by (etac acyclic_subcls1 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    59
qed "wf_subcls1";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
val major::prems = goal thy
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
    62
  "[|wf_prog wf_mb G; !!C. \\<forall>D. (C,D)\\<in>(subcls1 G)^+ --> P D ==> P C|] ==> P C";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
by(cut_facts_tac [major RS wf_subcls1] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    64
by(dtac wf_trancl 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
by(asm_full_simp_tac (HOL_ss addsimps [trancl_converse]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
by(eres_inst_tac [("a","C")] wf_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
by(resolve_tac prems 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
by(Auto_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
qed "subcls_induct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    70
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    71
val prems = goalw thy [is_class_def] "[|is_class G C; wf_prog wf_mb G; P Object; \
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    72
\!!C D fs ms. [|C \\<noteq> Object; is_class G C; class G C = Some (D,fs,ms) \\<and> \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    73
\   wf_cdecl wf_mb G (C,D,fs,ms) \\<and> G\\<turnstile>C\\<prec>C1D \\<and> is_class G D \\<and> P D|] ==> P C\
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
    74
\ |] ==> P C";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    75
by( cut_facts_tac prems 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
by( rtac impE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    77
by(   atac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
by(  atac 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
by( etac thin_rl 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
by( rtac subcls_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    81
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
by( rtac impI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    83
by( case_tac "C = Object" 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    84
by(  Fast_tac 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    85
by Safe_tac;
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    86
by( ftac class_wf 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
by(  atac 1);
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    88
by( ftac wf_cdecl_supD 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
by(  atac 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    90
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    91
by( subgoal_tac "G\\<turnstile>C\\<prec>C1a" 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    92
by( etac subcls1I 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
by( rtac (hd (tl (tl (tl prems)))) 1);
10925
5ffe7ed8899a is_class and class now as defs (rather than translations); corrected Digest.thy
oheimb
parents: 10613
diff changeset
    94
by (rewtac is_class_def);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    95
by Auto_tac;
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    96
qed "subcls1_induct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    97
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    98
Goal "[|wf ((subcls1 G)^-1); \\<forall>D fs ms. class G C = Some (D,fs,ms) \\<longrightarrow> C \\<noteq> Object --> is_class G D|] ==> method (G,C) = \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
    99
\ (case class G C of None => arbitrary | Some (D,fs,ms) => \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   100
\ (if C = Object then empty else method (G,D)) ++ \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   101
\ map_of (map (\\<lambda>(s,m). (s,(C,m))) ms))";
8624
69619f870939 recdef.rules -> recdef.simps
nipkow
parents: 8600
diff changeset
   102
by( stac (method_TC RS (wf_subcls1_rel RS (hd method.simps))) 1);
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   103
by( asm_simp_tac (simpset() addsplits[option.split]) 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   104
by Auto_tac;
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   105
qed "method_rec_lemma";
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   106
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   107
Goal "wf_prog wf_mb G ==> method (G,C) = \
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   108
\ (case class G C of None => arbitrary | Some (D,fs,ms) => \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   109
\ (if C = Object then empty else method (G,D)) ++ \
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   110
\ map_of (map (\\<lambda>(s,m). (s,(C,m))) ms))";
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   111
by(rtac method_rec_lemma 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
by( clarsimp_tac (claset(), simpset() addsimps [wf_subcls1,empty_def] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   113
		addsplits [option.split]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   114
by( case_tac "C = Object" 1);
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   115
by(  Force_tac 1);
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   116
by Safe_tac;
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   117
by( datac class_wf 1 1);
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   118
by( datac wf_cdecl_supD 1 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   119
by( Asm_full_simp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   120
qed "method_rec";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   121
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   122
Goal "[|wf ((subcls1 G)^-1); class G C = Some (D,fs,ms); C \\<noteq> Object \\<longrightarrow> is_class G D|] ==> fields (G,C) = \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   123
\ map (\\<lambda>(fn,ft). ((fn,C),ft)) fs @ (if C = Object then [] else fields (G,D))";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   124
by(rtac trans 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   125
by(rtac (fields_TC RS (wf_subcls1_rel RS (hd fields.simps))) 1);
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   126
by( asm_simp_tac (simpset() addsplits[option.split]) 1);
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   127
qed "fields_rec_lemma";
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   128
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   129
Goal "[|class G C = Some (D,fs,ms); wf_prog wf_mb G|] ==> fields (G,C) = \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   130
\ map (\\<lambda>(fn,ft). ((fn,C),ft)) fs @ (if C = Object then [] else fields (G,D))";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   131
by(rtac trans 1);
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   132
by(rtac fields_rec_lemma 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   133
by(   asm_simp_tac (simpset() addsimps [wf_subcls1]) 1);
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   134
ba  1;
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   135
br refl 2;
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8624
diff changeset
   136
by( datac class_wf 1 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   137
by(rtac impI 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   138
by( eatac wf_cdecl_supD 1 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   139
qed "fields_rec";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   141
Goal "wf_prog wf_mb G ==> method (G,Object) = empty";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   142
by(stac method_rec 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   143
by Auto_tac;
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   144
qed "method_Object";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   145
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   146
Goal "wf_prog wf_mb G ==> fields (G,Object) = []";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   147
by(stac fields_rec 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   148
by Auto_tac;
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   149
qed "fields_Object";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   150
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   151
Addsimps [method_Object, fields_Object];
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   152
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   153
Goalw [field_def] "wf_prog wf_mb G ==> field (G,Object) = empty";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   154
by(Asm_simp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   155
qed "field_Object";
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   156
Addsimps [field_Object];
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   157
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   158
Goal "[|is_class G C; wf_prog wf_mb G|] ==> G\\<turnstile>C\\<preceq>C Object";
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   159
by(etac subcls1_induct 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   160
by(  atac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   161
by( Fast_tac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   162
by(auto_tac (HOL_cs addSDs [wf_cdecl_supD], simpset()));
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   163
by(eatac rtrancl_into_rtrancl2 1 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   164
qed "subcls_C_Object";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   165
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   166
Goalw [wf_mhead_def] "wf_mhead G sig rT ==> is_type G rT";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   167
by Auto_tac;
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   168
qed "is_type_rTI";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   169
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   170
Goal "[|is_class G C; wf_prog wf_mb G|] ==> \
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   171
\ \\<forall>((fn,fd),fT)\\<in>set (fields (G,C)). G\\<turnstile>C\\<preceq>C fd";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   172
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   173
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   174
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   175
by( safe_tac HOL_cs);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   176
by( stac fields_rec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   177
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   178
by(  atac 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   179
by( simp_tac (simpset() delsplits [split_if]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   180
by( rtac ballI 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   181
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   182
by( Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   183
by( etac UnE 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   184
by(  Force_tac 1);
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   185
by( etac (r_into_rtrancl RS rtrancl_trans) 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   186
by Auto_tac;
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   187
qed "widen_fields_defpl'";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   188
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   189
Goal "[|((fn,fd),fT) \\<in> set (fields (G,C)); wf_prog wf_mb G; is_class G C|] ==> \
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   190
\ G\\<turnstile>C\\<preceq>C fd";
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   191
by( datac widen_fields_defpl' 1 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   192
by (Fast_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   193
qed "widen_fields_defpl";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   194
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   195
Goal "[|is_class G C; wf_prog wf_mb G|] ==> unique (fields (G,C))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   196
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   197
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   198
by(  safe_tac (HOL_cs addSDs [wf_cdecl_supD]));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   199
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   200
by( dtac subcls1_wfD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   201
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   202
by( stac fields_rec 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   203
by   Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   204
by( rotate_tac ~1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   205
by( forward_tac [class_wf] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   206
by  Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   207
by( asm_full_simp_tac (simpset() addsimps [wf_cdecl_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   208
by( etac unique_append 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   209
by(  rtac unique_map_inj 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   210
by(   Clarsimp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   211
by  (rtac injI 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   212
by(  Asm_full_simp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   213
by(auto_tac (claset() addSDs [widen_fields_defpl], simpset()));
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   214
qed "unique_fields";
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   215
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   216
Goal "[|wf_prog wf_mb G; (C',C)\\<in>(subcls1 G)^*|] ==> \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   217
\ x \\<in> set (fields (G,C)) --> x \\<in> set (fields (G,C'))";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   218
by(etac converse_rtrancl_induct 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   219
by( safe_tac (HOL_cs addSDs [subcls1D]));
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   220
by(stac fields_rec 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   221
by(  Auto_tac);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   222
qed_spec_mp "fields_mono_lemma";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   223
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   224
Goal
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   225
"\\<lbrakk>map_of (fields (G,C)) fn = Some f; G\\<turnstile>D\\<preceq>C C; is_class G D; wf_prog wf_mb G\\<rbrakk>\
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   226
\ \\<Longrightarrow> map_of (fields (G,D)) fn = Some f";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   227
by (rtac map_of_SomeI 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   228
by  (eatac unique_fields 1 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   229
by (eatac fields_mono_lemma 1 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   230
by (etac map_of_SomeD 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   231
qed "fields_mono";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   232
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   233
Goal 
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   234
"[|field (G,C) fn = Some (fd, fT); G\\<turnstile>D\\<preceq>C C; wf_prog wf_mb G|]==> \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   235
\ map_of (fields (G,D)) (fn, fd) = Some fT";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   236
by (dtac field_fields 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   237
by (dtac rtranclD 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   238
by Safe_tac;
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   239
by (ftac subcls_is_class 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   240
by (dtac trancl_into_rtrancl 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   241
by (fast_tac (HOL_cs addDs [fields_mono]) 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   242
qed "widen_cfs_fields";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   243
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   244
Goal "wf_prog wf_mb G ==> is_class G C \\<Longrightarrow>  \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   245
\    method (G,C) sig = Some (md,mh,m)\
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   246
\  --> G\\<turnstile>C\\<preceq>C md \\<and> wf_mdecl wf_mb G md (sig,(mh,m))";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   247
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   248
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   249
by(  Force_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   250
by( forw_inst_tac [("C","C")] method_rec 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   251
by( Clarify_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   252
by( rotate_tac ~1 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   253
by( Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   254
by( dtac override_SomeD 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   255
by( etac disjE 1);
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   256
by(  thin_tac "?P --> ?Q" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   257
by(  Clarify_tac 2);
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   258
by(  rtac rtrancl_trans 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   259
by(   atac 3);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   260
by(  rtac r_into_rtrancl 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   261
by(  fast_tac (HOL_cs addIs [subcls1I]) 2);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   262
by (rotate_tac ~1 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   263
by (ftac map_of_SomeD 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   264
by( rewtac wf_cdecl_def);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   265
by (Clarsimp_tac 1);
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   266
qed_spec_mp "method_wf_mdecl";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   267
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   268
Goal "[|G\\<turnstile>T\\<preceq>C T'; wf_prog wf_mb G|] ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   269
\  \\<forall>D rT b. method (G,T') sig = Some (D,rT ,b) -->\
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   270
\ (\\<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
   271
by( dtac rtranclD 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   272
by( etac disjE 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   273
by(  Fast_tac 1);
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
   274
by( etac conjE 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   275
by( etac trancl_trans_induct 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   276
by(  Clarify_tac 2);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   277
by(  EVERY[smp_tac 3 2]);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   278
by(  fast_tac (HOL_cs addEs [widen_trans]) 2);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   279
by( Clarify_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   280
by( dtac subcls1D 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   281
by( Clarify_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   282
by( stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   283
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   284
by( rewtac override_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   285
by( asm_simp_tac (simpset() delsimps [split_paired_Ex]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   286
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
   287
by(  etac exE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   288
by(  asm_full_simp_tac (HOL_ss addsimps [not_None_eq RS sym]) 2);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   289
by(  ALLGOALS (rotate_tac ~1 THEN' forward_tac[ssubst] THEN' (fn n=>atac(n+1))));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   290
by(  ALLGOALS (asm_simp_tac (simpset() delsimps [split_paired_Ex])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   291
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   292
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   293
by( split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   294
by( rewtac wf_cdecl_def);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   295
by( dtac map_of_SomeD 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   296
by Auto_tac;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   297
qed_spec_mp "subcls_widen_methd";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   298
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   299
Goal
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   300
 "[| G\\<turnstile> C\\<preceq>C D; wf_prog wf_mb G; \
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   301
\    method (G,D) sig = Some (md, rT, b) |] \
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   302
\ ==> \\<exists>mD' rT' b'. method (G,C) sig= Some(mD',rT',b') \\<and> G\\<turnstile>rT'\\<preceq>rT";
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8106
diff changeset
   303
by(auto_tac (claset() addDs [subcls_widen_methd,method_wf_mdecl],
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   304
             simpset() addsimps [wf_mdecl_def,wf_mhead_def,split_def]));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   305
qed "subtype_widen_methd";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   306
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   307
Goal "wf_prog wf_mb G ==> is_class G C \\<Longrightarrow> \\<forall>D. method (G,C) sig = Some(D,mh,code) --> is_class G D \\<and> method (G,D) sig = Some(D,mh,code)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   308
by (etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   309
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   310
 by (Asm_full_simp_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   311
by (stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   312
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   313
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   314
by (eres_inst_tac [("x","Da")] allE 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   315
by (Clarsimp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   316
 by (asm_full_simp_tac (simpset() addsimps [map_of_map]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   317
 by (Clarify_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8011
diff changeset
   318
 by (stac method_rec 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   319
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   320
 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
   321
qed_spec_mp "method_in_md";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   322
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9758
diff changeset
   323
Goal "[|is_class G C; wf_prog wf_mb G|] ==> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   324
\ \\<forall>f\\<in>set (fields (G,C)). is_type G (snd f)";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   325
by( etac subcls1_induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   326
by(   atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   327
by(  Asm_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   328
by( stac fields_rec 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   329
by(   Fast_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   330
by(  atac 1);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   331
by( Clarsimp_tac 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   332
by( Safe_tac);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   333
by(  Force_tac 2);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   334
by( dtac class_wf 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   335
by(  atac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   336
by( rewtac wf_cdecl_def);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   337
by( Clarsimp_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   338
by( EVERY[dtac bspec 1, atac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   339
by( rewtac wf_fdecl_def);
10613
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   340
by Auto_tac;
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   341
qed_spec_mp "fields_is_type_lemma";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   342
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   343
Goal "[|map_of (fields (G,C)) fn = Some f; wf_prog wf_mb G; is_class G C|] ==> \
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   344
\ is_type G f";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   345
by(dtac map_of_SomeD 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   346
by(datac fields_is_type_lemma 2 1);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   347
by(Auto_tac);
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   348
qed "fields_is_type";
78b1d6c3ee9c improved superclass entry for classes and definition status of is_class, class
oheimb
parents: 10138
diff changeset
   349