src/HOL/SPARK/SPARK.thy
author haftmann
Thu, 18 Jun 2020 09:07:30 +0000
changeset 71954 13bb3f5cdc5b
parent 70185 ac1706cdde25
child 72488 ee659bca8955
permissions -rw-r--r--
pragmatically ruled out word types of length zero: a bit string with no bits is not bit string at all
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     1
(*  Title:      HOL/SPARK/SPARK.thy
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     2
    Author:     Stefan Berghofer
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     3
    Copyright:  secunet Security Networks AG
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     4
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     5
Declaration of proof functions for SPARK/Ada verification environment.
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     6
*)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     7
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     8
theory SPARK
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     9
imports SPARK_Setup
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    10
begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    11
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 54427
diff changeset
    12
text \<open>Bitwise logical operators\<close>
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    13
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    14
spark_proof_functions
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
    15
  bit__and (integer, integer) : integer = "(AND)"
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
    16
  bit__or (integer, integer) : integer = "(OR)"
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
    17
  bit__xor (integer, integer) : integer = "(XOR)"
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    18
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    19
lemmas [simp] =
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    20
  OR_upper [of _ 8, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    21
  OR_upper [of _ 8, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    22
  OR_upper [of _ 16, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    23
  OR_upper [of _ 16, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    24
  OR_upper [of _ 32, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    25
  OR_upper [of _ 32, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    26
  OR_upper [of _ 64, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    27
  OR_upper [of _ 64, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    28
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    29
lemmas [simp] =
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    30
  XOR_upper [of _ 8, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    31
  XOR_upper [of _ 8, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    32
  XOR_upper [of _ 16, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    33
  XOR_upper [of _ 16, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    34
  XOR_upper [of _ 32, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    35
  XOR_upper [of _ 32, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    36
  XOR_upper [of _ 64, simplified zle_diff1_eq [symmetric], simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    37
  XOR_upper [of _ 64, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    38
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    39
lemma bit_not_spark_eq:
71954
13bb3f5cdc5b pragmatically ruled out word types of length zero: a bit string with no bits is not bit string at all
haftmann
parents: 70185
diff changeset
    40
  "NOT (word_of_int x :: ('a::len) word) =
70185
ac1706cdde25 clarified notation
haftmann
parents: 67399
diff changeset
    41
  word_of_int (2 ^ LENGTH('a) - 1 - x)"
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    42
proof -
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    43
  have "word_of_int x + NOT (word_of_int x) =
70185
ac1706cdde25 clarified notation
haftmann
parents: 67399
diff changeset
    44
    word_of_int x + (word_of_int (2 ^ LENGTH('a) - 1 - x)::'a word)"
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    45
    by (simp only: bwsimps bin_add_not Min_def)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    46
      (simp add: word_of_int_hom_syms word_of_int_2p_len)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    47
  then show ?thesis by (rule add_left_imp_eq)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    48
qed
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    49
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    50
lemmas [simp] =
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    51
  bit_not_spark_eq [where 'a=8, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    52
  bit_not_spark_eq [where 'a=16, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    53
  bit_not_spark_eq [where 'a=32, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    54
  bit_not_spark_eq [where 'a=64, simplified]
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    55
50788
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    56
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 54427
diff changeset
    57
text \<open>Minimum and maximum\<close>
50788
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    58
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    59
spark_proof_functions
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    60
  integer__min = "min :: int \<Rightarrow> int \<Rightarrow> int"
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    61
  integer__max = "max :: int \<Rightarrow> int \<Rightarrow> int"
fec14e8fefb8 Added proof function declarations for min and max
berghofe
parents: 47108
diff changeset
    62
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    63
end
54427
783861a66a60 separated comparision on bit operations into separate theory
haftmann
parents: 50788
diff changeset
    64