src/HOL/UNITY/Lift.ML
changeset 7079 eec20608c791
parent 7000 6920cf9b8623
child 7179 6ffe5067d5cc
equal deleted inserted replaced
7078:4e64b2bd10ce 7079:eec20608c791
   252 by (REPEAT_FIRST (eresolve_tac mov_metrics));
   252 by (REPEAT_FIRST (eresolve_tac mov_metrics));
   253 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls)));
   253 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls)));
   254 by (Blast_tac 1);
   254 by (Blast_tac 1);
   255 qed "E_thm16a";
   255 qed "E_thm16a";
   256 
   256 
       
   257 (*Must sometimes delete them because they introduce multiplication*)
       
   258 val metric_ss = simpset() delsimprocs [Int_CC.sum_conv, Int_CC.rel_conv]
       
   259                           addsimps metric_simps;
       
   260 
       
   261 
   257 (*lem_lift_5_1 has ~goingup instead of goingdown*)
   262 (*lem_lift_5_1 has ~goingup instead of goingdown*)
   258 Goal "#0<N ==>   \
   263 Goal "#0<N ==>   \
   259 \     Lift : (closed Int Req n Int {s. metric n s = N} Int goingdown) LeadsTo \
   264 \     Lift : (closed Int Req n Int {s. metric n s = N} Int goingdown) LeadsTo \
   260 \                  (moving Int Req n Int {s. metric n s < N})";
   265 \                  (moving Int Req n Int {s. metric n s < N})";
   261 by (cut_facts_tac [bounded] 1);
   266 by (cut_facts_tac [bounded] 1);
   262 by (ensures_tac "req_down" 1);
   267 by (ensures_tac "req_down" 1);
   263 by Auto_tac;
   268 by Auto_tac;
   264 by (REPEAT_FIRST (eresolve_tac mov_metrics));
   269 by (REPEAT_FIRST (eresolve_tac mov_metrics));
   265 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls)));
   270 by (ALLGOALS (asm_simp_tac (metric_ss addsimps zcompare_rls)));
   266 by (Blast_tac 1);
   271 by (Blast_tac 1);
   267 qed "E_thm16b";
   272 qed "E_thm16b";
   268 
       
   269 
   273 
   270 
   274 
   271 (*lem_lift_5_0 proves an intersection involving ~goingup and goingup,
   275 (*lem_lift_5_0 proves an intersection involving ~goingup and goingup,
   272   i.e. the trivial disjunction, leading to an asymmetrical proof.*)
   276   i.e. the trivial disjunction, leading to an asymmetrical proof.*)
   273 Goal "#0<N ==> Req n Int {s. metric n s = N} <= goingup Un goingdown";
   277 Goal "#0<N ==> Req n Int {s. metric n s = N} <= goingup Un goingdown";
   274 by (asm_simp_tac (simpset() addsimps metric_simps) 1);
   278 by (asm_simp_tac metric_ss 1);
   275 by (force_tac (claset() delrules [impCE] addEs [impCE], 
   279 by (force_tac (claset() delrules [impCE] addEs [impCE], 
   276 	       simpset() addsimps conj_comms) 1);
   280 	       simpset() addsimps conj_comms) 1);
   277 qed "E_thm16c";
   281 qed "E_thm16c";
   278 
   282 
   279 
   283 
   292 
   296 
   293 (*lemma used to prove lem_lift_3_1*)
   297 (*lemma used to prove lem_lift_3_1*)
   294 Goal "[| metric n s = #0;  Min <= floor s;  floor s <= Max |] ==> floor s = n";
   298 Goal "[| metric n s = #0;  Min <= floor s;  floor s <= Max |] ==> floor s = n";
   295 by (etac rev_mp 1);
   299 by (etac rev_mp 1);
   296 (*force simplification of "metric..." while in conclusion part*)
   300 (*force simplification of "metric..." while in conclusion part*)
   297 by (asm_simp_tac (simpset() addsimps metric_simps) 1);
   301 by (asm_simp_tac metric_ss 1);
   298 qed "metric_eq_0D";
   302 qed "metric_eq_0D";
   299 
   303 
   300 AddDs [metric_eq_0D];
   304 AddDs [metric_eq_0D];
   301 
   305 
   302 
   306 
   307 by (ensures_tac "request_act" 1);
   311 by (ensures_tac "request_act" 1);
   308 by Auto_tac;
   312 by Auto_tac;
   309 qed "E_thm11";
   313 qed "E_thm11";
   310 
   314 
   311 val metric_tac = REPEAT (FIRSTGOAL (eresolve_tac mov_metrics))
   315 val metric_tac = REPEAT (FIRSTGOAL (eresolve_tac mov_metrics))
   312                  THEN auto_tac (claset(), simpset() addsimps metric_simps);
   316                  THEN auto_tac (claset(), metric_ss);
   313 
   317 
   314 (*lem_lift_3_5*)
   318 (*lem_lift_3_5*)
   315 Goal
   319 Goal
   316   "Lift : (moving Int Req n Int {s. metric n s = N} Int {s. floor s : req s}) \
   320   "Lift : (moving Int Req n Int {s. metric n s = N} Int {s. floor s : req s}) \
   317 \ LeadsTo (stopped Int Req n Int {s. metric n s = N} Int {s. floor s : req s})";
   321 \ LeadsTo (stopped Int Req n Int {s. metric n s = N} Int {s. floor s : req s})";