src/HOL/Library/Going_To_Filter.thy
author wenzelm
Fri, 04 Jan 2019 23:22:53 +0100
changeset 69593 3dda49e08b9d
parent 68406 6beb45f6cf67
child 69597 ff784d5a5bfb
permissions -rw-r--r--
isabelle update -u control_cartouches;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     1
(*
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     2
  File:    Going_To_Filter.thy
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     3
  Author:  Manuel Eberl, TU München
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     4
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     5
  A filter describing the points x such that f(x) tends to some other filter.
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     6
*)
67409
060efe532189 prefer formal text;
wenzelm
parents: 66488
diff changeset
     7
060efe532189 prefer formal text;
wenzelm
parents: 66488
diff changeset
     8
section \<open>The \<open>going_to\<close> filter\<close>
060efe532189 prefer formal text;
wenzelm
parents: 66488
diff changeset
     9
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    10
theory Going_To_Filter
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    11
  imports Complex_Main
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    12
begin
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    13
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    14
definition going_to_within :: "('a \<Rightarrow> 'b) \<Rightarrow> 'b filter \<Rightarrow> 'a set \<Rightarrow> 'a filter"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    15
  ("(_)/ going'_to (_)/ within (_)" [1000,60,60] 60) where
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    16
  "f going_to F within A = inf (filtercomap f F) (principal A)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    17
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    18
abbreviation going_to :: "('a \<Rightarrow> 'b) \<Rightarrow> 'b filter \<Rightarrow> 'a filter"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    19
    (infix "going'_to" 60)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    20
    where "f going_to F \<equiv> f going_to F within UNIV"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    21
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    22
text \<open>
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    23
  The \<open>going_to\<close> filter is, in a sense, the opposite of \<^term>\<open>filtermap\<close>. 
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    24
  It corresponds to the intuition of, given a function $f: A \to B$ and a filter $F$ on the 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    25
  range of $B$, looking at such values of $x$ that $f(x)$ approaches $F$. This can be 
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    26
  written as \<^term>\<open>f going_to F\<close>.
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    27
  
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    28
  A classic example is the \<^term>\<open>at_infinity\<close> filter, which describes the neigbourhood
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    29
  of infinity (i.\,e.\ all values sufficiently far away from the zero). This can also be written
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    30
  as \<^term>\<open>norm going_to at_top\<close>.
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    31
67409
060efe532189 prefer formal text;
wenzelm
parents: 66488
diff changeset
    32
  Additionally, the \<open>going_to\<close> filter can be restricted with an optional `within' parameter.
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    33
  For instance, if one would would want to consider the filter of complex numbers near infinity
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    34
  that do not lie on the negative real line, one could write 
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    35
  \<^term>\<open>norm going_to at_top within - complex_of_real ` {..0}\<close>.
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    36
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    37
  A third, less mathematical example lies in the complexity analysis of algorithms.
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    38
  Suppose we wanted to say that an algorithm on lists takes $O(n^2)$ time where $n$ is 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    39
  the length of the input list. We can write this using the Landau symbols from the AFP,
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    40
  where the underlying filter is \<^term>\<open>length going_to at_top\<close>. If, on the other hand,
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    41
  we want to look the complexity of the algorithm on sorted lists, we could use the filter
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 68406
diff changeset
    42
  \<^term>\<open>length going_to at_top within {xs. sorted xs}\<close>.
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    43
\<close>
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    44
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    45
lemma going_to_def: "f going_to F = filtercomap f F"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    46
  by (simp add: going_to_within_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    47
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    48
lemma eventually_going_toI [intro]: 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    49
  assumes "eventually P F"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    50
  shows   "eventually (\<lambda>x. P (f x)) (f going_to F)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    51
  using assms by (auto simp: going_to_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    52
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    53
lemma filterlim_going_toI_weak [intro]: "filterlim f F (f going_to F within A)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    54
  unfolding going_to_within_def
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    55
  by (meson filterlim_filtercomap filterlim_iff inf_le1 le_filter_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    56
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    57
lemma going_to_mono: "F \<le> G \<Longrightarrow> A \<subseteq> B \<Longrightarrow> f going_to F within A \<le> f going_to G within B"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    58
  unfolding going_to_within_def by (intro inf_mono filtercomap_mono) simp_all
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    59
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    60
lemma going_to_inf: 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    61
  "f going_to (inf F G) within A = inf (f going_to F within A) (f going_to G within A)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    62
  by (simp add: going_to_within_def filtercomap_inf inf_assoc inf_commute inf_left_commute)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    63
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    64
lemma going_to_sup: 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    65
  "f going_to (sup F G) within A \<ge> sup (f going_to F within A) (f going_to G within A)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    66
  by (auto simp: going_to_within_def intro!: inf.coboundedI1 filtercomap_sup filtercomap_mono)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    67
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    68
lemma going_to_top [simp]: "f going_to top within A = principal A"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    69
  by (simp add: going_to_within_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    70
    
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    71
lemma going_to_bot [simp]: "f going_to bot within A = bot"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    72
  by (simp add: going_to_within_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    73
    
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    74
lemma going_to_principal: 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    75
  "f going_to principal A within B = principal (f -` A \<inter> B)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    76
  by (simp add: going_to_within_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    77
    
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    78
lemma going_to_within_empty [simp]: "f going_to F within {} = bot"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    79
  by (simp add: going_to_within_def)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    80
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    81
lemma going_to_within_union [simp]: 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    82
  "f going_to F within (A \<union> B) = sup (f going_to F within A) (f going_to F within B)"
68406
6beb45f6cf67 utilize 'flip'
nipkow
parents: 67409
diff changeset
    83
  by (simp add: going_to_within_def flip: inf_sup_distrib1)
66488
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    84
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    85
lemma eventually_going_to_at_top_linorder:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    86
  fixes f :: "'a \<Rightarrow> 'b :: linorder"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    87
  shows "eventually P (f going_to at_top within A) \<longleftrightarrow> (\<exists>C. \<forall>x\<in>A. f x \<ge> C \<longrightarrow> P x)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    88
  unfolding going_to_within_def eventually_filtercomap 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    89
    eventually_inf_principal eventually_at_top_linorder by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    90
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    91
lemma eventually_going_to_at_bot_linorder:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    92
  fixes f :: "'a \<Rightarrow> 'b :: linorder"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    93
  shows "eventually P (f going_to at_bot within A) \<longleftrightarrow> (\<exists>C. \<forall>x\<in>A. f x \<le> C \<longrightarrow> P x)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    94
  unfolding going_to_within_def eventually_filtercomap 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    95
    eventually_inf_principal eventually_at_bot_linorder by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    96
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    97
lemma eventually_going_to_at_top_dense:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    98
  fixes f :: "'a \<Rightarrow> 'b :: {linorder,no_top}"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    99
  shows "eventually P (f going_to at_top within A) \<longleftrightarrow> (\<exists>C. \<forall>x\<in>A. f x > C \<longrightarrow> P x)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   100
  unfolding going_to_within_def eventually_filtercomap 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   101
    eventually_inf_principal eventually_at_top_dense by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   102
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   103
lemma eventually_going_to_at_bot_dense:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   104
  fixes f :: "'a \<Rightarrow> 'b :: {linorder,no_bot}"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   105
  shows "eventually P (f going_to at_bot within A) \<longleftrightarrow> (\<exists>C. \<forall>x\<in>A. f x < C \<longrightarrow> P x)"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   106
  unfolding going_to_within_def eventually_filtercomap 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   107
    eventually_inf_principal eventually_at_bot_dense by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   108
               
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   109
lemma eventually_going_to_nhds:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   110
  "eventually P (f going_to nhds a within A) \<longleftrightarrow> 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   111
     (\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>A. f x \<in> S \<longrightarrow> P x))"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   112
  unfolding going_to_within_def eventually_filtercomap eventually_inf_principal
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   113
    eventually_nhds by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   114
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   115
lemma eventually_going_to_at:
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   116
  "eventually P (f going_to (at a within B) within A) \<longleftrightarrow> 
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   117
     (\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>A. f x \<in> B \<inter> S - {a} \<longrightarrow> P x))"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   118
  unfolding at_within_def going_to_inf eventually_inf_principal
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   119
            eventually_going_to_nhds going_to_principal by fast
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   120
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   121
lemma norm_going_to_at_top_eq: "norm going_to at_top = at_infinity"
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   122
  by (simp add: eventually_at_infinity eventually_going_to_at_top_linorder filter_eq_iff)
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   123
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   124
lemmas at_infinity_altdef = norm_going_to_at_top_eq [symmetric]
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   125
9d83e8fe3de3 HOL-Library: going_to filter
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   126
end