src/HOL/MiniML/W.ML
changeset 2513 d708d8cdc8e8
parent 2083 b56425a385b9
child 2525 477c05586286
equal deleted inserted replaced
2512:0231e4f467f2 2513:d708d8cdc8e8
   174 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   174 by (eres_inst_tac [("x","TVar n # a")] allE 1);
   175 by (eres_inst_tac [("x","s")] allE 1);
   175 by (eres_inst_tac [("x","s")] allE 1);
   176 by (eres_inst_tac [("x","t")] allE 1);
   176 by (eres_inst_tac [("x","t")] allE 1);
   177 by (eres_inst_tac [("x","na")] allE 1);
   177 by (eres_inst_tac [("x","na")] allE 1);
   178 by (eres_inst_tac [("x","v")] allE 1);
   178 by (eres_inst_tac [("x","v")] allE 1);
   179 by (fast_tac (HOL_cs addIs [cod_app_subst]
   179 by (fast_tac (HOL_cs addSEs [allE]
       
   180 	             addIs [cod_app_subst]
   180                      addss (!simpset addsimps [less_Suc_eq])) 1);
   181                      addss (!simpset addsimps [less_Suc_eq])) 1);
   181 
   182 (** LEVEL 12 **)
   182 (* case App e1 e2 *)
   183 (* case App e1 e2 *)
   183 by (simp_tac (!simpset setloop (split_tac [expand_bind])) 1);
   184 by (simp_tac (!simpset setloop (split_tac [expand_bind])) 1);
   184 by (strip_tac 1); 
   185 by (strip_tac 1); 
   185 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   186 by (rename_tac "s t na sa ta nb sb sc tb m v" 1);
   186 by (eres_inst_tac [("x","n")] allE 1);
   187 by (eres_inst_tac [("x","n")] allE 1);
   188 by (eres_inst_tac [("x","s")] allE 1);
   189 by (eres_inst_tac [("x","s")] allE 1);
   189 by (eres_inst_tac [("x","t")] allE 1);
   190 by (eres_inst_tac [("x","t")] allE 1);
   190 by (eres_inst_tac [("x","na")] allE 1);
   191 by (eres_inst_tac [("x","na")] allE 1);
   191 by (eres_inst_tac [("x","na")] allE 1);
   192 by (eres_inst_tac [("x","na")] allE 1);
   192 by (eres_inst_tac [("x","v")] allE 1);
   193 by (eres_inst_tac [("x","v")] allE 1);
       
   194 (** LEVEL 22 **)
   193 (* second case *)
   195 (* second case *)
   194 by (eres_inst_tac [("x","$ s a")] allE 1);
   196 by (eres_inst_tac [("x","$ s a")] allE 1);
   195 by (eres_inst_tac [("x","sa")] allE 1);
   197 by (eres_inst_tac [("x","sa")] allE 1);
   196 by (eres_inst_tac [("x","ta")] allE 1);
   198 by (eres_inst_tac [("x","ta")] allE 1);
   197 by (eres_inst_tac [("x","nb")] allE 1);
   199 by (eres_inst_tac [("x","nb")] allE 1);
   199 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); 
   201 by (safe_tac (empty_cs addSIs [conjI,impI] addSEs [conjE]) ); 
   200 by (asm_full_simp_tac (!simpset addsimps [rotate_Ok,o_def]) 1);
   202 by (asm_full_simp_tac (!simpset addsimps [rotate_Ok,o_def]) 1);
   201 by (dtac W_var_geD 1);
   203 by (dtac W_var_geD 1);
   202 by (dtac W_var_geD 1);
   204 by (dtac W_var_geD 1);
   203 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   205 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
       
   206 (** LEVEL 32 **)
   204 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, 
   207 by (fast_tac (HOL_cs addDs [free_tv_comp_subst RS subsetD,sym RS mgu_free, 
   205     codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   208     codD,free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   206     less_le_trans,less_not_refl2,subsetD]
   209     less_le_trans,less_not_refl2,subsetD]
   207   addEs [UnE] 
   210   addEs [UnE] 
   208   addss !simpset) 1);
   211   addss !simpset) 1);
   209 by (Asm_full_simp_tac 1); 
   212 by (Asm_full_simp_tac 1); 
   210 by (dtac (sym RS W_var_geD) 1);
   213 by (dtac (sym RS W_var_geD) 1);
   211 by (dtac (sym RS W_var_geD) 1);
   214 by (dtac (sym RS W_var_geD) 1);
   212 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   215 by ( (forward_tac [less_le_trans] 1) THEN (assume_tac 1) );
   213 by (fast_tac (HOL_cs addDs [mgu_free, codD,free_tv_subst_var RS subsetD,
   216 by (fast_tac (HOL_cs addDs [mgu_free, codD,free_tv_subst_var RS subsetD,
   214     free_tv_app_subst_te RS subsetD,free_tv_app_subst_tel RS subsetD,
   217 			    free_tv_app_subst_te RS subsetD,
   215     less_le_trans,subsetD]
   218 			    free_tv_app_subst_tel RS subsetD,
   216   addEs [UnE]
   219 			    less_le_trans,subsetD]
   217   addss !simpset) 1); 
   220 	             addSEs [UnE]
       
   221 		     addss !simpset) 1); 
   218 qed_spec_mp "free_tv_W"; 
   222 qed_spec_mp "free_tv_W"; 
   219 
   223 
   220 
   224 
   221 (* Completeness of W w.r.t. has_type *)
   225 (* Completeness of W w.r.t. has_type *)
   222 goal thy
   226 goal thy