src/HOLCF/Lift3.ML
changeset 1267 bca91b4e1710
parent 1168 74be52691d62
child 1274 ea0668a1c0ba
equal deleted inserted replaced
1266:3ae9fe3c0f68 1267:bca91b4e1710
    42 	(res_inst_tac [("f","Iup")] arg_cong  1),
    42 	(res_inst_tac [("f","Iup")] arg_cong  1),
    43 	(rtac lub_equal 1),
    43 	(rtac lub_equal 1),
    44 	(atac 1),
    44 	(atac 1),
    45 	(rtac (monofun_Ilift2 RS ch2ch_monofun) 1),
    45 	(rtac (monofun_Ilift2 RS ch2ch_monofun) 1),
    46 	(etac (monofun_Iup RS ch2ch_monofun) 1),
    46 	(etac (monofun_Iup RS ch2ch_monofun) 1),
    47 	(asm_simp_tac Lift_ss 1)
    47 	(Asm_simp_tac 1)
    48 	]);
    48 	]);
    49 
    49 
    50 qed_goal "cont_Iup" Lift3.thy "cont(Iup)"
    50 qed_goal "cont_Iup" Lift3.thy "cont(Iup)"
    51  (fn prems =>
    51  (fn prems =>
    52 	[
    52 	[
    68 	(rtac trans 1),
    68 	(rtac trans 1),
    69 	(rtac (thelub_fun RS sym) 2),
    69 	(rtac (thelub_fun RS sym) 2),
    70 	(etac (monofun_Ilift1 RS ch2ch_monofun) 2),
    70 	(etac (monofun_Ilift1 RS ch2ch_monofun) 2),
    71 	(rtac ext 1),
    71 	(rtac ext 1),
    72 	(res_inst_tac [("p","x")] liftE 1),
    72 	(res_inst_tac [("p","x")] liftE 1),
    73 	(asm_simp_tac Lift_ss 1),
    73 	(Asm_simp_tac 1),
    74 	(rtac (lub_const RS thelubI RS sym) 1),
    74 	(rtac (lub_const RS thelubI RS sym) 1),
    75 	(asm_simp_tac Lift_ss 1),
    75 	(Asm_simp_tac 1),
    76 	(etac contlub_cfun_fun 1)
    76 	(etac contlub_cfun_fun 1)
    77 	]);
    77 	]);
    78 
    78 
    79 
    79 
    80 qed_goal "contlub_Ilift2" Lift3.thy "contlub(Ilift(f))"
    80 qed_goal "contlub_Ilift2" Lift3.thy "contlub(Ilift(f))"
    84 	(strip_tac 1),
    84 	(strip_tac 1),
    85 	(rtac disjE 1),
    85 	(rtac disjE 1),
    86 	(rtac (thelub_lift1a RS ssubst) 2),
    86 	(rtac (thelub_lift1a RS ssubst) 2),
    87 	(atac 2),
    87 	(atac 2),
    88 	(atac 2),
    88 	(atac 2),
    89 	(asm_simp_tac Lift_ss 2),
    89 	(Asm_simp_tac 2),
    90 	(rtac (thelub_lift1b RS ssubst) 3),
    90 	(rtac (thelub_lift1b RS ssubst) 3),
    91 	(atac 3),
    91 	(atac 3),
    92 	(atac 3),
    92 	(atac 3),
    93 	(fast_tac HOL_cs 1),
    93 	(fast_tac HOL_cs 1),
    94 	(asm_simp_tac Lift_ss 2),
    94 	(Asm_simp_tac 2),
    95 	(rtac (chain_UU_I_inverse RS sym) 2),
    95 	(rtac (chain_UU_I_inverse RS sym) 2),
    96 	(rtac allI 2),
    96 	(rtac allI 2),
    97 	(res_inst_tac [("p","Y(i)")] liftE 2),
    97 	(res_inst_tac [("p","Y(i)")] liftE 2),
    98 	(asm_simp_tac Lift_ss 2),
    98 	(Asm_simp_tac 2),
    99 	(rtac notE 2),
    99 	(rtac notE 2),
   100 	(dtac spec 2),
   100 	(dtac spec 2),
   101 	(etac spec 2),
   101 	(etac spec 2),
   102 	(atac 2),
   102 	(atac 2),
   103 	(rtac (contlub_cfun_arg RS ssubst) 1),
   103 	(rtac (contlub_cfun_arg RS ssubst) 1),
   115 	(atac 1),
   115 	(atac 1),
   116 	(rtac defined_Iup2 1),
   116 	(rtac defined_Iup2 1),
   117 	(rtac exI 1),
   117 	(rtac exI 1),
   118 	(strip_tac 1),
   118 	(strip_tac 1),
   119 	(res_inst_tac [("p","Y(i)")] liftE 1),
   119 	(res_inst_tac [("p","Y(i)")] liftE 1),
   120 	(asm_simp_tac Lift_ss 2),
   120 	(Asm_simp_tac 2),
   121 	(res_inst_tac [("P","Y(i) = UU")] notE 1),
   121 	(res_inst_tac [("P","Y(i) = UU")] notE 1),
   122 	(fast_tac HOL_cs 1),
   122 	(fast_tac HOL_cs 1),
   123 	(rtac (inst_lift_pcpo RS ssubst) 1),
   123 	(rtac (inst_lift_pcpo RS ssubst) 1),
   124 	(atac 1)
   124 	(atac 1)
   125 	]);
   125 	]);
   146 (* ------------------------------------------------------------------------ *)
   146 (* ------------------------------------------------------------------------ *)
   147 
   147 
   148 qed_goalw "Exh_Lift1" Lift3.thy [up_def] "z = UU | (? x. z = up`x)"
   148 qed_goalw "Exh_Lift1" Lift3.thy [up_def] "z = UU | (? x. z = up`x)"
   149  (fn prems =>
   149  (fn prems =>
   150 	[
   150 	[
   151 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1),
   151 	(simp_tac (!simpset addsimps [cont_Iup]) 1),
   152 	(rtac (inst_lift_pcpo RS ssubst) 1),
   152 	(rtac (inst_lift_pcpo RS ssubst) 1),
   153 	(rtac Exh_Lift 1)
   153 	(rtac Exh_Lift 1)
   154 	]);
   154 	]);
   155 
   155 
   156 qed_goalw "inject_up" Lift3.thy [up_def] "up`x=up`y ==> x=y"
   156 qed_goalw "inject_up" Lift3.thy [up_def] "up`x=up`y ==> x=y"
   157  (fn prems =>
   157  (fn prems =>
   158 	[
   158 	[
   159 	(cut_facts_tac prems 1),
   159 	(cut_facts_tac prems 1),
   160 	(rtac inject_Iup 1),
   160 	(rtac inject_Iup 1),
   161 	(etac box_equals 1),
   161 	(etac box_equals 1),
   162 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1),
   162 	(simp_tac (!simpset addsimps [cont_Iup]) 1),
   163 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1)
   163 	(simp_tac (!simpset addsimps [cont_Iup]) 1)
   164 	]);
   164 	]);
   165 
   165 
   166 qed_goalw "defined_up" Lift3.thy [up_def] " up`x ~= UU"
   166 qed_goalw "defined_up" Lift3.thy [up_def] " up`x ~= UU"
   167  (fn prems =>
   167  (fn prems =>
   168 	[
   168 	[
   169 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1),
   169 	(simp_tac (!simpset addsimps [cont_Iup]) 1),
   170 	(rtac defined_Iup2 1)
   170 	(rtac defined_Iup2 1)
   171 	]);
   171 	]);
   172 
   172 
   173 qed_goalw "liftE1" Lift3.thy [up_def] 
   173 qed_goalw "liftE1" Lift3.thy [up_def] 
   174 	"[| p=UU ==> Q; !!x. p=up`x==>Q|] ==>Q"
   174 	"[| p=UU ==> Q; !!x. p=up`x==>Q|] ==>Q"
   176 	[
   176 	[
   177 	(rtac liftE 1),
   177 	(rtac liftE 1),
   178 	(resolve_tac prems 1),
   178 	(resolve_tac prems 1),
   179 	(etac (inst_lift_pcpo RS ssubst) 1),
   179 	(etac (inst_lift_pcpo RS ssubst) 1),
   180 	(resolve_tac (tl prems) 1),
   180 	(resolve_tac (tl prems) 1),
   181 	(asm_simp_tac (Lift_ss addsimps [cont_Iup]) 1)
   181 	(asm_simp_tac (!simpset addsimps [cont_Iup]) 1)
   182 	]);
   182 	]);
   183 
   183 
   184 
   184 
   185 qed_goalw "lift1" Lift3.thy [up_def,lift_def] "lift`f`UU=UU"
   185 qed_goalw "lift1" Lift3.thy [up_def,lift_def] "lift`f`UU=UU"
   186  (fn prems =>
   186  (fn prems =>
   190 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   190 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   191 		cont_Ilift2,cont2cont_CF1L]) 1)),
   191 		cont_Ilift2,cont2cont_CF1L]) 1)),
   192 	(rtac (beta_cfun RS ssubst) 1),
   192 	(rtac (beta_cfun RS ssubst) 1),
   193 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   193 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   194 		cont_Ilift2,cont2cont_CF1L]) 1)),
   194 		cont_Ilift2,cont2cont_CF1L]) 1)),
   195 	(simp_tac (Lift_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1)
   195 	(simp_tac (!simpset addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1)
   196 	]);
   196 	]);
   197 
   197 
   198 qed_goalw "lift2" Lift3.thy [up_def,lift_def] "lift`f`(up`x)=f`x"
   198 qed_goalw "lift2" Lift3.thy [up_def,lift_def] "lift`f`(up`x)=f`x"
   199  (fn prems =>
   199  (fn prems =>
   200 	[
   200 	[
   203 	(rtac (beta_cfun RS ssubst) 1),
   203 	(rtac (beta_cfun RS ssubst) 1),
   204 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   204 	(REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1,
   205 		cont_Ilift2,cont2cont_CF1L]) 1)),
   205 		cont_Ilift2,cont2cont_CF1L]) 1)),
   206 	(rtac (beta_cfun RS ssubst) 1),
   206 	(rtac (beta_cfun RS ssubst) 1),
   207 	(rtac cont_Ilift2 1),
   207 	(rtac cont_Ilift2 1),
   208 	(simp_tac (Lift_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1)
   208 	(simp_tac (!simpset addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1)
   209 	]);
   209 	]);
   210 
   210 
   211 qed_goalw "less_lift4b" Lift3.thy [up_def,lift_def] "~ up`x << UU"
   211 qed_goalw "less_lift4b" Lift3.thy [up_def,lift_def] "~ up`x << UU"
   212  (fn prems =>
   212  (fn prems =>
   213 	[
   213 	[
   214 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1),
   214 	(simp_tac (!simpset addsimps [cont_Iup]) 1),
   215 	(rtac less_lift3b 1)
   215 	(rtac less_lift3b 1)
   216 	]);
   216 	]);
   217 
   217 
   218 qed_goalw "less_lift4c" Lift3.thy [up_def,lift_def]
   218 qed_goalw "less_lift4c" Lift3.thy [up_def,lift_def]
   219 	 "(up`x << up`y) = (x<<y)"
   219 	 "(up`x << up`y) = (x<<y)"
   220  (fn prems =>
   220  (fn prems =>
   221 	[
   221 	[
   222 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1),
   222 	(simp_tac (!simpset addsimps [cont_Iup]) 1),
   223 	(rtac less_lift2c 1)
   223 	(rtac less_lift2c 1)
   224 	]);
   224 	]);
   225 
   225 
   226 qed_goalw "thelub_lift2a" Lift3.thy [up_def,lift_def] 
   226 qed_goalw "thelub_lift2a" Lift3.thy [up_def,lift_def] 
   227 "[| is_chain(Y); ? i x. Y(i) = up`x |] ==>\
   227 "[| is_chain(Y); ? i x. Y(i) = up`x |] ==>\
   245 	(etac exE 1),
   245 	(etac exE 1),
   246 	(rtac exI 1),
   246 	(rtac exI 1),
   247 	(rtac exI 1),
   247 	(rtac exI 1),
   248 	(etac box_equals 1),
   248 	(etac box_equals 1),
   249 	(rtac refl 1),
   249 	(rtac refl 1),
   250 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1)
   250 	(simp_tac (!simpset addsimps [cont_Iup]) 1)
   251 	]);
   251 	]);
   252 
   252 
   253 
   253 
   254 
   254 
   255 qed_goalw "thelub_lift2b" Lift3.thy [up_def,lift_def] 
   255 qed_goalw "thelub_lift2b" Lift3.thy [up_def,lift_def] 
   266 	(rtac swap 1),
   266 	(rtac swap 1),
   267 	(atac 1),
   267 	(atac 1),
   268 	(dtac notnotD 1),
   268 	(dtac notnotD 1),
   269 	(etac box_equals 1),
   269 	(etac box_equals 1),
   270 	(rtac refl 1),
   270 	(rtac refl 1),
   271 	(simp_tac (Lift_ss addsimps [cont_Iup]) 1)
   271 	(simp_tac (!simpset addsimps [cont_Iup]) 1)
   272 	]);
   272 	]);
   273 
   273 
   274 
   274 
   275 qed_goal "lift_lemma2" Lift3.thy  " (? x.z = up`x) = (z~=UU)"
   275 qed_goal "lift_lemma2" Lift3.thy  " (? x.z = up`x) = (z~=UU)"
   276  (fn prems =>
   276  (fn prems =>
   336 
   336 
   337 qed_goal "lift3" Lift3.thy "lift`up`x=x"
   337 qed_goal "lift3" Lift3.thy "lift`up`x=x"
   338  (fn prems =>
   338  (fn prems =>
   339 	[
   339 	[
   340 	(res_inst_tac [("p","x")] liftE1 1),
   340 	(res_inst_tac [("p","x")] liftE1 1),
   341 	(asm_simp_tac (Cfun_ss addsimps [lift1,lift2]) 1),
   341 	(asm_simp_tac (!simpset addsimps [lift1,lift2]) 1),
   342 	(asm_simp_tac (Cfun_ss addsimps [lift1,lift2]) 1)
   342 	(asm_simp_tac (!simpset addsimps [lift1,lift2]) 1)
   343 	]);
   343 	]);
   344 
   344 
   345 (* ------------------------------------------------------------------------ *)
   345 (* ------------------------------------------------------------------------ *)
   346 (* install simplifier for ('a)u                                             *)
   346 (* install simplifier for ('a)u                                             *)
   347 (* ------------------------------------------------------------------------ *)
   347 (* ------------------------------------------------------------------------ *)