42 |
42 |
43 (* the resulting type variable is always greater or equal than the given one *) |
43 (* the resulting type variable is always greater or equal than the given one *) |
44 Goal "!a n s t m. W e a n = Ok (s,t,m) --> n<=m"; |
44 Goal "!a n s t m. W e a n = Ok (s,t,m) --> n<=m"; |
45 by (induct_tac "e" 1); |
45 by (induct_tac "e" 1); |
46 (* case Var(n) *) |
46 (* case Var(n) *) |
47 by (fast_tac (HOL_cs addss simpset()) 1); |
47 by (Clarsimp_tac 1); |
48 (* case Abs e *) |
48 (* case Abs e *) |
49 by (simp_tac (simpset() addsplits [split_bind]) 1); |
49 by (simp_tac (simpset() addsplits [split_bind]) 1); |
50 by (fast_tac (HOL_cs addDs [Suc_leD]) 1); |
50 by (fast_tac (HOL_cs addDs [Suc_leD]) 1); |
51 (* case App e1 e2 *) |
51 (* case App e1 e2 *) |
52 by (simp_tac (simpset() addsplits [split_bind]) 1); |
52 by (simp_tac (simpset() addsplits [split_bind]) 1); |
85 (* resulting type variable is new *) |
85 (* resulting type variable is new *) |
86 Goal "!n a s t m. new_tv n a --> W e a n = Ok (s,t,m) --> \ |
86 Goal "!n a s t m. new_tv n a --> W e a n = Ok (s,t,m) --> \ |
87 \ new_tv m s & new_tv m t"; |
87 \ new_tv m s & new_tv m t"; |
88 by (induct_tac "e" 1); |
88 by (induct_tac "e" 1); |
89 (* case Var n *) |
89 (* case Var n *) |
90 by (fast_tac (HOL_cs addDs [list_all_nth] addss (simpset() |
90 by (Clarsimp_tac 1); |
91 addsimps [id_subst_def,new_tv_list,new_tv_subst])) 1); |
91 by (force_tac (claset() addEs [list_ball_nth], |
92 (* case Abs e *) |
92 simpset() addsimps [id_subst_def,new_tv_list,new_tv_subst])1); |
93 by (simp_tac (simpset() addsimps [new_tv_subst,new_tv_Suc_list] |
93 (* case Abs e *) |
|
94 by (simp_tac (simpset() addsimps [new_tv_subst,new_tv_Suc_list] |
94 addsplits [split_bind]) 1); |
95 addsplits [split_bind]) 1); |
95 by (strip_tac 1); |
96 by (strip_tac 1); |
96 by (eres_inst_tac [("x","Suc n")] allE 1); |
97 by (eres_inst_tac [("x","Suc n")] allE 1); |
97 by (eres_inst_tac [("x","(TVar n)#a")] allE 1); |
98 by (eres_inst_tac [("x","(TVar n)#a")] allE 1); |
98 by (fast_tac (HOL_cs addss (simpset() |
99 by (fast_tac (HOL_cs addss (simpset() |
99 addsimps [new_tv_subst,new_tv_Suc_list])) 1); |
100 addsimps [new_tv_subst,new_tv_Suc_list])) 1); |
100 |
101 |
101 (* case App e1 e2 *) |
102 (* case App e1 e2 *) |
102 by (simp_tac (simpset() addsplits [split_bind]) 1); |
103 by (simp_tac (simpset() addsplits [split_bind]) 1); |
103 by (strip_tac 1); |
104 by (strip_tac 1); |
151 |
152 |
152 Goal "!n a s t m v. W e a n = Ok (s,t,m) --> \ |
153 Goal "!n a s t m v. W e a n = Ok (s,t,m) --> \ |
153 \ (v:free_tv s | v:free_tv t) --> v<n --> v:free_tv a"; |
154 \ (v:free_tv s | v:free_tv t) --> v<n --> v:free_tv a"; |
154 by (induct_tac "e" 1); |
155 by (induct_tac "e" 1); |
155 (* case Var n *) |
156 (* case Var n *) |
156 by (fast_tac (HOL_cs addIs [nth_mem,subsetD,ftv_mem_sub_ftv_list] |
157 by (Clarsimp_tac 1); |
157 addss simpset()) 1); |
158 by (fast_tac (HOL_cs addIs [nth_mem,subsetD,ftv_mem_sub_ftv_list])1); |
158 |
159 |
159 (* case Abs e *) |
160 (* case Abs e *) |
160 by (asm_full_simp_tac (simpset() addsimps |
161 by (asm_full_simp_tac (simpset() addsimps |
161 [free_tv_subst] addsplits [split_bind]) 1); |
162 [free_tv_subst] addsplits [split_bind]) 1); |
162 by (strip_tac 1); |
163 by (strip_tac 1); |
165 by (eres_inst_tac [("x","TVar n # a")] allE 1); |
166 by (eres_inst_tac [("x","TVar n # a")] allE 1); |
166 by (eres_inst_tac [("x","s")] allE 1); |
167 by (eres_inst_tac [("x","s")] allE 1); |
167 by (eres_inst_tac [("x","t")] allE 1); |
168 by (eres_inst_tac [("x","t")] allE 1); |
168 by (eres_inst_tac [("x","na")] allE 1); |
169 by (eres_inst_tac [("x","na")] allE 1); |
169 by (eres_inst_tac [("x","v")] allE 1); |
170 by (eres_inst_tac [("x","v")] allE 1); |
170 by (fast_tac (HOL_cs addSEs [allE] |
171 by (force_tac (claset() addSEs [allE] addIs [cod_app_subst], |
171 addIs [cod_app_subst] |
172 simpset() addsimps [less_Suc_eq]) 1); |
172 addss (simpset() addsimps [less_Suc_eq])) 1); |
173 (** LEVEL 13 **) |
173 (** LEVEL 12 **) |
|
174 (* case App e1 e2 *) |
174 (* case App e1 e2 *) |
175 by (simp_tac (simpset() addsplits [split_bind]) 1); |
175 by (simp_tac (simpset() addsplits [split_bind]) 1); |
176 by (strip_tac 1); |
176 by (strip_tac 1); |
177 by (rename_tac "s t na sa ta nb sb sc tb m v" 1); |
177 by (rename_tac "s t na sa ta nb sb sc tb m v" 1); |
178 by (eres_inst_tac [("x","n")] allE 1); |
178 by (eres_inst_tac [("x","n")] allE 1); |
180 by (eres_inst_tac [("x","s")] allE 1); |
180 by (eres_inst_tac [("x","s")] allE 1); |
181 by (eres_inst_tac [("x","t")] allE 1); |
181 by (eres_inst_tac [("x","t")] allE 1); |
182 by (eres_inst_tac [("x","na")] allE 1); |
182 by (eres_inst_tac [("x","na")] allE 1); |
183 by (eres_inst_tac [("x","na")] allE 1); |
183 by (eres_inst_tac [("x","na")] allE 1); |
184 by (eres_inst_tac [("x","v")] allE 1); |
184 by (eres_inst_tac [("x","v")] allE 1); |
185 (** LEVEL 22 **) |
185 (** LEVEL 23 **) |
186 (* second case *) |
186 (* second case *) |
187 by (eres_inst_tac [("x","$ s a")] allE 1); |
187 by (eres_inst_tac [("x","$ s a")] allE 1); |
188 by (eres_inst_tac [("x","sa")] allE 1); |
188 by (eres_inst_tac [("x","sa")] allE 1); |
189 by (eres_inst_tac [("x","ta")] allE 1); |
189 by (eres_inst_tac [("x","ta")] allE 1); |
190 by (eres_inst_tac [("x","nb")] allE 1); |
190 by (eres_inst_tac [("x","nb")] allE 1); |
192 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); |
192 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); |
193 by (asm_full_simp_tac (simpset() addsimps [rotate_Ok,o_def]) 1); |
193 by (asm_full_simp_tac (simpset() addsimps [rotate_Ok,o_def]) 1); |
194 by (dtac W_var_geD 1); |
194 by (dtac W_var_geD 1); |
195 by (dtac W_var_geD 1); |
195 by (dtac W_var_geD 1); |
196 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) ); |
196 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) ); |
197 (** LEVEL 32 **) |
197 (** LEVEL 33 **) |
198 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, |
198 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, |
199 codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD, |
199 codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD, |
200 less_le_trans,less_not_refl2,subsetD] |
200 less_le_trans,less_not_refl2,subsetD] |
201 addEs [UnE] |
201 addEs [UnE] |
202 addss simpset()) 1); |
202 addss simpset()) 1); |