src/HOL/SPARK/Manual/Complex_Types.thy
author blanchet
Mon, 01 Sep 2014 18:42:02 +0200
changeset 58130 5e9170812356
parent 56798 939e88e79724
child 58310 91ea607a34d8
permissions -rw-r--r--
ported to use new-style datatypes * * * compile
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45044
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     1
theory Complex_Types
58130
5e9170812356 ported to use new-style datatypes
blanchet
parents: 56798
diff changeset
     2
imports "../SPARK"
45044
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     3
begin
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     4
58130
5e9170812356 ported to use new-style datatypes
blanchet
parents: 56798
diff changeset
     5
datatype_new day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
45044
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     6
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     7
record two_fields =
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     8
  Field1 :: "int \<times> day \<Rightarrow> int"
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
     9
  Field2 :: int
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    10
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    11
spark_types
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    12
  complex_types__day = day
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    13
  complex_types__record_type = two_fields
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    14
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    15
definition
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    16
  initialized3 :: "(int \<times> day \<Rightarrow> int) \<Rightarrow> int \<Rightarrow> int \<Rightarrow> bool" where
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    17
  "initialized3 A i k = (\<forall>j\<in>{0..<k}. A (i, val j) = 0)"
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    18
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    19
definition
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    20
  initialized2 :: "(int \<times> day \<Rightarrow> int) \<Rightarrow> int \<Rightarrow> bool" where
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    21
  "initialized2 A i = (\<forall>j\<in>{0..<i}. initialized3 A j 7)"
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    22
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    23
definition
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    24
  initialized :: "(int \<Rightarrow> two_fields) \<Rightarrow> int \<Rightarrow> bool" where
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    25
  "initialized A i = (\<forall>j\<in>{0..<i}.
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    26
     initialized2 (Field1 (A j)) 10 \<and> Field2 (A j) = 0)"
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    27
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    28
spark_proof_functions
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    29
  complex_types__initialized = initialized
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    30
  complex_types__initialized2 = initialized2
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    31
  complex_types__initialized3 = initialized3
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    32
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    33
(*<*)
56798
939e88e79724 Discontinued old spark_open; spark_open_siv is now spark_open
berghofe
parents: 45044
diff changeset
    34
spark_open "complex_types_app/initialize"
45044
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    35
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    36
spark_vc procedure_initialize_1
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    37
  by (simp add: initialized_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    38
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    39
spark_vc procedure_initialize_2
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    40
proof -
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    41
  from
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    42
    `initialized a loop__1__i`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    43
    `initialized2 (Field1 (a loop__1__i)) 9`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    44
    `initialized3 (Field1 (a loop__1__i)) 9 (pos Sun)`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    45
  show ?C1
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    46
    apply (auto simp add: initialized_def initialized2_def initialized3_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    47
    apply (case_tac "j = 9")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    48
    apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    49
    apply (case_tac "ja = 6")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    50
    apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    51
    done
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    52
  from H5
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    53
  show ?C2 by simp
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    54
qed
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    55
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    56
spark_vc procedure_initialize_3
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    57
  by (simp add: initialized2_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    58
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    59
spark_vc procedure_initialize_4
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    60
proof -
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    61
  from `initialized a loop__1__i`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    62
  show ?C1 by (simp add: initialized_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    63
  from
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    64
    `initialized2 (Field1 (a loop__1__i)) loop__2__j`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    65
    `initialized3 (Field1 (a loop__1__i)) loop__2__j (pos Sun)`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    66
  show ?C2
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    67
    apply (auto simp add: initialized2_def initialized3_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    68
    apply (case_tac "j = loop__2__j")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    69
    apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    70
    apply (case_tac "ja = 6")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    71
    apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    72
    done
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    73
  from H5
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    74
  show ?C3 by simp
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    75
qed
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    76
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    77
spark_vc procedure_initialize_5
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    78
  by (simp add: initialized3_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    79
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    80
spark_vc procedure_initialize_6
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    81
proof -
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    82
  from `initialized a loop__1__i`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    83
  show ?C1 by (simp add: initialized_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    84
  from `initialized2 (Field1 (a loop__1__i)) loop__2__j`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    85
  show ?C2 by (simp add: initialized2_def initialized3_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    86
  from
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    87
    `initialized3 (Field1 (a loop__1__i)) loop__2__j (pos loop__3__k)`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    88
    `loop__3__k < Sun`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    89
    rangeI [of pos loop__3__k]
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    90
  show ?C3
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    91
    apply (auto simp add: initialized3_def succ_def less_pos pos_val range_pos)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    92
    apply (case_tac "j = pos loop__3__k")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    93
    apply (auto simp add: val_pos)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    94
    done
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    95
  from H5
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    96
  show ?C4 by simp
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    97
qed
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    98
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    99
spark_vc procedure_initialize_9
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   100
  using
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   101
    `initialized a 9`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   102
    `initialized2 (Field1 (a 9)) 9`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   103
    `initialized3 (Field1 (a 9)) 9 (pos Sun)`
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   104
  apply (auto simp add: initialized_def initialized2_def initialized3_def)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   105
  apply (case_tac "j = 9")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   106
  apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   107
  apply (case_tac "ja = 6")
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   108
  apply auto
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   109
  done
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   110
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   111
spark_end
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   112
(*>*)
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   113
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
   114
end