src/HOL/UNITY/WFair.ML
changeset 5257 c03e3ba9cbcc
parent 5253 82a5ca6290aa
child 5277 e4297d03e5d2
equal deleted inserted replaced
5256:e6983301ce5e 5257:c03e3ba9cbcc
   323 qed "PSP_unless";
   323 qed "PSP_unless";
   324 
   324 
   325 
   325 
   326 (*** Proving the induction rules ***)
   326 (*** Proving the induction rules ***)
   327 
   327 
       
   328 (** The most general rule: r is any wf relation; f is any variant function **)
       
   329 
   328 Goal "[| wf r;     \
   330 Goal "[| wf r;     \
   329 \        ALL m. leadsTo acts (A Int f-``{m})                     \
   331 \        ALL m. leadsTo acts (A Int f-``{m})                     \
   330 \                            ((A Int f-``(r^-1 ^^ {m})) Un B);   \
   332 \                            ((A Int f-``(r^-1 ^^ {m})) Un B);   \
   331 \        id: acts |] \
   333 \        id: acts |] \
   332 \     ==> leadsTo acts (A Int f-``{m}) B";
   334 \     ==> leadsTo acts (A Int f-``{m}) B";
   353 qed "leadsTo_wf_induct";
   355 qed "leadsTo_wf_induct";
   354 
   356 
   355 
   357 
   356 Goal "[| wf r;     \
   358 Goal "[| wf r;     \
   357 \        ALL m:I. leadsTo acts (A Int f-``{m})                   \
   359 \        ALL m:I. leadsTo acts (A Int f-``{m})                   \
   358 \                            ((A Int f-``(r^-1 ^^ {m})) Un B);   \
   360 \                              ((A Int f-``(r^-1 ^^ {m})) Un B);   \
   359 \        id: acts |] \
   361 \        id: acts |] \
   360 \     ==> leadsTo acts A ((A - (f-``I)) Un B)";
   362 \     ==> leadsTo acts A ((A - (f-``I)) Un B)";
   361 by (etac leadsTo_wf_induct 1);
   363 by (etac leadsTo_wf_induct 1);
   362 by Safe_tac;
   364 by Safe_tac;
   363 by (case_tac "m:I" 1);
   365 by (case_tac "m:I" 1);