src/HOL/TLA/Inc/Inc.thy
author wenzelm
Fri, 05 Oct 2001 23:58:52 +0200
changeset 11703 6e5de8d4290a
parent 9517 f58863b1406a
child 17309 c43ed29bd197
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     1
(* 
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 6255
diff changeset
     2
    File:        TLA/Inc/Inc.thy
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     3
    Author:      Stephan Merz
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Copyright:   1997 University of Munich
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
    Theory Name: Inc
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
    Logic Image: TLA
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     8
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
    Lamport's "increment" example.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
11703
wenzelm
parents: 9517
diff changeset
    12
Inc  =  TLA +
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    13
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    14
(* program counter as an enumeration type *)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    15
datatype pcount = a | b | g
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    16
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
consts
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    18
  (* program variables *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    19
  x,y,sem                 :: nat stfun
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    20
  pc1,pc2                 :: pcount stfun
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    21
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    22
  (* names of actions and predicates *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    23
  M1,M2,N1,N2                             :: action
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    24
  alpha1,alpha2,beta1,beta2,gamma1,gamma2 :: action
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    25
  InitPhi, InitPsi                        :: stpred
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    26
  PsiInv,PsiInv1,PsiInv2,PsiInv3          :: stpred
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
  (* temporal formulas *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    29
  Phi, Psi                                :: temporal
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    30
  
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
rules
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
  (* the "base" variables, required to compute enabledness predicates *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    33
  Inc_base      "basevars (x, y, sem, pc1, pc2)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    34
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    35
  (* definitions for high-level program *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    36
  InitPhi_def   "InitPhi == PRED x = # 0 & y = # 0"
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 6255
diff changeset
    37
  M1_def        "M1      == ACT  x$ = Suc<$x> & y$ = $y"
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 6255
diff changeset
    38
  M2_def        "M2      == ACT  y$ = Suc<$y> & x$ = $x"
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    39
  Phi_def       "Phi     == TEMP Init InitPhi & [][M1 | M2]_(x,y)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    40
                                 & WF(M1)_(x,y) & WF(M2)_(x,y)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    41
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    42
  (* definitions for low-level program *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    43
  InitPsi_def   "InitPsi == PRED pc1 = #a & pc2 = #a
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    44
                                 & x = # 0 & y = # 0 & sem = # 1"
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 6255
diff changeset
    45
  alpha1_def    "alpha1  == ACT  $pc1 = #a & pc1$ = #b & $sem = Suc<sem$> 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    46
                                 & unchanged(x,y,pc2)"
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 6255
diff changeset
    47
  alpha2_def    "alpha2  == ACT  $pc2 = #a & pc2$ = #b & $sem = Suc<sem$>
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    48
                                 & unchanged(x,y,pc1)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    49
  beta1_def     "beta1   == ACT  $pc1 = #b & pc1$ = #g & x$ = Suc<$x>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    50
                                 & unchanged(y,sem,pc2)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    51
  beta2_def     "beta2   == ACT  $pc2 = #b & pc2$ = #g & y$ = Suc<$y>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    52
                                 & unchanged(x,sem,pc1)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    53
  gamma1_def    "gamma1  == ACT  $pc1 = #g & pc1$ = #a & sem$ = Suc<$sem>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    54
                                 & unchanged(x,y,pc2)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    55
  gamma2_def    "gamma2  == ACT  $pc2 = #g & pc2$ = #a & sem$ = Suc<$sem>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    56
                                 & unchanged(x,y,pc1)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    57
  N1_def        "N1      == ACT  (alpha1 | beta1 | gamma1)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    58
  N2_def        "N2      == ACT  (alpha2 | beta2 | gamma2)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    59
  Psi_def       "Psi     == TEMP Init InitPsi
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    60
                               & [][N1 | N2]_(x,y,sem,pc1,pc2)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    61
                               & SF(N1)_(x,y,sem,pc1,pc2)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    62
                               & SF(N2)_(x,y,sem,pc1,pc2)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    63
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    64
  PsiInv1_def  "PsiInv1  == PRED sem = # 1 & pc1 = #a & pc2 = #a"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    65
  PsiInv2_def  "PsiInv2  == PRED sem = # 0 & pc1 = #a & (pc2 = #b | pc2 = #g)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    66
  PsiInv3_def  "PsiInv3  == PRED sem = # 0 & pc2 = #a & (pc1 = #b | pc1 = #g)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    67
  PsiInv_def   "PsiInv   == PRED (PsiInv1 | PsiInv2 | PsiInv3)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    68
  
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    69
end