src/HOL/Analysis/Sparse_In.thy
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 82518 da14e77a48b2
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     1
theory Sparse_In 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     2
  imports Homotopy
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     3
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
begin
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     6
(*TODO: can we remove the definition isolated_points_of from 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
  HOL-Complex_Analysis.Complex_Singularities?*)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
(*TODO: more lemmas between sparse_in and discrete?*)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
subsection \<open>A set of points sparse in another set\<close>
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
definition sparse_in:: "'a :: topological_space set \<Rightarrow> 'a set \<Rightarrow> bool"
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80768
diff changeset
    13
    (infixl \<open>(sparse'_in)\<close> 50)
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
  where
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    15
  "pts sparse_in A = (\<forall>x\<in>A. \<exists>B. x\<in>B \<and> open B \<and> (\<forall>y\<in>B. \<not> y islimpt pts))"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
lemma sparse_in_empty[simp]: "{} sparse_in A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
  by (meson UNIV_I empty_iff islimpt_def open_UNIV sparse_in_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    19
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
lemma finite_imp_sparse:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
  fixes pts::"'a:: t1_space set"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
  shows "finite pts \<Longrightarrow> pts sparse_in S"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
  by (meson UNIV_I islimpt_finite open_UNIV sparse_in_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
lemma sparse_in_singleton[simp]: "{x} sparse_in (A::'a:: t1_space set)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
  by (rule finite_imp_sparse) auto
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
lemma sparse_in_ball_def:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
  "pts sparse_in D \<longleftrightarrow> (\<forall>x\<in>D. \<exists>e>0. \<forall>y\<in>ball x e. \<not> y islimpt pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
  unfolding sparse_in_def
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
  by (meson Elementary_Metric_Spaces.open_ball open_contains_ball_eq subset_eq)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
lemma get_sparse_in_cover:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
  assumes "pts sparse_in A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
  obtains B where "open B" "A \<subseteq> B" "\<forall>y\<in>B. \<not> y islimpt pts"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
proof -
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
  obtain getB where getB:"x\<in>getB x" "open (getB x)" "\<forall>y\<in>getB x. \<not> y islimpt pts"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
    if "x\<in>A" for x
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
    using assms(1) unfolding sparse_in_def by metis
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
  define B where "B = Union (getB ` A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
  have "open B" unfolding B_def using getB(2) by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
  moreover have "A \<subseteq> B" unfolding B_def using getB(1) by auto
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
  moreover have "\<forall>y\<in>B. \<not> y islimpt pts" unfolding B_def by (meson UN_iff getB(3))
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
  ultimately show ?thesis using that by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
qed
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
lemma sparse_in_open:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
  assumes "open A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
  shows "pts sparse_in A \<longleftrightarrow> (\<forall>y\<in>A. \<not>y islimpt pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
  using assms unfolding sparse_in_def by auto
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
lemma sparse_in_not_in:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
  assumes "pts sparse_in A" "x\<in>A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
  obtains B where "open B" "x\<in>B" "\<forall>y\<in>B. y\<noteq>x \<longrightarrow> y\<notin>pts"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
  using assms unfolding sparse_in_def
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
  by (metis islimptI)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
lemma sparse_in_subset:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
  assumes "pts sparse_in A" "B \<subseteq> A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
  shows "pts sparse_in B"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
  using assms unfolding sparse_in_def  by auto
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
lemma sparse_in_subset2:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
  assumes "pts1 sparse_in D" "pts2 \<subseteq> pts1"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
  shows "pts2 sparse_in D"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
  by (meson assms(1) assms(2) islimpt_subset sparse_in_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
lemma sparse_in_union:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
  assumes "pts1 sparse_in D1" "pts2 sparse_in D1" 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
  shows "(pts1 \<union> pts2) sparse_in (D1 \<inter> D2)" 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
  using assms unfolding sparse_in_def islimpt_Un
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
  by (metis Int_iff open_Int)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
82518
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    74
lemma sparse_in_union': "A sparse_in C \<Longrightarrow> B sparse_in C \<Longrightarrow> A \<union> B sparse_in C"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    75
  using sparse_in_union[of A C B C] by simp
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    76
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    77
lemma sparse_in_Union_finite:
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    78
  assumes "(\<And>A'. A' \<in> A \<Longrightarrow> A' sparse_in B)" "finite A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    79
  shows   "\<Union>A sparse_in B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    80
  using assms(2,1) by (induction rule: finite_induct) (auto intro!: sparse_in_union')
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    81
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    82
lemma sparse_in_UN_finite:
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    83
  assumes "(\<And>x. x \<in> A \<Longrightarrow> f x sparse_in B)" "finite A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    84
  shows   "(\<Union>x\<in>A. f x) sparse_in B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    85
  by (rule sparse_in_Union_finite) (use assms in auto)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
    86
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
lemma sparse_in_compact_finite:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
  assumes "pts sparse_in A" "compact A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
  shows "finite (A \<inter> pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
  apply (rule finite_not_islimpt_in_compact[OF \<open>compact A\<close>])
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
  using assms unfolding sparse_in_def by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
lemma sparse_imp_closedin_pts:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
  assumes "pts sparse_in D" 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
  shows "closedin (top_of_set D) (D \<inter> pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
  using assms islimpt_subset unfolding closedin_limpt sparse_in_def 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
  by fastforce
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
lemma open_diff_sparse_pts:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
  assumes "open D" "pts sparse_in D" 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
  shows "open (D - pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
  using assms sparse_imp_closedin_pts
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
  by (metis Diff_Diff_Int Diff_cancel Diff_eq_empty_iff Diff_subset 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
      closedin_def double_diff openin_open_eq topspace_euclidean_subtopology)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
82137
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   106
lemma sparse_in_UNIV_imp_closed: "X sparse_in UNIV \<Longrightarrow> closed X"
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   107
  by (simp add: Compl_eq_Diff_UNIV closed_open open_diff_sparse_pts)
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   108
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   109
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
lemma sparse_imp_countable:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  fixes D::"'a ::euclidean_space set"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
  assumes  "open D" "pts sparse_in D"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
  shows "countable (D \<inter> pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
proof -
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
  obtain K :: "nat \<Rightarrow> 'a ::euclidean_space set"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
      where K: "D = (\<Union>n. K n)" "\<And>n. compact (K n)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
    using assms  by (metis open_Union_compact_subsets)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  then have "D\<inter> pts = (\<Union>n. K n \<inter> pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
    by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
  moreover have "\<And>n. finite (K n \<inter> pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
    by (metis K(1) K(2) Union_iff assms(2) rangeI 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
        sparse_in_compact_finite sparse_in_subset subsetI)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
  ultimately show ?thesis
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
    by (metis countableI_type countable_UN countable_finite)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
qed
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
lemma sparse_imp_connected:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
  fixes D::"'a ::euclidean_space set"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
  assumes  "2 \<le> DIM ('a)"  "connected D" "open D" "pts sparse_in D"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
  shows "connected (D - pts)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
  using assms
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
  by (metis Diff_Compl Diff_Diff_Int Diff_eq connected_open_diff_countable 
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
      sparse_imp_countable)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
lemma sparse_in_eventually_iff:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
  assumes "open A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
  shows "pts sparse_in A \<longleftrightarrow> (\<forall>y\<in>A. (\<forall>\<^sub>F y in at y. y \<notin> pts))"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
  unfolding sparse_in_open[OF \<open>open A\<close>] islimpt_iff_eventually
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
  by simp
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
lemma get_sparse_from_eventually:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
  fixes A::"'a::topological_space set"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
  assumes "\<forall>x\<in>A. \<forall>\<^sub>F z in at x. P z" "open A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
  obtains pts where "pts sparse_in A" "\<forall>x\<in>A - pts. P x"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
proof -
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
  define pts::"'a set" where "pts={x. \<not>P x}"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
  have "pts sparse_in A" "\<forall>x\<in>A - pts. P x"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
    unfolding sparse_in_eventually_iff[OF \<open>open A\<close>] pts_def
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
    using assms(1) by simp_all
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
  then show ?thesis using that by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
qed
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
lemma sparse_disjoint:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
  assumes "pts \<inter> A = {}" "open A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
  shows "pts sparse_in A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
  using assms unfolding sparse_in_eventually_iff[OF \<open>open A\<close>]
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
      eventually_at_topological
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
  by blast
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
82518
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   160
lemma sparse_in_translate:
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   161
  fixes A B :: "'a :: real_normed_vector set"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   162
  assumes "A sparse_in B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   163
  shows   "(+) c ` A sparse_in (+) c ` B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   164
  unfolding sparse_in_def
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   165
proof safe
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   166
  fix x assume "x \<in> B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   167
  from get_sparse_in_cover[OF assms] obtain B' where B': "open B'" "B \<subseteq> B'" "\<forall>y\<in>B'. \<not>y islimpt A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   168
    by blast
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   169
  have "c + x \<in> (+) c ` B'" "open ((+) c ` B')"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   170
    using B' \<open>x \<in> B\<close> by (auto intro: open_translation)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   171
  moreover have "\<forall>y\<in>(+) c ` B'. \<not>y islimpt ((+) c ` A)"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   172
  proof safe
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   173
    fix y assume y: "y \<in> B'" "c + y islimpt (+) c ` A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   174
    have "(-c) + (c + y) islimpt (+) (-c) ` (+) c ` A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   175
      by (intro islimpt_isCont_image[OF y(2)] continuous_intros)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   176
         (auto simp: algebra_simps eventually_at_topological)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   177
    hence "y islimpt A"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   178
      by (simp add: image_image)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   179
    with y(1) B' show False
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   180
      by blast
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   181
  qed
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   182
  ultimately show "\<exists>B. c + x \<in> B \<and> open B \<and> (\<forall>y\<in>B. \<not> y islimpt (+) c ` A)"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   183
    by metis
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   184
qed
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   185
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   186
lemma sparse_in_translate':
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   187
  fixes A B :: "'a :: real_normed_vector set"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   188
  assumes "A sparse_in B" "C \<subseteq> (+) c ` B"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   189
  shows   "(+) c ` A sparse_in C"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   190
  using sparse_in_translate[OF assms(1)] assms(2) by (rule sparse_in_subset)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   191
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   192
lemma sparse_in_translate_UNIV:
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   193
  fixes A B :: "'a :: real_normed_vector set"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   194
  assumes "A sparse_in UNIV"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   195
  shows   "(+) c ` A sparse_in UNIV"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   196
  using assms by (rule sparse_in_translate') auto
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   197
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
subsection \<open>Co-sparseness filter\<close>
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
text \<open>
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
  The co-sparseness filter allows us to talk about properties that hold on a given set except
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
  for an ``insignificant'' number of points that are sparse in that set.
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
\<close>
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
lemma is_filter_cosparse: "is_filter (\<lambda>P. {x. \<not>P x} sparse_in A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
proof (standard, goal_cases)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
  case 1
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
  thus ?case by auto
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
next
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
  case (2 P Q)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
  from sparse_in_union[OF this, of UNIV] show ?case
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
    by (auto simp: Un_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
next
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
  case (3 P Q)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
  from 3(2) show ?case
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
    by (rule sparse_in_subset2) (use 3(1) in auto)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
qed  
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
definition cosparse :: "'a set \<Rightarrow> 'a :: topological_space filter" where
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
 "cosparse A = Abs_filter (\<lambda>P. {x. \<not>P x} sparse_in A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
syntax
81097
6c81cdca5b82 more inner syntax markup: HOL-Analysis;
wenzelm
parents: 80914
diff changeset
   223
  "_eventually_cosparse" :: "pttrn => 'a set => bool => bool"  (\<open>(\<open>indent=3 notation=\<open>binder \<forall>\<approx>\<close>\<close>\<forall>\<^sub>\<approx>_\<in>_./ _)\<close> [0, 0, 10] 10)
80768
c7723cc15de8 more markup for syntax consts;
wenzelm
parents: 79857
diff changeset
   224
syntax_consts
c7723cc15de8 more markup for syntax consts;
wenzelm
parents: 79857
diff changeset
   225
  "_eventually_cosparse" == eventually
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
translations
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
  "\<forall>\<^sub>\<approx>x\<in>A. P" == "CONST eventually (\<lambda>x. P) (CONST cosparse A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
syntax
82518
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   230
  "_eventually_cosparse_UNIV" :: "pttrn => bool => bool"  (\<open>(\<open>indent=3 notation=\<open>binder \<forall>\<approx>\<close>\<close>\<forall>\<^sub>\<approx>_./ _)\<close> [0, 10] 10)
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   231
syntax_consts
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   232
  "_eventually_cosparse_UNIV" == eventually
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   233
translations
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   234
  "\<forall>\<^sub>\<approx>x. P" == "CONST eventually (\<lambda>x. P) (CONST cosparse CONST UNIV)"
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   235
da14e77a48b2 lots of lemmas for HOL, HOL-{Complex_}Analysis, HOL-Number_Theory
Manuel Eberl <manuel@pruvisto.org>
parents: 82137
diff changeset
   236
syntax
81097
6c81cdca5b82 more inner syntax markup: HOL-Analysis;
wenzelm
parents: 80914
diff changeset
   237
  "_qeventually_cosparse" :: "pttrn \<Rightarrow> bool \<Rightarrow> 'a \<Rightarrow> 'a"  (\<open>(\<open>indent=3 notation=\<open>binder \<forall>\<approx>\<close>\<close>\<forall>\<^sub>\<approx>_ | (_)./ _)\<close> [0, 0, 10] 10)
80768
c7723cc15de8 more markup for syntax consts;
wenzelm
parents: 79857
diff changeset
   238
syntax_consts
c7723cc15de8 more markup for syntax consts;
wenzelm
parents: 79857
diff changeset
   239
  "_qeventually_cosparse" == eventually
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
translations
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
  "\<forall>\<^sub>\<approx>x|P. t" => "CONST eventually (\<lambda>x. t) (CONST cosparse {x. P})"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
print_translation \<open>
81150
3dd8035578b8 eliminate clones: just one Collect_binder_tr';
wenzelm
parents: 81097
diff changeset
   243
  [(\<^const_syntax>\<open>eventually\<close>, K (Collect_binder_tr' \<^syntax_const>\<open>_qeventually_cosparse\<close>))]
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
\<close>
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
lemma eventually_cosparse: "eventually P (cosparse A) \<longleftrightarrow> {x. \<not>P x} sparse_in A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
  unfolding cosparse_def by (rule eventually_Abs_filter[OF is_filter_cosparse])
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
lemma eventually_not_in_cosparse:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
  assumes "X sparse_in A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
  shows   "eventually (\<lambda>x. x \<notin> X) (cosparse A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
  using assms by (auto simp: eventually_cosparse)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
lemma eventually_cosparse_open_eq:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
  "open A \<Longrightarrow> eventually P (cosparse A) \<longleftrightarrow> (\<forall>x\<in>A. eventually P (at x))"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
  unfolding eventually_cosparse
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
  by (subst sparse_in_open) (auto simp: islimpt_conv_frequently_at frequently_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
lemma eventually_cosparse_imp_eventually_at:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
  "eventually P (cosparse A) \<Longrightarrow> x \<in> A \<Longrightarrow> eventually P (at x within B)"
82137
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   261
  unfolding eventually_cosparse sparse_in_def islimpt_def eventually_at_topological 
7281e57085ab A couple of additional lemmas
paulson <lp15@cam.ac.uk>
parents: 81150
diff changeset
   262
  by fastforce
79857
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
lemma eventually_in_cosparse:
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
  assumes "A \<subseteq> X" "open A"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
  shows   "eventually (\<lambda>x. x \<in> X) (cosparse A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
proof -
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   268
  have "eventually (\<lambda>x. x \<in> A) (cosparse A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
    using assms by (auto simp: eventually_cosparse_open_eq intro: eventually_at_in_open')
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
  thus ?thesis
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
    by eventually_elim (use assms(1) in blast)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
qed
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
lemma cosparse_eq_bot_iff: "cosparse A = bot \<longleftrightarrow> (\<forall>x\<in>A. open {x})"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
proof -
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
  have "cosparse A = bot \<longleftrightarrow> eventually (\<lambda>_. False) (cosparse A)"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
    by (simp add: trivial_limit_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
  also have "\<dots> \<longleftrightarrow> (\<forall>x\<in>A. open {x})"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
    unfolding eventually_cosparse sparse_in_def
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
    by (auto simp: islimpt_UNIV_iff)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
  finally show ?thesis .
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
qed
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
lemma cosparse_empty [simp]: "cosparse {} = bot"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
  by (rule filter_eqI) (auto simp: eventually_cosparse sparse_in_def)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
lemma cosparse_eq_bot_iff' [simp]: "cosparse (A :: 'a :: perfect_space set) = bot \<longleftrightarrow> A = {}"
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   288
  by (auto simp: cosparse_eq_bot_iff not_open_singleton)
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
819c28a7280f New material by Wenda Li and Manuel Eberl
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
end