src/HOLCF/Sprod0.ML
changeset 1267 bca91b4e1710
parent 1168 74be52691d62
child 1274 ea0668a1c0ba
equal deleted inserted replaced
1266:3ae9fe3c0f68 1267:bca91b4e1710
   338 
   338 
   339 (* ------------------------------------------------------------------------ *)
   339 (* ------------------------------------------------------------------------ *)
   340 (* instantiate the simplifier                                               *)
   340 (* instantiate the simplifier                                               *)
   341 (* ------------------------------------------------------------------------ *)
   341 (* ------------------------------------------------------------------------ *)
   342 
   342 
   343 val Sprod_ss = 
   343 Addsimps [strict_Isfst1,strict_Isfst2,strict_Issnd1,strict_Issnd2,
   344 	HOL_ss 
   344 	  Isfst2,Issnd2];
   345 	addsimps [strict_Isfst1,strict_Isfst2,strict_Issnd1,strict_Issnd2,
       
   346 		 Isfst2,Issnd2];
       
   347 
   345 
   348 
   346 
   349 qed_goal "defined_IsfstIssnd" Sprod0.thy 
   347 qed_goal "defined_IsfstIssnd" Sprod0.thy 
   350 	"p~=Ispair UU UU ==> Isfst p ~= UU & Issnd p ~= UU"
   348 	"p~=Ispair UU UU ==> Isfst p ~= UU & Issnd p ~= UU"
   351  (fn prems =>
   349  (fn prems =>
   353 	(cut_facts_tac prems 1),
   351 	(cut_facts_tac prems 1),
   354 	(res_inst_tac [("p","p")] IsprodE 1),
   352 	(res_inst_tac [("p","p")] IsprodE 1),
   355 	(contr_tac 1),
   353 	(contr_tac 1),
   356 	(hyp_subst_tac 1),
   354 	(hyp_subst_tac 1),
   357 	(rtac conjI 1),
   355 	(rtac conjI 1),
   358 	(asm_simp_tac Sprod_ss 1),
   356 	(Asm_simp_tac 1),
   359 	(asm_simp_tac Sprod_ss 1)
   357 	(Asm_simp_tac 1)
   360 	]);
   358 	]);
   361 
   359 
   362 
   360 
   363 (* ------------------------------------------------------------------------ *)
   361 (* ------------------------------------------------------------------------ *)
   364 (* Surjective pairing: equivalent to Exh_Sprod                              *)
   362 (* Surjective pairing: equivalent to Exh_Sprod                              *)
   367 qed_goal "surjective_pairing_Sprod" Sprod0.thy 
   365 qed_goal "surjective_pairing_Sprod" Sprod0.thy 
   368 	"z = Ispair(Isfst z)(Issnd z)"
   366 	"z = Ispair(Isfst z)(Issnd z)"
   369 (fn prems =>
   367 (fn prems =>
   370 	[
   368 	[
   371 	(res_inst_tac [("z1","z")] (Exh_Sprod RS disjE) 1),
   369 	(res_inst_tac [("z1","z")] (Exh_Sprod RS disjE) 1),
   372 	(asm_simp_tac Sprod_ss 1),
   370 	(Asm_simp_tac 1),
   373 	(etac exE 1),
   371 	(etac exE 1),
   374 	(etac exE 1),
   372 	(etac exE 1),
   375 	(asm_simp_tac Sprod_ss 1)
   373 	(Asm_simp_tac 1)
   376 	]);
   374 	]);
   377 
   375 
   378 
   376 
   379 
   377 
   380 
   378 
   381 
   379 
   382 
   380 
   383 
   381 
   384 
   382 
   385 
   383 
   386 
   384 
   387 
   385 
   388 
   386 
   389 
   387