IOA/example/Correctness.ML
author nipkow
Wed, 09 Nov 1994 19:51:09 +0100
changeset 168 44ff2275d44f
parent 156 fd1be45b64bf
child 171 16c4ea954511
permissions -rw-r--r--
Added headers and made various small mods.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
168
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     1
(*  Title:      HOL/IOA/example/Correctness.ML
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     2
    ID:         $Id$
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     4
    Copyright   1994  TU Muenchen
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     5
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     6
The main correctness proof: Impl implements Spec
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     7
*)
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
     8
156
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
     9
open Impl;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    10
open Spec;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    11
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    12
val hom_ss = impl_ss;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    13
val hom_ioas = [Spec.ioa_def, Spec.trans_def,
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    14
                Sender.sender_trans_def,Receiver.receiver_trans_def]
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    15
               @ impl_ioas;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    16
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    17
val hom_ss' = hom_ss addsimps hom_ioas;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    18
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    19
val impl_asigs = [Sender.sender_asig_def,Receiver.receiver_asig_def,
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    20
                  Channels.srch_asig_def,Channels.rsch_asig_def];
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    21
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    22
(* A lemma about restricting the action signature of the implementation
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    23
 * to that of the specification.
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    24
 ****************************)
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    25
goal Correctness.thy
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    26
 "a:externals(asig_of(restrict(impl_ioa,externals(spec_sig)))) = \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    27
\ (case a of                  \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    28
\     S_msg(m) => True        \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    29
\   | R_msg(m) => True        \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    30
\   | S_pkt(pkt) => False  \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    31
\   | R_pkt(pkt) => False  \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    32
\   | S_ack(b) => False    \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    33
\   | R_ack(b) => False    \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    34
\   | C_m_s => False          \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    35
\   | C_m_r => False          \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    36
\   | C_r_s => False          \
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    37
\   | C_r_r(m) => False)";
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    38
  by(simp_tac (hom_ss addcongs [if_weak_cong] 
168
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
    39
                  addsimps ([externals_def, restrict_def, restrict_asig_def,
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
    40
                             asig_of_par, asig_comp_def, Spec.sig_def] @
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
    41
                            asig_projections @ impl_ioas @ impl_asigs)) 1);
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
    42
  by(Action.action.induct_tac "a" 1);
156
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    43
  by(ALLGOALS(simp_tac (action_ss addsimps 
168
44ff2275d44f Added headers and made various small mods.
nipkow
parents: 156
diff changeset
    44
                        (actions_def :: asig_projections @ set_lemmas))));
156
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    45
val externals_lemma = result();
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    46
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    47
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    48
val sels = [Sender.sbit_def, Sender.sq_def, Sender.ssending_def,
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    49
            Receiver.rbit_def, Receiver.rq_def, Receiver.rsending_def];
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    50
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    51
(* Proof of correctness *)
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    52
goalw Correctness.thy [Spec.ioa_def, Solve.is_weak_pmap_def]
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    53
  "is_weak_pmap(hom, restrict(impl_ioa,externals(spec_sig)), spec_ioa)";
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    54
by(simp_tac (hom_ss addsimps 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    55
             (Correctness.hom_def::[cancel_restrict,externals_lemma])) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    56
br conjI 1;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    57
by(simp_tac (hom_ss addsimps impl_ioas) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    58
br ballI 1;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    59
bd CollectD 1;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    60
by(asm_simp_tac (hom_ss addsimps sels) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    61
by(REPEAT(rtac allI 1));
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    62
br imp_conj_lemma 1;   (* from lemmas.ML *)
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    63
by(Action.action.induct_tac "a"  1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    64
by(asm_simp_tac (hom_ss' setloop (split_tac [expand_if])) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    65
by(forward_tac [inv4] 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    66
by(asm_full_simp_tac (hom_ss addsimps 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    67
                      [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    68
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    69
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    70
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    71
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    72
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    73
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    74
by(simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    75
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    76
by(asm_simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    77
by(forward_tac [inv4] 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    78
by(forward_tac [inv2] 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    79
be disjE 1;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    80
by(asm_simp_tac hom_ss 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    81
by(asm_full_simp_tac (hom_ss addsimps 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    82
                      [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    83
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    84
by(asm_simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    85
by(forward_tac [inv2] 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    86
be disjE 1;
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    87
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    88
by(forward_tac [inv3] 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    89
by(case_tac "sq(sen(s))=[]" 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    90
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    91
by(asm_full_simp_tac hom_ss' 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    92
by(fast_tac (HOL_cs addSDs [plus_leD1 RS leD]) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    93
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    94
by(case_tac "m = hd(sq(sen(s)))" 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    95
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    96
by(asm_full_simp_tac (hom_ss addsimps 
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    97
                     [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    98
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
    99
by(asm_full_simp_tac hom_ss 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
   100
by(fast_tac (HOL_cs addSDs [plus_leD1 RS leD]) 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
   101
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
   102
by(asm_full_simp_tac hom_ss 1);
fd1be45b64bf added IOA to isabelle/HOL
clasohm
parents:
diff changeset
   103
result();