src/HOL/UNITY/PriorityAux.ML
author nipkow
Fri, 05 Jan 2001 18:48:18 +0100
changeset 10797 028d22926a41
parent 10782 ddb433987557
child 10834 a7897aebbffc
permissions -rw-r--r--
^^ -> ``` Univalent -> single_valued
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/PriorityAux
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     2
    ID:         $Id$
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     3
    Author:     Sidi O Ehmety, Cambridge University Computer Laboratory
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     4
    Copyright   2001  University of Cambridge
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     5
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     6
Auxiliary definitions needed in Priority.thy
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     7
*)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     8
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     9
Addsimps [derive_def, derive1_def, symcl_def, A_def, R_def,  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    10
          above_def, reach_def, reverse_def, neighbors_def];
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    11
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    12
(*All vertex sets are finite \\<dots>*)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    13
AddIffs [[subset_UNIV, finite_vertex_univ] MRS finite_subset];
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    14
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    15
(* and relatons over vertex are finite too *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    16
AddIffs [[subset_UNIV, [finite_vertex_univ, finite_vertex_univ] 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    17
           MRS finite_Prod_UNIV] MRS finite_subset];
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    18
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    19
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    20
(* The equalities (above i r = {}) = (A i r = {}) 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    21
   and (reach i r = {}) = (R i r) rely on the following theorem  *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    22
10797
028d22926a41 ^^ -> ```
nipkow
parents: 10782
diff changeset
    23
Goal "((r^+)```{i} = {}) = (r```{i} = {})";
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    24
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    25
by (etac trancl_induct 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    26
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    27
qed "image0_trancl_iff_image0_r";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    28
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    29
(* Another form usefull in some situation *)
10797
028d22926a41 ^^ -> ```
nipkow
parents: 10782
diff changeset
    30
Goal "(r```{i}={}) = (ALL x. ((i,x):r^+) = False)";
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    31
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    32
by (dtac (image0_trancl_iff_image0_r RS ssubst) 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    33
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    34
qed "image0_r_iff_image0_trancl";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    35
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    36
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    37
(* In finite universe acyclic coincides with wf *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    38
Goal 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    39
"!!r::(vertex*vertex)set. acyclic r = wf r";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    40
by (auto_tac (claset(), simpset() addsimps [wf_iff_acyclic_if_finite]));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    41
qed "acyclic_eq_wf";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    42
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    43
(* derive and derive1 are equivalent *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    44
Goal "derive i r q = derive1 i r q";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    45
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    46
qed "derive_derive1_eq";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    47
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    48
(* Lemma 1 *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    49
Goalw [reach_def]
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    50
"[| x:reach i q; derive1 k r q |] ==> x~=k --> x:reach i r";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    51
by (etac ImageE 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    52
by (etac trancl_induct 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    53
by (case_tac "i=k" 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    54
by (auto_tac (claset() addIs [r_into_trancl], simpset()));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    55
by (dres_inst_tac [("x", "y")] spec 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    56
by (rotate_tac ~1 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    57
by (dres_inst_tac [("x", "z")] spec 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    58
by (auto_tac (claset() addDs [r_into_trancl] addIs [trancl_trans], simpset()));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    59
qed "lemma1_a";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    60
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    61
Goal "ALL k r q. derive k r q -->(reach i q <= (reach i r Un {k}))";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    62
by (REPEAT(rtac allI 1));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    63
by (rtac impI 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    64
by (rtac subsetI 1 THEN dtac lemma1_a 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    65
by (auto_tac (claset(), simpset() addsimps [derive_derive1_eq]
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    66
                    delsimps [reach_def, derive_def, derive1_def]));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    67
qed "reach_lemma";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    68
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    69
(* An other possible formulation of the above theorem based on
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    70
   the equivalence x:reach y r = y:above x r                  *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    71
Goal 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    72
"(ALL i. reach i q <= (reach i r Un {k})) =\
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    73
\ (ALL x. x~=k --> (ALL i. i~:above x r --> i~:above x q))";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    74
by (auto_tac (claset(), simpset() addsimps [trancl_converse]));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    75
qed "reach_above_lemma";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    76
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    77
(* Lemma 2 *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    78
Goal 
10797
028d22926a41 ^^ -> ```
nipkow
parents: 10782
diff changeset
    79
"(z, i):r^+ ==> (ALL y. (y, z):r --> (y, i)~:r^+) = ((r^-1)```{z}={})";
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    80
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    81
by (forw_inst_tac [("r", "r")] trancl_into_trancl2 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    82
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    83
qed "maximal_converse_image0";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    84
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    85
Goal
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    86
 "acyclic r ==> A i r~={}-->(EX j:above i r. A j r = {})";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    87
by (full_simp_tac (simpset() 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    88
            addsimps [acyclic_eq_wf, wf_eq_minimal]) 1);
10797
028d22926a41 ^^ -> ```
nipkow
parents: 10782
diff changeset
    89
by (dres_inst_tac [("x", "((r^-1)^+)```{i}")] spec 1);
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    90
by Auto_tac;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    91
by (rotate_tac ~1 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    92
by (asm_full_simp_tac (simpset() 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    93
        addsimps [maximal_converse_image0, trancl_converse]) 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    94
qed "above_lemma_a";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    95
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    96
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    97
Goal
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    98
 "acyclic r ==> above i r~={}-->(EX j:above i r. above j r = {})";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    99
by (dtac above_lemma_a 1);
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   100
by (auto_tac (claset(), simpset() 
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   101
        addsimps [image0_trancl_iff_image0_r]));
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   102
qed "above_lemma_b";
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   103
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   104
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   105
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   106
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   107
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   108
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   109
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   110
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   111
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   112
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   113
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   114
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   115
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
   116