src/HOL/SPARK/Manual/Complex_Types.thy
author paulson <lp15@cam.ac.uk>
Mon, 13 May 2024 22:42:40 +0100
changeset 80177 1478555580af
parent 69605 a96320074298
permissions -rw-r--r--
More binomial material
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
66992
69673025292e less global theories -- avoid confusion about special cases;
wenzelm
parents: 66453
diff changeset
     2
imports "HOL-SPARK.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
58310
91ea607a34d8 updated news
blanchet
parents: 58130
diff changeset
     5
datatype 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
(*<*)
69605
a96320074298 isabelle update -u path_cartouches;
wenzelm
parents: 66992
diff changeset
    34
spark_open \<open>complex_types_app/initialize\<close>
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
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    42
    \<open>initialized a loop__1__i\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    43
    \<open>initialized2 (Field1 (a loop__1__i)) 9\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    44
    \<open>initialized3 (Field1 (a loop__1__i)) 9 (pos Sun)\<close>
45044
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 -
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    61
  from \<open>initialized a loop__1__i\<close>
45044
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
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    64
    \<open>initialized2 (Field1 (a loop__1__i)) loop__2__j\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    65
    \<open>initialized3 (Field1 (a loop__1__i)) loop__2__j (pos Sun)\<close>
45044
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 -
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    82
  from \<open>initialized a loop__1__i\<close>
45044
2fae15f8984d Added documentation for HOL-SPARK
berghofe
parents:
diff changeset
    83
  show ?C1 by (simp add: initialized_def)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    84
  from \<open>initialized2 (Field1 (a loop__1__i)) loop__2__j\<close>
45044
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
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    87
    \<open>initialized3 (Field1 (a loop__1__i)) loop__2__j (pos loop__3__k)\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
    88
    \<open>loop__3__k < Sun\<close>
45044
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
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
   101
    \<open>initialized a 9\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
   102
    \<open>initialized2 (Field1 (a 9)) 9\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58310
diff changeset
   103
    \<open>initialized3 (Field1 (a 9)) 9 (pos Sun)\<close>
45044
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