src/HOLCF/Fix.ML
changeset 628 bb3f87f9cafe
parent 625 119391dd1d59
child 892 d0dc8d057929
equal deleted inserted replaced
627:e685b5411617 628:bb3f87f9cafe
   691 (* ------------------------------------------------------------------------- *)
   691 (* ------------------------------------------------------------------------- *)
   692 (* a result about functions with flat codomain                               *)
   692 (* a result about functions with flat codomain                               *)
   693 (* ------------------------------------------------------------------------- *)
   693 (* ------------------------------------------------------------------------- *)
   694 
   694 
   695 val flat_codom = prove_goalw Fix.thy [flat_def]
   695 val flat_codom = prove_goalw Fix.thy [flat_def]
   696 "[|flat(y::'b);f[x::'a]=(c::'b)|] ==> f[UU::'a]=UU::'b | (!z.f[z::'a]=c)"
   696 "[|flat(y::'b);f[x::'a]=(c::'b)|] ==> f[UU::'a]=(UU::'b) | (!z.f[z::'a]=c)"
   697  (fn prems =>
   697  (fn prems =>
   698 	[
   698 	[
   699 	(cut_facts_tac prems 1),
   699 	(cut_facts_tac prems 1),
   700 	(res_inst_tac [("Q","f[x::'a]=UU::'b")] classical2 1),
   700 	(res_inst_tac [("Q","f[x::'a]=(UU::'b)")] classical2 1),
   701 	(rtac disjI1 1),
   701 	(rtac disjI1 1),
   702 	(rtac UU_I 1),
   702 	(rtac UU_I 1),
   703 	(res_inst_tac [("s","f[x]"),("t","UU::'b")] subst 1),
   703 	(res_inst_tac [("s","f[x]"),("t","UU::'b")] subst 1),
   704 	(atac 1),
   704 	(atac 1),
   705 	(rtac (minimal RS monofun_cfun_arg) 1),
   705 	(rtac (minimal RS monofun_cfun_arg) 1),
   706 	(res_inst_tac [("Q","f[UU::'a]=UU::'b")] classical2 1),
   706 	(res_inst_tac [("Q","f[UU::'a]=(UU::'b)")] classical2 1),
   707 	(etac disjI1 1),
   707 	(etac disjI1 1),
   708 	(rtac disjI2 1),
   708 	(rtac disjI2 1),
   709 	(rtac allI 1),
   709 	(rtac allI 1),
   710 	(res_inst_tac [("s","f[x]"),("t","c")] subst 1),
   710 	(res_inst_tac [("s","f[x]"),("t","c")] subst 1),
   711 	(atac 1),
   711 	(atac 1),