Delete_prop.thy
author chunhan
Thu, 09 May 2013 11:19:44 +0800
changeset 4 e9c5594d5963
parent 1 7d9c0ed02b56
child 5 0c209a3e2647
permissions -rw-r--r--
fixed bugs in deleted definition
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     1
theory Deleted_prop
4
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
     2
imports Main Flask Flask_type Init_prop Alive_prop Current_files_prop
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     3
begin
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     4
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     5
context flask begin
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     6
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     7
lemma deleted_cons_I: "deleted obj s \<Longrightarrow> deleted obj (e # s)"
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     8
by (case_tac e, auto)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
     9
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
    10
lemma not_deleted_cons_D: "\<not> deleted obj (e # s) \<Longrightarrow> \<not> deleted obj s" 
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
    11
by (auto dest:deleted_cons_I)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
    12
4
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    13
lemma not_deleted_init_file:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    14
  "\<lbrakk>\<not> deleted (O_file f) s; valid s; is_init_file f\<rbrakk> \<Longrightarrow> is_file s f"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    15
apply (induct s, simp add:is_init_file_prop1)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    16
apply (frule vd_cons, frule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    17
apply (case_tac a) prefer 6 apply (case_tac option)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    18
apply (auto simp:is_file_simps split:option.splits)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    19
done
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    20
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    21
lemma not_deleted_init_dir:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    22
  "\<lbrakk>\<not> deleted (O_dir f) s; valid s; is_init_dir f\<rbrakk> \<Longrightarrow> is_dir s f"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    23
apply (induct s, simp add:is_init_dir_prop1)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    24
apply (frule vd_cons, frule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    25
apply (case_tac a) prefer 6 apply (case_tac option)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    26
apply (auto simp:is_dir_simps split:option.splits)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    27
done
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    28
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    29
lemma not_deleted_init_proc:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    30
  "\<lbrakk>\<not> deleted (O_proc p) s; p \<in> init_procs\<rbrakk> \<Longrightarrow> p \<in> current_procs s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    31
apply (induct s, simp)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    32
by (case_tac a, auto)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    33
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    34
(**** ???*)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    35
lemma current_fd_imp_current_proc:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    36
  "\<lbrakk>fd \<in> current_proc_fds s p; valid s\<rbrakk> \<Longrightarrow> p \<in> current_procs s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    37
apply (induct s)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    38
apply (simp add:init_fds_of_proc_prop1)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    39
apply (frule vd_cons, drule vt_grant_os, case_tac a)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    40
by (auto split:if_splits option.splits)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    41
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    42
lemma not_deleted_init_fd_aux:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    43
  "\<lbrakk>\<not> deleted (O_fd p fd) s; valid s; fd \<in> init_fds_of_proc p\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    44
   \<Longrightarrow> fd \<in> current_proc_fds s p \<and> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    45
apply (induct s arbitrary: p, simp)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    46
apply (frule vd_cons, drule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    47
apply (case_tac a, auto dest:current_fd_imp_current_proc)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    48
done
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    49
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    50
lemma not_deleted_init_fd2:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    51
  "\<lbrakk>\<not> deleted (O_fd p fd) s; fd \<in> init_fds_of_proc p; valid s\<rbrakk> \<Longrightarrow> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    52
by (auto dest:not_deleted_init_fd_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    53
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    54
lemma not_deleted_init_fd1:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    55
  "\<lbrakk>\<not> deleted (O_fd p fd) s; valid s; fd \<in> init_fds_of_proc p\<rbrakk> \<Longrightarrow> fd \<in> current_proc_fds s p"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    56
by (auto dest:not_deleted_init_fd_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    57
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    58
lemma not_deleted_init_tcp_aux:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    59
  "\<lbrakk>\<not> deleted (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    60
   \<Longrightarrow> is_tcp_sock s (p,fd) \<and> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    61
apply (induct s arbitrary:p, simp add:is_init_tcp_sock_prop1)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    62
apply (frule vd_cons, frule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    63
apply (case_tac a) prefer 6 apply (case_tac option)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    64
by (auto simp:is_tcp_sock_simps split:option.splits t_socket_type.splits 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    65
         dest:is_tcp_sock_imp_curernt_proc)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    66
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    67
lemma not_deleted_init_tcp1:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    68
  "\<lbrakk>\<not> deleted (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    69
   \<Longrightarrow> is_tcp_sock s (p,fd)"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    70
by (auto dest:not_deleted_init_tcp_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    71
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    72
lemma not_deleted_init_tcp2:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    73
  "\<lbrakk>\<not> deleted (O_tcp_sock (p,fd)) s; valid s; is_init_tcp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    74
   \<Longrightarrow> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    75
by (auto dest:not_deleted_init_tcp_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    76
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    77
lemma not_deleted_init_udp_aux:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    78
  "\<lbrakk>\<not> deleted (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    79
   \<Longrightarrow> is_udp_sock s (p,fd) \<and> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    80
apply (induct s arbitrary:p, simp add:is_init_udp_sock_prop1)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    81
apply (frule vd_cons, frule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    82
apply (case_tac a) prefer 6 apply (case_tac option)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    83
by (auto simp:is_udp_sock_simps split:option.splits t_socket_type.splits 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    84
         dest:is_udp_sock_imp_curernt_proc)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    85
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    86
lemma not_deleted_init_udp1:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    87
  "\<lbrakk>\<not> deleted (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    88
   \<Longrightarrow> is_udp_sock s (p,fd)"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    89
by (auto dest:not_deleted_init_udp_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    90
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    91
lemma not_deleted_init_udp2:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    92
  "\<lbrakk>\<not> deleted (O_udp_sock (p,fd)) s; valid s; is_init_udp_sock (p,fd)\<rbrakk> 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    93
   \<Longrightarrow> \<not> deleted (O_proc p) s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    94
by (auto dest:not_deleted_init_udp_aux)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    95
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    96
lemma not_deleted_init_shm:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    97
  "\<lbrakk>\<not> deleted (O_shm h) s; h \<in> init_shms\<rbrakk> \<Longrightarrow> h \<in> current_shms s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    98
apply (induct s, simp)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
    99
by (case_tac a, auto)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   100
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   101
lemma not_deleted_init_msgq:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   102
  "\<lbrakk>\<not> deleted (O_msgq q) s; q \<in> init_msgqs\<rbrakk> \<Longrightarrow> q \<in> current_msgqs s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   103
apply (induct s, simp)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   104
by (case_tac a, auto)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   105
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   106
lemma current_msg_imp_current_msgq:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   107
  "\<lbrakk>m \<in> set (msgs_of_queue s q); valid s\<rbrakk> \<Longrightarrow> q \<in> current_msgqs s"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   108
apply (induct s)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   109
apply (simp add:init_msgs_valid)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   110
apply (frule vd_cons, drule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   111
apply (case_tac a, auto split:if_splits)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   112
done
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   113
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   114
lemma not_deleted_init_msg:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   115
  "\<lbrakk>\<not> deleted (O_msg q m) s; valid s; m \<in> set (init_msgs_of_queue q)\<rbrakk> \<Longrightarrow> m \<in> set (msgs_of_queue s q)"
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   116
apply (induct s, simp)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   117
apply (frule vd_cons, frule vt_grant_os)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   118
apply (case_tac a, auto dest:current_msg_imp_current_msgq)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   119
apply (case_tac "msgs_of_queue s q", simp+)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   120
done
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   121
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   122
lemma not_deleted_imp_alive:
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   123
  "\<lbrakk>\<not> deleted obj s; valid s; init_alive obj\<rbrakk> \<Longrightarrow> alive s obj"
4
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   124
apply (case_tac obj)
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   125
apply (auto dest!:not_deleted_init_msg not_deleted_init_file not_deleted_init_dir not_deleted_init_proc
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   126
  not_deleted_init_fd1 not_deleted_init_tcp1 not_deleted_init_udp1 not_deleted_init_shm 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   127
  not_deleted_init_msgq 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   128
           intro:is_file_in_current is_dir_in_current is_tcp_in_current is_udp_in_current 
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   129
  current_msg_imp_current_msgq)
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   130
done
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   131
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   132
lemma cons_app_simp_aux:
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   133
  "(a # b) @ c = a # (b @ c)" by auto
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   134
4
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   135
lemma not_deleted_imp_alive_app:
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   136
  "\<lbrakk>\<not> deleted obj (s'@s); alive s obj\<rbrakk> \<Longrightarrow> alive (s'@s) obj"
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   137
apply (induct s', simp, simp only:cons_app_simp_aux)
4
e9c5594d5963 fixed bugs in deleted definition
chunhan
parents: 1
diff changeset
   138
apply (frule not_deleted_cons_D, simp)
1
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   139
apply (case_tac a, case_tac [!] obj, auto)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   140
done
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   141
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   142
(*
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   143
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   144
lemma nodel_imp_un_deleted:
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   145
  "no_del_event s \<Longrightarrow> \<not> deleted obj s"
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   146
by (induct s, simp, case_tac a,auto)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   147
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   148
lemma nodel_exists_remains:
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   149
  "\<lbrakk>no_del_event (s'@s); exists s obj\<rbrakk> \<Longrightarrow> exists (s'@s) obj"
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   150
apply (drule_tac obj = obj in nodel_imp_un_deleted)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   151
by (simp add:not_deleted_imp_exists')
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   152
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   153
lemma nodel_imp_exists:
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   154
  "\<lbrakk>no_del_event s; exists [] obj\<rbrakk> \<Longrightarrow> exists s obj"
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   155
apply (drule_tac obj = obj in nodel_imp_un_deleted)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   156
by (simp add:not_deleted_imp_exists)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   157
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   158
lemma no_del_event_cons_D:
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   159
  "no_del_event (e # s) \<Longrightarrow> no_del_event s"
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   160
by (case_tac e, auto)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   161
*)
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   162
end
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   163
7d9c0ed02b56 thy files
chunhan
parents:
diff changeset
   164
end