src/HOL/IMPP/EvenOdd.thy
author oheimb
Mon, 31 Jan 2000 18:30:35 +0100
changeset 8177 e59e93ad85eb
child 8791 50b650d19641
permissions -rw-r--r--
added IMPP to HOL
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8177
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     1
(*  Title:      HOL/IMPP/EvenOdd.thy
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     2
    ID:         $Id$
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     3
    Author:     David von Oheimb
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     4
    Copyright   1999 TUM
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     5
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     6
Example of mutually recursive procedures verified with Hoare logic
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     7
*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     8
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     9
EvenOdd = Misc +
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    10
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    11
constdefs even :: nat => bool
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    12
  "even n == 2 dvd n"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    13
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    14
consts
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    15
  Even, Odd :: pname
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    16
rules 
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    17
  Even_neq_Odd "Even ~= Odd"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    18
  Arg_neq_Res  "Arg  ~= Res"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    19
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    20
constdefs
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    21
  evn :: com
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    22
 "evn == IF (%s. s<Arg>=0)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    23
         THEN Loc Res:==(%s. 0)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    24
         ELSE(Loc Res:=CALL Odd(%s. s<Arg> - 1);;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    25
              Loc Arg:=CALL Odd(%s. s<Arg> - 1);;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    26
              Loc Res:==(%s. s<Res> * s<Arg>))"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    27
  odd :: com
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    28
 "odd == IF (%s. s<Arg>=0)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    29
         THEN Loc Res:==(%s. 1)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    30
         ELSE(Loc Res:=CALL Even (%s. s<Arg> -1))"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    31
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    32
defs
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    33
  bodies_def "bodies == [(Even,evn),(Odd,odd)]"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    34
  
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    35
consts
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    36
  Z_eq_Arg_plus   :: nat => nat assn ("Z=Arg+_" [50]50)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    37
 "even_Z=(Res=0)" ::        nat assn ("Res'_ok")
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    38
defs
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    39
  Z_eq_Arg_plus_def "Z=Arg+n == %Z s.      Z =  s<Arg>+n"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    40
  Res_ok_def       "Res_ok   == %Z s. even Z = (s<Res>=0)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    41
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    42
end