src/HOL/UNITY/Handshake.ML
author paulson
Mon, 01 Mar 1999 18:38:43 +0100
changeset 6295 351b3c2b0d83
parent 6012 1894bfc4aee9
child 6536 281d44905cab
permissions -rw-r--r--
removed the infernal States, eqStates, compatible, etc.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/Handshake
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     2
    ID:         $Id$
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     4
    Copyright   1998  University of Cambridge
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     5
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     6
Handshake Protocol
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     7
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     8
From Misra, "Asynchronous Compositions of Programs", Section 5.3.2
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     9
*)
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    10
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    11
(*split_all_tac causes a big blow-up*)
5706
21706a735c8d record_split_name;
wenzelm
parents: 5701
diff changeset
    12
claset_ref() := claset() delSWrapper record_split_name;
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    13
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    14
Addsimps [F_def RS def_prg_Init, G_def RS def_prg_Init];
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    15
program_defs_ref := [F_def, G_def];
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    16
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    17
Addsimps (map simp_of_act [cmdF_def, cmdG_def]);
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    18
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    19
(*Simplification for records*)
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    20
Addsimps (thms"state.update_defs");
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    21
Addsimps [simp_of_set invFG_def];
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    22
6295
351b3c2b0d83 removed the infernal States, eqStates, compatible, etc.
paulson
parents: 6012
diff changeset
    23
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    24
Goal "(F Join G) : Invariant invFG";
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    25
by (rtac InvariantI 1);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    26
by (Force_tac 1);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    27
by (rtac (constrains_imp_Constrains RS StableI) 1);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    28
by (auto_tac (claset(), simpset() addsimps [constrains_Join]));
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    29
by (constrains_tac 2);
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    30
by (auto_tac (claset() addIs [le_anti_sym] addSEs [le_SucE], simpset()));
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    31
by (constrains_tac 1);
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    32
qed "invFG";
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    33
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    34
Goal "(F Join G) : LeadsTo ({s. NF s = k} - {s. BB s}) \
6295
351b3c2b0d83 removed the infernal States, eqStates, compatible, etc.
paulson
parents: 6012
diff changeset
    35
\                          ({s. NF s = k} Int {s. BB s})";
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    36
by (rtac (ensures_stable_Join1 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1);
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    37
by (ensures_tac "cmdG" 2);
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    38
by (constrains_tac 1);
6012
1894bfc4aee9 Addition of the States component; parts of Comp not working
paulson
parents: 5706
diff changeset
    39
by Auto_tac;
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    40
qed "lemma2_1";
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    41
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    42
Goal "(F Join G) : LeadsTo ({s. NF s = k} Int {s. BB s}) {s. k < NF s}";
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    43
by (rtac (ensures_stable_Join2 RS leadsTo_Basis RS leadsTo_imp_LeadsTo) 1);
5426
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    44
by (constrains_tac 2);
566f47250bd0 A new approach, using simp_of_act and simp_of_set to activate definitions when
paulson
parents: 5340
diff changeset
    45
by (ensures_tac "cmdF" 1);
6012
1894bfc4aee9 Addition of the States component; parts of Comp not working
paulson
parents: 5706
diff changeset
    46
by Auto_tac;
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    47
qed "lemma2_2";
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    48
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    49
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    50
Goal "(F Join G) : LeadsTo UNIV {s. m < NF s}";
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    51
by (rtac LeadsTo_weaken_R 1);
5258
d1c0504d6c42 Finished the example
paulson
parents: 5252
diff changeset
    52
by (res_inst_tac [("f", "NF"), ("l","Suc m"), ("B","{}")] 
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents: 5258
diff changeset
    53
    GreaterThan_bounded_induct 1);
5258
d1c0504d6c42 Finished the example
paulson
parents: 5252
diff changeset
    54
by (auto_tac (claset(), simpset() addsimps [vimage_def]));
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    55
(*The inductive step: (F Join G) : LeadsTo {x. NF x = ma} {x. ma < NF x}*)
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    56
by (rtac LeadsTo_Diff 1);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    57
by (rtac lemma2_2 2);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    58
by (rtac LeadsTo_Trans 1);
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5277
diff changeset
    59
by (rtac lemma2_2 2);
5584
aad639e56d4e Now id:(Acts prg) is implicit
paulson
parents: 5426
diff changeset
    60
by (rtac lemma2_1 1);
5258
d1c0504d6c42 Finished the example
paulson
parents: 5252
diff changeset
    61
qed "progress";