src/HOL/IOA/NTP/Correctness.ML
author clasohm
Wed, 04 Oct 1995 13:12:14 +0100
changeset 1266 3ae9fe3c0f68
parent 1051 4fcd0638e61d
child 1328 9a449a91425d
permissions -rw-r--r--
added local simpsets
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/IOA/NTP/Correctness.ML
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     2
    ID:         $Id$
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     4
    Copyright   1994  TU Muenchen
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     5
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     6
The main correctness proof: Impl implements Spec
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     7
*)
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     8
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
     9
open Impl;
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    10
open Spec;
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    11
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    12
val hom_ioas = [Spec.ioa_def, Spec.trans_def,
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    13
                Sender.sender_trans_def,Receiver.receiver_trans_def]
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    14
               @ impl_ioas;
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    15
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    16
Addsimps hom_ioas;
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    17
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    18
val impl_asigs = [Sender.sender_asig_def,Receiver.receiver_asig_def,
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    19
                   Abschannel.srch_asig_def,Abschannel.rsch_asig_def];
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    20
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    21
val ss =
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    22
  !simpset delsimps ([trans_of_def, starts_of_def, srch_asig_def,rsch_asig_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    23
                      asig_of_def, actions_def, srch_trans_def, rsch_trans_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    24
                      impl_def, srch_ioa_thm, rsch_ioa_thm, srch_ioa_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    25
                      rsch_ioa_def, Sender.sender_trans_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    26
                      Receiver.receiver_trans_def] @ set_lemmas);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    27
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    28
val ss' = !simpset delsimps [trans_of_def, srch_asig_def, rsch_asig_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    29
                             srch_trans_def, rsch_trans_def, asig_of_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    30
                             actions_def]
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    31
                   addcongs [let_weak_cong];
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    32
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    33
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    34
(* A lemma about restricting the action signature of the implementation
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    35
 * to that of the specification.
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    36
 ****************************)
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    37
goal Correctness.thy
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    38
 "a:externals(asig_of(restrict impl_ioa (externals spec_sig))) = \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    39
\ (case a of                  \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    40
\     S_msg(m) => True        \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    41
\   | R_msg(m) => True        \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    42
\   | S_pkt(pkt) => False  \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    43
\   | R_pkt(pkt) => False  \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    44
\   | S_ack(b) => False    \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    45
\   | R_ack(b) => False    \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    46
\   | C_m_s => False          \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    47
\   | C_m_r => False          \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    48
\   | C_r_s => False          \
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    49
\   | C_r_r(m) => False)";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    50
 by(simp_tac (ss addcongs [if_weak_cong] 
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    51
                 addsimps ([externals_def, restrict_def,
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    52
                            restrict_asig_def, Spec.sig_def])) 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    53
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    54
  by(Action.action.induct_tac "a" 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    55
  by(ALLGOALS(simp_tac (ss addsimps (actions_def :: set_lemmas))));
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    56
 (* 2 *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    57
  by (simp_tac (ss addsimps impl_ioas) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    58
  by (simp_tac (ss addsimps impl_asigs) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    59
  by (simp_tac (ss addsimps ([asig_of_par, asig_comp_def])) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    60
  by (simp_tac (!simpset delsimps [srch_ioa_thm, rsch_ioa_thm, Let_def]) 1); 
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    61
 (* 1 *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    62
  by (simp_tac (ss addsimps impl_ioas) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    63
  by (simp_tac (ss addsimps impl_asigs) 1); 
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    64
  by (simp_tac (ss addsimps ([asig_of_par, asig_comp_def])) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    65
  by (simp_tac (!simpset delsimps [srch_ioa_thm, rsch_ioa_thm, Let_def]) 1); 
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    66
qed "externals_lemma"; 
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    67
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    68
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    69
val sels = [Sender.sbit_def, Sender.sq_def, Sender.ssending_def,
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    70
            Receiver.rbit_def, Receiver.rq_def, Receiver.rsending_def];
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    71
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    72
(* Proof of correctness *)
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    73
goalw Correctness.thy [Spec.ioa_def, Solve.is_weak_pmap_def]
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    74
  "is_weak_pmap hom (restrict impl_ioa (externals spec_sig)) spec_ioa";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    75
by(simp_tac (ss delsimps [trans_def] addsimps 
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    76
             (Correctness.hom_def::[cancel_restrict,externals_lemma])) 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    77
br conjI 1;
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    78
by(simp_tac (ss addsimps impl_ioas) 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    79
br ballI 1;
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    80
bd CollectD 1;
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    81
by(asm_simp_tac (!simpset addsimps sels) 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    82
by(REPEAT(rtac allI 1));
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    83
br imp_conj_lemma 1;   (* from lemmas.ML *)
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    84
by(Action.action.induct_tac "a"  1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    85
by(asm_simp_tac (ss' setloop (split_tac [expand_if])) 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    86
by(forward_tac [inv4] 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    87
by(asm_full_simp_tac (ss addsimps [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    88
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    89
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    90
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    91
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    92
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    93
by(simp_tac ss' 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    94
by(simp_tac ss' 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    95
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
    96
by(asm_simp_tac ss' 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    97
by(forward_tac [inv4] 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    98
by(forward_tac [inv2] 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
    99
be disjE 1;
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   100
by(asm_simp_tac ss 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   101
by(asm_full_simp_tac (ss addsimps [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   102
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   103
by(asm_simp_tac ss' 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   104
by(forward_tac [inv2] 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   105
be disjE 1;
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   106
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   107
by(forward_tac [inv3] 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   108
by(case_tac "sq(sen(s))=[]" 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   109
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   110
by(asm_full_simp_tac ss' 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   111
by(fast_tac (HOL_cs addSDs [add_leD1 RS leD]) 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   112
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   113
by(case_tac "m = hd(sq(sen(s)))" 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   114
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   115
by(asm_full_simp_tac (ss addsimps 
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   116
                     [imp_ex_equiv,neq_Nil_conv,ex_all_equiv]) 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   117
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   118
by(asm_full_simp_tac ss 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   119
by(fast_tac (HOL_cs addSDs [add_leD1 RS leD]) 1);
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   120
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1051
diff changeset
   121
by(asm_full_simp_tac ss 1);
1051
4fcd0638e61d Directory example is now called NTP
nipkow
parents:
diff changeset
   122
result();