src/HOL/Analysis/Abstract_Limits.thy
author paulson <lp15@cam.ac.uk>
Wed, 11 Oct 2023 17:02:33 +0100
changeset 78750 f229090cb8a3
parent 78320 eb9a9690b8f5
child 82520 1b17f0a41aa3
permissions -rw-r--r--
atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     1
theory Abstract_Limits
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     2
  imports
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     3
    Abstract_Topology
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
begin
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     6
subsection\<open>nhdsin and atin\<close>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
definition nhdsin :: "'a topology \<Rightarrow> 'a \<Rightarrow> 'a filter"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
  where "nhdsin X a =
70337
48609a6af1a0 removed relics of ASCII syntax for indexed big operators
haftmann
parents: 70065
diff changeset
    10
           (if a \<in> topspace X then (INF S\<in>{S. openin X S \<and> a \<in> S}. principal S) else bot)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    12
definition atin_within :: "['a topology, 'a, 'a set] \<Rightarrow> 'a filter"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    13
  where "atin_within X a S = inf (nhdsin X a) (principal (topspace X \<inter> S - {a}))"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    15
abbreviation atin :: "'a topology \<Rightarrow> 'a \<Rightarrow> 'a filter"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    16
  where "atin X a \<equiv> atin_within X a UNIV"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    17
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    18
lemma atin_def: "atin X a = inf (nhdsin X a) (principal (topspace X - {a}))"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    19
  by (simp add: atin_within_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
lemma nhdsin_degenerate [simp]: "a \<notin> topspace X \<Longrightarrow> nhdsin X a = bot"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
  and atin_degenerate [simp]: "a \<notin> topspace X \<Longrightarrow> atin X a = bot"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
  by (simp_all add: nhdsin_def atin_def)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
lemma eventually_nhdsin:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
  "eventually P (nhdsin X a) \<longleftrightarrow> a \<notin> topspace X \<or> (\<exists>S. openin X S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
proof (cases "a \<in> topspace X")
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
  case True
70337
48609a6af1a0 removed relics of ASCII syntax for indexed big operators
haftmann
parents: 70065
diff changeset
    29
  hence "nhdsin X a = (INF S\<in>{S. openin X S \<and> a \<in> S}. principal S)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
    by (simp add: nhdsin_def)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
  also have "eventually P \<dots> \<longleftrightarrow> (\<exists>S. openin X S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
    using True by (subst eventually_INF_base) (auto simp: eventually_principal)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
  finally show ?thesis using True by simp
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
qed auto
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    36
lemma eventually_atin_within:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    37
  "eventually P (atin_within X a S) \<longleftrightarrow> a \<notin> topspace X \<or> (\<exists>T. openin X T \<and> a \<in> T \<and> (\<forall>x\<in>T. x \<in> S \<and> x \<noteq> a \<longrightarrow> P x))"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    38
proof (cases "a \<in> topspace X")
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    39
  case True
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    40
  hence "eventually P (atin_within X a S) \<longleftrightarrow> 
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    41
         (\<exists>T. openin X T \<and> a \<in> T \<and>
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    42
          (\<forall>x\<in>T. x \<in> topspace X \<and> x \<in> S \<and> x \<noteq> a \<longrightarrow> P x))"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    43
    by (simp add: atin_within_def eventually_inf_principal eventually_nhdsin)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    44
  also have "\<dots> \<longleftrightarrow> (\<exists>T. openin X T \<and> a \<in> T \<and> (\<forall>x\<in>T. x \<in> S \<and> x \<noteq> a \<longrightarrow> P x))"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    45
    using openin_subset by (intro ex_cong) auto
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    46
  finally show ?thesis by (simp add: True)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    47
qed (simp add: atin_within_def)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    48
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
lemma eventually_atin:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
  "eventually P (atin X a) \<longleftrightarrow> a \<notin> topspace X \<or>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
             (\<exists>U. openin X U \<and> a \<in> U \<and> (\<forall>x \<in> U - {a}. P x))"
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    52
  by (auto simp add: eventually_atin_within)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
77943
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    54
lemma nontrivial_limit_atin:
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    55
   "atin X a \<noteq> bot \<longleftrightarrow> a \<in> X derived_set_of topspace X"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    56
proof 
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    57
  assume L: "atin X a \<noteq> bot"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    58
  then have "a \<in> topspace X"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    59
    by (meson atin_degenerate)
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    60
  moreover have "\<not> openin X {a}"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    61
    using L by (auto simp: eventually_atin trivial_limit_eq)
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    62
  ultimately
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    63
  show "a \<in> X derived_set_of topspace X"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    64
    by (auto simp: derived_set_of_topspace)
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    65
next
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    66
  assume a: "a \<in> X derived_set_of topspace X"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    67
  show "atin X a \<noteq> bot"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    68
  proof
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    69
    assume "atin X a = bot"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    70
    then have "eventually (\<lambda>_. False) (atin X a)"
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    71
      by simp
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    72
    then show False
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    73
      by (smt (verit, best) a eventually_atin in_derived_set_of insertE insert_Diff)
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    74
  qed
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    75
qed
ffdad62bc235 Importation of additional lemmas from metric.ml
paulson <lp15@cam.ac.uk>
parents: 77934
diff changeset
    76
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    77
lemma eventually_atin_subtopology:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    78
  assumes "a \<in> topspace X"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    79
  shows "eventually P (atin (subtopology X S) a) \<longleftrightarrow> 
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    80
    (a \<in> S \<longrightarrow> (\<exists>U. openin (subtopology X S) U \<and> a \<in> U \<and> (\<forall>x\<in>U - {a}. P x)))"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    81
  using assms by (simp add: eventually_atin)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    82
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    83
lemma eventually_within_imp:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    84
   "eventually P (atin_within X a S) \<longleftrightarrow> eventually (\<lambda>x. x \<in> S \<longrightarrow> P x) (atin X a)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    85
  by (auto simp add: eventually_atin_within eventually_atin)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    86
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    87
lemma atin_subtopology_within:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    88
  assumes "a \<in> S"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    89
  shows "atin (subtopology X S) a = atin_within X a S"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    90
proof -
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    91
  have "eventually P (atin (subtopology X S) a) \<longleftrightarrow> eventually P (atin_within X a S)" for P
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    92
    unfolding eventually_atin eventually_atin_within openin_subtopology
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    93
    using assms by auto
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    94
  then show ?thesis
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    95
    by (meson le_filter_def order.eq_iff)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    96
qed
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    97
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    98
lemma atin_subtopology_within_if:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
    99
  shows "atin (subtopology X S) a = (if a \<in> S then atin_within X a S else bot)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   100
  by (simp add: atin_subtopology_within)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   101
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   102
lemma trivial_limit_atpointof_within:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   103
   "trivial_limit(atin_within X a S) \<longleftrightarrow>
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   104
        (a \<notin> X derived_set_of S)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   105
  by (auto simp: trivial_limit_def eventually_atin_within in_derived_set_of)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   106
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   107
lemma derived_set_of_trivial_limit:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   108
   "a \<in> X derived_set_of S \<longleftrightarrow> \<not> trivial_limit(atin_within X a S)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   109
  by (simp add: trivial_limit_atpointof_within)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   110
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
subsection\<open>Limits in a topological space\<close>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   114
definition limitin :: "'a topology \<Rightarrow> ('b \<Rightarrow> 'a) \<Rightarrow> 'a \<Rightarrow> 'b filter \<Rightarrow> bool" where
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   115
  "limitin X f l F \<equiv> l \<in> topspace X \<and> (\<forall>U. openin X U \<and> l \<in> U \<longrightarrow> eventually (\<lambda>x. f x \<in> U) F)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   117
lemma limit_within_subset:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   118
   "\<lbrakk>limitin X f l (atin_within Y a S); T \<subseteq> S\<rbrakk> \<Longrightarrow> limitin X f l (atin_within Y a T)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   119
  by (smt (verit) eventually_atin_within limitin_def subset_eq)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   120
77934
01c88cf514fc A few new theorems
paulson <lp15@cam.ac.uk>
parents: 71172
diff changeset
   121
lemma limitinD: "\<lbrakk>limitin X f l F; openin X U; l \<in> U\<rbrakk> \<Longrightarrow> eventually (\<lambda>x. f x \<in> U) F"
01c88cf514fc A few new theorems
paulson <lp15@cam.ac.uk>
parents: 71172
diff changeset
   122
  by (simp add: limitin_def)
01c88cf514fc A few new theorems
paulson <lp15@cam.ac.uk>
parents: 71172
diff changeset
   123
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   124
lemma limitin_canonical_iff [simp]: "limitin euclidean f l F \<longleftrightarrow> (f \<longlongrightarrow> l) F"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   125
  by (auto simp: limitin_def tendsto_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   127
lemma limitin_topspace: "limitin X f l F \<Longrightarrow> l \<in> topspace X"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   128
  by (simp add: limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
70065
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   130
lemma limitin_const_iff [simp]: "limitin X (\<lambda>a. l) l F \<longleftrightarrow> l \<in> topspace X"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   131
  by (simp add: limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
70065
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   133
lemma limitin_const: "limitin euclidean (\<lambda>a. l) l F"
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   134
  by simp
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   136
lemma limitin_eventually:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   137
   "\<lbrakk>l \<in> topspace X; eventually (\<lambda>x. f x = l) F\<rbrakk> \<Longrightarrow> limitin X f l F"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   138
  by (auto simp: limitin_def eventually_mono)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   140
lemma limitin_subsequence:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   141
   "\<lbrakk>strict_mono r; limitin X f l sequentially\<rbrakk> \<Longrightarrow> limitin X (f \<circ> r) l sequentially"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   142
  unfolding limitin_def using eventually_subseq by fastforce
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   144
lemma limitin_subtopology:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   145
  "limitin (subtopology X S) f l F
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   146
   \<longleftrightarrow> l \<in> S \<and> eventually (\<lambda>a. f a \<in> S) F \<and> limitin X f l F"  (is "?lhs = ?rhs")
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
proof (cases "l \<in> S \<inter> topspace X")
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
  case True
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
  show ?thesis
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
  proof
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
    assume L: ?lhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
    with True
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
    have "\<forall>\<^sub>F b in F. f b \<in> topspace X \<inter> S"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   154
      by (metis (no_types) limitin_def openin_topspace topspace_subtopology)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
    with L show ?rhs
71172
nipkow
parents: 70337
diff changeset
   156
      apply (clarsimp simp add: limitin_def eventually_mono openin_subtopology_alt)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
      apply (drule_tac x="S \<inter> U" in spec, force simp: elim: eventually_mono)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
      done
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
  next
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
    assume ?rhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
    then show ?lhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
      using eventually_elim2
71172
nipkow
parents: 70337
diff changeset
   163
      by (fastforce simp add: limitin_def openin_subtopology_alt)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
  qed
71172
nipkow
parents: 70337
diff changeset
   165
qed (auto simp: limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
70065
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   168
lemma limitin_canonical_iff_gen [simp]:
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   169
  assumes "open S"
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   170
  shows "limitin (top_of_set S) f l F \<longleftrightarrow> (f \<longlongrightarrow> l) F \<and> l \<in> S"
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   171
  using assms by (auto simp: limitin_subtopology tendsto_def)
cc89a395b5a3 Free_Abelian_Groups finally working; fixed some duplicates; cleaned up some proofs
paulson <lp15@cam.ac.uk>
parents: 70019
diff changeset
   172
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   173
lemma limitin_sequentially:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   174
   "limitin X S l sequentially \<longleftrightarrow>
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
     l \<in> topspace X \<and> (\<forall>U. openin X U \<and> l \<in> U \<longrightarrow> (\<exists>N. \<forall>n. N \<le> n \<longrightarrow> S n \<in> U))"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   176
  by (simp add: limitin_def eventually_sequentially)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   178
lemma limitin_sequentially_offset:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   179
   "limitin X f l sequentially \<Longrightarrow> limitin X (\<lambda>i. f (i + k)) l sequentially"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   180
  unfolding limitin_sequentially
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
  by (metis add.commute le_add2 order_trans)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   183
lemma limitin_sequentially_offset_rev:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   184
  assumes "limitin X (\<lambda>i. f (i + k)) l sequentially"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   185
  shows "limitin X f l sequentially"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
proof -
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
  have "\<exists>N. \<forall>n\<ge>N. f n \<in> U" if U: "openin X U" "l \<in> U" for U
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
  proof -
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
    obtain N where "\<And>n. n\<ge>N \<Longrightarrow> f (n + k) \<in> U"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   190
      using assms U unfolding limitin_sequentially by blast
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
    then have "\<forall>n\<ge>N+k. f n \<in> U"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
      by (metis add_leD2 le_add_diff_inverse ordered_cancel_comm_monoid_diff_class.le_diff_conv2 add.commute)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
    then show ?thesis ..
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
  qed
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
  with assms show ?thesis
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   196
    unfolding limitin_sequentially
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
    by simp
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
qed
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   200
lemma limitin_atin:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   201
   "limitin Y f y (atin X x) \<longleftrightarrow>
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
        y \<in> topspace Y \<and>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
        (x \<in> topspace X
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
        \<longrightarrow> (\<forall>V. openin Y V \<and> y \<in> V
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
                 \<longrightarrow> (\<exists>U. openin X U \<and> x \<in> U \<and> f ` (U - {x}) \<subseteq> V)))"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   206
  by (auto simp: limitin_def eventually_atin image_subset_iff)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   208
lemma limitin_atin_self:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   209
   "limitin Y f (f a) (atin X a) \<longleftrightarrow>
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
        f a \<in> topspace Y \<and>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
        (a \<in> topspace X
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
         \<longrightarrow> (\<forall>V. openin Y V \<and> f a \<in> V
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
                  \<longrightarrow> (\<exists>U. openin X U \<and> a \<in> U \<and> f ` U \<subseteq> V)))"
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   214
  unfolding limitin_atin by fastforce
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   216
lemma limitin_trivial:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   217
   "\<lbrakk>trivial_limit F; y \<in> topspace X\<rbrakk> \<Longrightarrow> limitin X f y F"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   218
  by (simp add: limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   220
lemma limitin_transform_eventually:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   221
   "\<lbrakk>eventually (\<lambda>x. f x = g x) F; limitin X f l F\<rbrakk> \<Longrightarrow> limitin X g l F"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   222
  unfolding limitin_def using eventually_elim2 by fastforce
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
lemma continuous_map_limit:
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   225
  assumes "continuous_map X Y g" and f: "limitin X f l F"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   226
  shows "limitin Y (g \<circ> f) (g l) F"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
proof -
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
  have "g l \<in> topspace Y"
78320
eb9a9690b8f5 cosmetic improvements, new lemmas, especially more uses of function space
paulson <lp15@cam.ac.uk>
parents: 77943
diff changeset
   229
    by (meson assms continuous_map f image_eqI in_mono limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
  moreover
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
  have "\<And>U. \<lbrakk>\<forall>V. openin X V \<and> l \<in> V \<longrightarrow> (\<forall>\<^sub>F x in F. f x \<in> V); openin Y U; g l \<in> U\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
            \<Longrightarrow> \<forall>\<^sub>F x in F. g (f x) \<in> U"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
    using assms eventually_mono
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   234
    by (fastforce simp: limitin_def dest!: openin_continuous_map_preimage)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
  ultimately show ?thesis
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   236
    using f by (fastforce simp add: limitin_def)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   237
qed
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   239
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
subsection\<open>Pointwise continuity in topological spaces\<close>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
definition topcontinuous_at where
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
  "topcontinuous_at X Y f x \<longleftrightarrow>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
     x \<in> topspace X \<and>
78320
eb9a9690b8f5 cosmetic improvements, new lemmas, especially more uses of function space
paulson <lp15@cam.ac.uk>
parents: 77943
diff changeset
   245
     f \<in> topspace X \<rightarrow> topspace Y \<and>
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
     (\<forall>V. openin Y V \<and> f x \<in> V
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
          \<longrightarrow> (\<exists>U. openin X U \<and> x \<in> U \<and> (\<forall>y \<in> U. f y \<in> V)))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
lemma topcontinuous_at_atin:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
   "topcontinuous_at X Y f x \<longleftrightarrow>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
        x \<in> topspace X \<and>
78320
eb9a9690b8f5 cosmetic improvements, new lemmas, especially more uses of function space
paulson <lp15@cam.ac.uk>
parents: 77943
diff changeset
   252
        f \<in> topspace X \<rightarrow> topspace Y \<and>
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   253
        limitin Y f (f x) (atin X x)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
  unfolding topcontinuous_at_def
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   255
  by (fastforce simp add: limitin_atin)+
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
lemma continuous_map_eq_topcontinuous_at:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
   "continuous_map X Y f \<longleftrightarrow> (\<forall>x \<in> topspace X. topcontinuous_at X Y f x)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
    (is "?lhs = ?rhs")
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
proof
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   261
  assume ?lhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
  then show ?rhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
    by (auto simp: continuous_map_def topcontinuous_at_def)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
next
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
  assume R: ?rhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
  then show ?lhs
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
    apply (auto simp: continuous_map_def topcontinuous_at_def)
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   268
    by (smt (verit, del_insts) mem_Collect_eq openin_subopen openin_subset subset_eq)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
qed
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
lemma continuous_map_atin:
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   272
   "continuous_map X Y f \<longleftrightarrow> (\<forall>x \<in> topspace X. limitin Y f (f x) (atin X x))"
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   273
  by (auto simp: limitin_def topcontinuous_at_atin continuous_map_eq_topcontinuous_at)
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
69875
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   275
lemma limitin_continuous_map:
03bc14eab432 renamed the constant "limit" as it is too "generic"
paulson <lp15@cam.ac.uk>
parents: 69874
diff changeset
   276
   "\<lbrakk>continuous_map X Y f; a \<in> topspace X; f a = b\<rbrakk> \<Longrightarrow> limitin Y f b (atin X a)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
  by (auto simp: continuous_map_atin)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
78750
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   279
lemma limit_continuous_map_within:
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   280
   "\<lbrakk>continuous_map (subtopology X S) Y f; a \<in> S; a \<in> topspace X\<rbrakk>
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   281
    \<Longrightarrow> limitin Y f (f a) (atin_within X a S)"
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   282
  by (metis Int_iff atin_subtopology_within continuous_map_atin topspace_subtopology)
f229090cb8a3 atin now an abbreviation for atin_within, which has been moved to Abstract_Limits
paulson <lp15@cam.ac.uk>
parents: 78320
diff changeset
   283
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
subsection\<open>Combining theorems for continuous functions into the reals\<close>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   287
lemma continuous_map_canonical_const [continuous_intros]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   288
   "continuous_map X euclidean (\<lambda>x. c)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  by simp
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
lemma continuous_map_real_mult [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
   "\<lbrakk>continuous_map X euclideanreal f; continuous_map X euclideanreal g\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
   \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. f x * g x)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
  by (simp add: continuous_map_atin tendsto_mult)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   296
lemma continuous_map_real_pow [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
   "continuous_map X euclideanreal f \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. f x ^ n)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
  by (induction n) (auto simp: continuous_map_real_mult)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
lemma continuous_map_real_mult_left:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
   "continuous_map X euclideanreal f \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. c * f x)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
  by (simp add: continuous_map_atin tendsto_mult)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
lemma continuous_map_real_mult_left_eq:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
   "continuous_map X euclideanreal (\<lambda>x. c * f x) \<longleftrightarrow> c = 0 \<or> continuous_map X euclideanreal f"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
proof (cases "c = 0")
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
  case False
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
  have "continuous_map X euclideanreal (\<lambda>x. c * f x) \<Longrightarrow> continuous_map X euclideanreal f"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
    apply (frule continuous_map_real_mult_left [where c="inverse c"])
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
    apply (simp add: field_simps False)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
    done
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
  with False show ?thesis
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
    using continuous_map_real_mult_left by blast
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
qed simp
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
lemma continuous_map_real_mult_right:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
   "continuous_map X euclideanreal f \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. f x * c)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
  by (simp add: continuous_map_atin tendsto_mult)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
lemma continuous_map_real_mult_right_eq:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
   "continuous_map X euclideanreal (\<lambda>x. f x * c) \<longleftrightarrow> c = 0 \<or> continuous_map X euclideanreal f"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
  by (simp add: mult.commute flip: continuous_map_real_mult_left_eq)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   324
lemma continuous_map_minus [continuous_intros]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   325
  fixes f :: "'a\<Rightarrow>'b::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   326
  shows "continuous_map X euclidean f \<Longrightarrow> continuous_map X euclidean (\<lambda>x. - f x)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
  by (simp add: continuous_map_atin tendsto_minus)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   329
lemma continuous_map_minus_eq [simp]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   330
  fixes f :: "'a\<Rightarrow>'b::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   331
  shows "continuous_map X euclidean (\<lambda>x. - f x) \<longleftrightarrow> continuous_map X euclidean f"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   332
  using continuous_map_minus add.inverse_inverse continuous_map_eq by fastforce
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   334
lemma continuous_map_add [continuous_intros]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   335
  fixes f :: "'a\<Rightarrow>'b::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   336
  shows "\<lbrakk>continuous_map X euclidean f; continuous_map X euclidean g\<rbrakk> \<Longrightarrow> continuous_map X euclidean (\<lambda>x. f x + g x)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
  by (simp add: continuous_map_atin tendsto_add)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   339
lemma continuous_map_diff [continuous_intros]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   340
  fixes f :: "'a\<Rightarrow>'b::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   341
  shows "\<lbrakk>continuous_map X euclidean f; continuous_map X euclidean g\<rbrakk> \<Longrightarrow> continuous_map X euclidean (\<lambda>x. f x - g x)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
  by (simp add: continuous_map_atin tendsto_diff)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   344
lemma continuous_map_norm [continuous_intros]:
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   345
  fixes f :: "'a\<Rightarrow>'b::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   346
  shows "continuous_map X euclidean f \<Longrightarrow> continuous_map X euclidean (\<lambda>x. norm(f x))"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   347
  by (simp add: continuous_map_atin tendsto_norm)
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   348
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
lemma continuous_map_real_abs [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
   "continuous_map X euclideanreal f \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. abs(f x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
  by (simp add: continuous_map_atin tendsto_rabs)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
lemma continuous_map_real_max [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
   "\<lbrakk>continuous_map X euclideanreal f; continuous_map X euclideanreal g\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
   \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. max (f x) (g x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
  by (simp add: continuous_map_atin tendsto_max)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
lemma continuous_map_real_min [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
   "\<lbrakk>continuous_map X euclideanreal f; continuous_map X euclideanreal g\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
   \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. min (f x) (g x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
  by (simp add: continuous_map_atin tendsto_min)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
lemma continuous_map_sum [continuous_intros]:
70019
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   364
  fixes f :: "'a\<Rightarrow>'b\<Rightarrow>'c::real_normed_vector"
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   365
  shows "\<lbrakk>finite I; \<And>i. i \<in> I \<Longrightarrow> continuous_map X euclidean (\<lambda>x. f x i)\<rbrakk>
095dce9892e8 A few results in Algebra, and bits for Analysis
paulson <lp15@cam.ac.uk>
parents: 69875
diff changeset
   366
         \<Longrightarrow> continuous_map X euclidean (\<lambda>x. sum (f x) I)"
69874
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
  by (simp add: continuous_map_atin tendsto_sum)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
lemma continuous_map_prod [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
   "\<lbrakk>finite I;
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
         \<And>i. i \<in> I \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. f x i)\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
        \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. prod (f x) I)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
  by (simp add: continuous_map_atin tendsto_prod)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   374
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
lemma continuous_map_real_inverse [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
   "\<lbrakk>continuous_map X euclideanreal f; \<And>x. x \<in> topspace X \<Longrightarrow> f x \<noteq> 0\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
        \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. inverse(f x))"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
  by (simp add: continuous_map_atin tendsto_inverse)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
lemma continuous_map_real_divide [continuous_intros]:
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
   "\<lbrakk>continuous_map X euclideanreal f; continuous_map X euclideanreal g; \<And>x. x \<in> topspace X \<Longrightarrow> g x \<noteq> 0\<rbrakk>
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
   \<Longrightarrow> continuous_map X euclideanreal (\<lambda>x. f x / g x)"
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
  by (simp add: continuous_map_atin tendsto_divide)
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
11065b70407d new material for Analysis
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
end