Zulip Chat Archive

Stream: new members

Topic: Limits with positive reals and atBot


Daniele Pusceddu (Nov 20 2023 at 09:48):

Hello,
I have been working on a project which uses a "Positive Reals" type and I would now like to
work with simple theorem involving limits, in particular "tending to zero from the right" which I believe I may achieve with Filter.atBot. But after browsing around the Mathlib docs for a while, I believe I am stuck. I am here to humbly ask for suggestions in how to prove theorems similar to the ones in the mwe below. Thank you.

import Mathlib.Topology.Basic
import Mathlib.Topology.Instances.Real
import Mathlib.Order.Filter.AtTopBot
import Mathlib.Order.Monotone.Basic

abbrev PReal := { r :  // 0 < r}
notation "ℝ+" => PReal

theorem test1:
  Filter.Tendsto (fun (x: +) => 1 + x) Filter.atBot (nhds 1)
  := by sorry

-- Additionally "With the limit of f for x leading to 0 from the right being defined"
-- I know `lim` is not recommended but I didn't know how else to state this
theorem test2 (f: +  +) (h1: StrictMono f) (x: +):
  limUnder Filter.atBot f < f x
  := by sorry

Patrick Massot (Nov 20 2023 at 14:18):

The ℝ+ notation is really very ambiguous. It could just as well refer to NNReal.

Patrick Massot (Nov 20 2023 at 14:19):

My first advice is to reconsider whether you really really want this instead of working with reals.

Daniele Pusceddu (Nov 20 2023 at 14:25):

Patrick Massot said:

My first advice is to reconsider whether you really really want this instead of working with reals.

I invested a bit too much in it already to revert back to reals.

Patrick Massot (Nov 20 2023 at 14:57):

Here something you can do (but it shows the pain you inflict on yourself with working with PReal):

import Mathlib.Topology.Basic
import Mathlib.Topology.Instances.Real
import Mathlib.Order.Filter.AtTopBot
import Mathlib.Order.Monotone.Basic

abbrev PReal := { r :  // 0 < r}
notation "ℝ>0" => PReal

open Filter Topology

theorem test1: Tendsto (fun x: >0 => 1 + x) atBot (𝓝 1) := by
  set i : >0   := fun x  x
  set f : >0  >0 := fun x  1+x
  set g :    := fun x  1+x
  have hg : Tendsto g (𝓝[>] 0) (𝓝 1) := by
    apply tendsto_nhdsWithin_of_tendsto_nhds
    have : Continuous (fun x :   1 + x) := by continuity
    convert this.continuousAt.tendsto ; ring
  have : i  f = g  i := by ext x; rfl
  rw [tendsto_subtype_rng,  comap_coe_Ioi_nhdsWithin_Ioi]
  change Tendsto (i  f) (comap i (𝓝[>] 0)) (𝓝 1)
  rw [this]
  exact hg.comp tendsto_comap

-- Additionally "With the limit of f for x leading to 0 from the right being defined"
-- I know `lim` is not recommended but I didn't know how else to state this
theorem test2 {f : >0  >0} (h1 : StrictMono f) {x y : >0} {hf : Tendsto f atBot (𝓝 y)} :
    y < f x := by
  sorry

Patrick Massot (Nov 20 2023 at 14:58):

I also took the opportunity to reformat your code to something more standard. You can clear extract a more general lemma here.

Daniele Pusceddu (Nov 20 2023 at 15:12):

Patrick Massot said:

I also took the opportunity to reformat your code to something more standard. You can clear extract a more general lemma here.

Thank you very much, seeing this helps a lot already.


Last updated: Dec 20 2023 at 11:08 UTC