Analysis I, Section 9.10: Limits at infinity

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

Main constructions and results of this section:

namespace Chapter9

Definition 9.10.1 (Infinite adherent point). We use ¬BddAbove sorry : Prop¬ BddAbove Unknown identifier `X`X as our notation for being an adherent point

theorem BddAbove.unbounded_iff (X:Set ) : ¬ BddAbove X M, x X, x > M := X:Set ¬BddAbove X (M : ), x X, x > M All goals completed! 🐙
theorem BddAbove.unbounded_iff' (X:Set ) : ¬ BddAbove X sSup ((fun x: (x:EReal)) '' X) = := X:Set ¬BddAbove X sSup ((fun x => x) '' X) = X:Set (∀ (M : ), x X, M < x) b < , a X, b < a X:Set (∀ (M : ), x X, M < x) b < , a X, b < aX:Set (∀ b < , a X, b < a) (M : ), x X, M < x X:Set (∀ (M : ), x X, M < x) b < , a X, b < a X:Set h: (M : ), x X, M < xM:ERealhM:M < a X, M < a; X:Set h: (M : ), x X, M < xM:ERealhM:M < x:hx:x XhxM:M.toReal < x a X, M < a X:Set h: (M : ), x X, M < xM:ERealhM:M < x:hx:x XhxM:M.toReal < xM < x; X:Set h: (M : ), x X, M < xx:hx:x X M < , M.toReal < x M < x; All goals completed! 🐙 X:Set h: b < , a X, b < aM: x X, M < x; X:Set h: b < , a X, b < aM:M < X:Set M:h: a X, M < a x X, M < x X:Set h: b < , a X, b < aM:M < X:Set M:h: a X, M < a x X, M < x All goals completed! 🐙theorem BddBelow.unbounded_iff (X:Set ) : ¬ BddBelow X M, x X, x < M := X:Set ¬BddBelow X (M : ), x X, x < M All goals completed! 🐙theorem BddBelow.unbounded_iff' (X:Set ) : ¬ BddBelow X sInf ((fun x: (x:EReal)) '' X) = := X:Set ¬BddBelow X sInf ((fun x => x) '' X) = X:Set (∀ (M : ), x X, x < M) (b : EReal), < b a X, a < b X:Set (∀ (M : ), x X, x < M) (b : EReal), < b a X, a < bX:Set (∀ (b : EReal), < b a X, a < b) (M : ), x X, x < M X:Set (∀ (M : ), x X, x < M) (b : EReal), < b a X, a < b X:Set h: (M : ), x X, x < MM:ERealhM: < M a X, a < M; X:Set h: (M : ), x X, x < MM:ERealhM: < Mx:hx:x XhxM:x < M.toReal a X, a < M X:Set h: (M : ), x X, x < MM:ERealhM: < Mx:hx:x XhxM:x < M.toRealx < M; X:Set h: (M : ), x X, x < Mx:hx:x X (M : EReal), < M x < M.toReal x < M; All goals completed! 🐙 X:Set h: (b : EReal), < b a X, a < bM: x X, x < M; X:Set h: (b : EReal), < b a X, a < bM: < MX:Set M:h: a X, a < M x X, x < M X:Set h: (b : EReal), < b a X, a < bM: < MX:Set M:h: a X, a < M x X, x < MAll goals completed! 🐙

Definition 9.10.13 (Limit at infinity)

theorem Filter.Tendsto.AtTop.iff {X: Set } (f: ) (L:) : Filter.Tendsto f (.atTop .principal X) (nhds L) ε > (0:), M, x X .Ici M, |f x - L| < ε := X:Set f: L:Filter.Tendsto f (Filter.atTop Filter.principal X) (nhds L) ε > 0, M, x X Set.Ici M, |f x - L| < ε X:Set f: L:(∀ ε > 0, ∀ᶠ (b : ) in Filter.atTop Filter.principal X, |f b - L| < ε) ε > 0, M, x X Set.Ici M, |f x - L| < ε X:Set f: L:ε::ε > 0(∀ᶠ (b : ) in Filter.atTop Filter.principal X, |f b - L| < ε) M, x X Set.Ici M, |f x - L| < ε X:Set f: L:ε::ε > 0(∃ a, (b : ), a b b X |f b - L| < ε) M, x X, M x |f x - L| < ε All goals completed! 🐙

Exercise 9.10.4

declaration uses 'sorry'example : Filter.Tendsto (fun x: 1/x) (.atTop .principal (.Ioi 0)) (nhds 0) := Filter.Tendsto (fun x => 1 / x) (Filter.atTop Filter.principal (Set.Ioi 0)) (nhds 0) All goals completed! 🐙
open Classical in /-- Exercise 9.10.1 -/ declaration uses 'sorry'example (a: ) (L:) : Filter.Tendsto (fun x: (if h:( n:, x = n) then a h.choose else 0)) (.atTop .principal ((fun n: (n:)) '' .univ)) (nhds L) Filter.atTop.Tendsto a (nhds L) := a: L:Filter.Tendsto (fun x => if h : n, x = n then a h.choose else 0) (Filter.atTop Filter.principal ((fun n => n) '' Set.univ)) (nhds L) Filter.Tendsto a Filter.atTop (nhds L) All goals completed! 🐙end Chapter9