src/HOLCF/Ssum1.ML
changeset 892 d0dc8d057929
parent 243 c22b85994e17
child 961 932784dfa671
equal deleted inserted replaced
891:a5ad535a241a 892:d0dc8d057929
   210 
   210 
   211 (* ------------------------------------------------------------------------ *)
   211 (* ------------------------------------------------------------------------ *)
   212 (* optimize lemmas about less_ssum                                          *)
   212 (* optimize lemmas about less_ssum                                          *)
   213 (* ------------------------------------------------------------------------ *)
   213 (* ------------------------------------------------------------------------ *)
   214 
   214 
   215 val less_ssum2a = prove_goal Ssum1.thy 
   215 qed_goal "less_ssum2a" Ssum1.thy 
   216 	"less_ssum(Isinl(x),Isinl(y)) = (x << y)"
   216 	"less_ssum(Isinl(x),Isinl(y)) = (x << y)"
   217  (fn prems =>
   217  (fn prems =>
   218 	[
   218 	[
   219 	(rtac less_ssum1a 1),
   219 	(rtac less_ssum1a 1),
   220 	(rtac refl 1),
   220 	(rtac refl 1),
   221 	(rtac refl 1)
   221 	(rtac refl 1)
   222 	]);
   222 	]);
   223 
   223 
   224 val less_ssum2b = prove_goal Ssum1.thy 
   224 qed_goal "less_ssum2b" Ssum1.thy 
   225 	"less_ssum(Isinr(x),Isinr(y)) = (x << y)"
   225 	"less_ssum(Isinr(x),Isinr(y)) = (x << y)"
   226  (fn prems =>
   226  (fn prems =>
   227 	[
   227 	[
   228 	(rtac less_ssum1b 1),
   228 	(rtac less_ssum1b 1),
   229 	(rtac refl 1),
   229 	(rtac refl 1),
   230 	(rtac refl 1)
   230 	(rtac refl 1)
   231 	]);
   231 	]);
   232 
   232 
   233 val less_ssum2c = prove_goal Ssum1.thy 
   233 qed_goal "less_ssum2c" Ssum1.thy 
   234 	"less_ssum(Isinl(x),Isinr(y)) = (x = UU)"
   234 	"less_ssum(Isinl(x),Isinr(y)) = (x = UU)"
   235  (fn prems =>
   235  (fn prems =>
   236 	[
   236 	[
   237 	(rtac less_ssum1c 1),
   237 	(rtac less_ssum1c 1),
   238 	(rtac refl 1),
   238 	(rtac refl 1),
   239 	(rtac refl 1)
   239 	(rtac refl 1)
   240 	]);
   240 	]);
   241 
   241 
   242 val less_ssum2d = prove_goal Ssum1.thy 
   242 qed_goal "less_ssum2d" Ssum1.thy 
   243 	"less_ssum(Isinr(x),Isinl(y)) = (x = UU)"
   243 	"less_ssum(Isinr(x),Isinl(y)) = (x = UU)"
   244  (fn prems =>
   244  (fn prems =>
   245 	[
   245 	[
   246 	(rtac less_ssum1d 1),
   246 	(rtac less_ssum1d 1),
   247 	(rtac refl 1),
   247 	(rtac refl 1),
   251 
   251 
   252 (* ------------------------------------------------------------------------ *)
   252 (* ------------------------------------------------------------------------ *)
   253 (* less_ssum is a partial order on ++                                     *)
   253 (* less_ssum is a partial order on ++                                     *)
   254 (* ------------------------------------------------------------------------ *)
   254 (* ------------------------------------------------------------------------ *)
   255 
   255 
   256 val refl_less_ssum = prove_goal Ssum1.thy "less_ssum(p,p)"
   256 qed_goal "refl_less_ssum" Ssum1.thy "less_ssum(p,p)"
   257  (fn prems =>
   257  (fn prems =>
   258 	[
   258 	[
   259 	(res_inst_tac [("p","p")] IssumE2 1),
   259 	(res_inst_tac [("p","p")] IssumE2 1),
   260 	(hyp_subst_tac 1),
   260 	(hyp_subst_tac 1),
   261 	(rtac (less_ssum2a RS iffD2) 1),
   261 	(rtac (less_ssum2a RS iffD2) 1),
   263 	(hyp_subst_tac 1),
   263 	(hyp_subst_tac 1),
   264 	(rtac (less_ssum2b RS iffD2) 1),
   264 	(rtac (less_ssum2b RS iffD2) 1),
   265 	(rtac refl_less 1)
   265 	(rtac refl_less 1)
   266 	]);
   266 	]);
   267 
   267 
   268 val antisym_less_ssum = prove_goal Ssum1.thy 
   268 qed_goal "antisym_less_ssum" Ssum1.thy 
   269  "[|less_ssum(p1,p2);less_ssum(p2,p1)|] ==> p1=p2"
   269  "[|less_ssum(p1,p2);less_ssum(p2,p1)|] ==> p1=p2"
   270  (fn prems =>
   270  (fn prems =>
   271 	[
   271 	[
   272 	(cut_facts_tac prems 1),
   272 	(cut_facts_tac prems 1),
   273 	(res_inst_tac [("p","p1")] IssumE2 1),
   273 	(res_inst_tac [("p","p1")] IssumE2 1),
   293 	(rtac antisym_less 1),
   293 	(rtac antisym_less 1),
   294 	(etac (less_ssum2b RS iffD1) 1),
   294 	(etac (less_ssum2b RS iffD1) 1),
   295 	(etac (less_ssum2b RS iffD1) 1)
   295 	(etac (less_ssum2b RS iffD1) 1)
   296 	]);
   296 	]);
   297 
   297 
   298 val trans_less_ssum = prove_goal Ssum1.thy 
   298 qed_goal "trans_less_ssum" Ssum1.thy 
   299  "[|less_ssum(p1,p2);less_ssum(p2,p3)|] ==> less_ssum(p1,p3)"
   299  "[|less_ssum(p1,p2);less_ssum(p2,p3)|] ==> less_ssum(p1,p3)"
   300  (fn prems =>
   300  (fn prems =>
   301 	[
   301 	[
   302 	(cut_facts_tac prems 1),
   302 	(cut_facts_tac prems 1),
   303 	(res_inst_tac [("p","p1")] IssumE2 1),
   303 	(res_inst_tac [("p","p1")] IssumE2 1),