[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
b : ℤ
⊢ b ≤ ⌊↑(b + 1)⌋
[PROOFSTEP]
rw [floor_intCast]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
b : ℤ
⊢ b ≤ b + 1
[PROOFSTEP]
exact (lt_add_one _).le
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
b : ℤ
⊢ ⌈↑(b - 1)⌉ ≤ b
[PROOFSTEP]
rw [ceil_intCast]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
b : ℤ
⊢ b - 1 ≤ b
[PROOFSTEP]
exact (sub_one_lt _).le
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ Tendsto floor (𝓝[Ici ↑n] ↑n) (pure n)
[PROOFSTEP]
simpa only [floor_intCast] using
  tendsto_floor_right_pure_floor
    (n : α)
      -- porting note: new theorem
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ Tendsto ceil (𝓝[Iic ↑n] ↑n) (pure n)
[PROOFSTEP]
simpa only [ceil_intCast] using
  tendsto_ceil_left_pure_ceil
    (n : α)
      -- porting note: new theorem
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
⊢ ↑(⌈x⌉ - 1) < x
[PROOFSTEP]
rw [cast_sub, cast_one, sub_lt_iff_lt_add]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
⊢ ↑⌈x⌉ < x + 1
[PROOFSTEP]
exact ceil_lt_add_one _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
h₁ : ↑(⌈x⌉ - 1) < x
⊢ x ≤ ↑(⌈x⌉ - 1) + 1
[PROOFSTEP]
rw [cast_sub, cast_one, sub_add_cancel]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
h₁ : ↑(⌈x⌉ - 1) < x
⊢ x ≤ ↑⌈x⌉
[PROOFSTEP]
exact le_ceil _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ Tendsto floor (𝓝[Iio ↑n] ↑n) (pure (n - 1))
[PROOFSTEP]
simpa only [ceil_intCast] using
  tendsto_floor_left_pure_ceil_sub_one
    (n : α)
      -- porting note: new theorem
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
⊢ ↑(⌊x⌋ + 1) - 1 ≤ x
[PROOFSTEP]
rw [cast_add, cast_one, add_sub_cancel]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
x : α
⊢ ↑⌊x⌋ ≤ x
[PROOFSTEP]
exact floor_le _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ Tendsto ceil (𝓝[Ioi ↑n] ↑n) (pure (n + 1))
[PROOFSTEP]
simpa only [floor_intCast] using tendsto_ceil_right_pure_floor_add_one (n : α)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n - 1)) ≤ 𝓝[Iic (↑n - 1)] (↑n - 1)
[PROOFSTEP]
rw [← @cast_one α, ← cast_sub]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n - 1)) ≤ 𝓝[Iic ↑(n - 1)] ↑(n - 1)
[PROOFSTEP]
exact pure_le_nhdsWithin le_rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n + 1)) ≤ 𝓝[Ici (↑n + 1)] (↑n + 1)
[PROOFSTEP]
rw [← @cast_one α, ← cast_add]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n + 1)) ≤ 𝓝[Ici ↑(n + 1)] ↑(n + 1)
[PROOFSTEP]
exact pure_le_nhdsWithin le_rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : FloorRing α
inst✝² : TopologicalSpace α
inst✝¹ : OrderClosedTopology α
inst✝ : TopologicalAddGroup α
n : ℤ
⊢ Tendsto fract (𝓝[Iio ↑n] ↑n) (𝓝 1)
[PROOFSTEP]
rw [← sub_sub_cancel (n : α) 1]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : FloorRing α
inst✝² : TopologicalSpace α
inst✝¹ : OrderClosedTopology α
inst✝ : TopologicalAddGroup α
n : ℤ
⊢ Tendsto fract (𝓝[Iio ↑n] ↑n) (𝓝 (↑n - (↑n - 1)))
[PROOFSTEP]
refine (tendsto_id.mono_left nhdsWithin_le_nhds).sub ?_
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : FloorRing α
inst✝² : TopologicalSpace α
inst✝¹ : OrderClosedTopology α
inst✝ : TopologicalAddGroup α
n : ℤ
⊢ Tendsto (fun x => ↑⌊x⌋) (𝓝[Iio ↑n] ↑n) (𝓝 (↑n - 1))
[PROOFSTEP]
exact tendsto_floor_left' n
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
⊢ Continuous fun st => f st.fst (fract st.snd)
[PROOFSTEP]
change Continuous (uncurry f ∘ Prod.map id fract)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
⊢ Continuous (uncurry f ∘ Prod.map id fract)
[PROOFSTEP]
rw [continuous_iff_continuousAt]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
⊢ ∀ (x : β × α), ContinuousAt (uncurry f ∘ Prod.map id fract) x
[PROOFSTEP]
rintro ⟨s, t⟩
[GOAL]
case mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
t : α
⊢ ContinuousAt (uncurry f ∘ Prod.map id fract) (s, t)
[PROOFSTEP]
rcases em (∃ n : ℤ, t = n) with (⟨n, rfl⟩ | ht)
[GOAL]
case mk.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ ContinuousAt (uncurry f ∘ Prod.map id fract) (s, ↑n)
[PROOFSTEP]
rw [ContinuousAt, nhds_prod_eq, ← nhds_left'_sup_nhds_right (n : α), prod_sup, tendsto_sup]
[GOAL]
case mk.inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ Tendsto (uncurry f ∘ Prod.map id fract) (𝓝 s ×ˢ 𝓝[Iio ↑n] ↑n) (𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n))) ∧
    Tendsto (uncurry f ∘ Prod.map id fract) (𝓝 s ×ˢ 𝓝[Ici ↑n] ↑n) (𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n)))
[PROOFSTEP]
constructor
[GOAL]
case mk.inl.intro.left
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ Tendsto (uncurry f ∘ Prod.map id fract) (𝓝 s ×ˢ 𝓝[Iio ↑n] ↑n) (𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n)))
[PROOFSTEP]
refine
  (((h (s, 1) ⟨trivial, zero_le_one, le_rfl⟩).tendsto.mono_left ?_).comp
        (tendsto_id.prod_map (tendsto_fract_left _))).mono_right
    (le_of_eq ?_)
[GOAL]
case mk.inl.intro.left.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ 𝓝 s ×ˢ 𝓝[Iio 1] 1 ≤ 𝓝[univ ×ˢ Icc 0 1] (s, 1)
[PROOFSTEP]
rw [nhdsWithin_prod_eq, nhdsWithin_univ, ← nhdsWithin_Ico_eq_nhdsWithin_Iio one_pos]
[GOAL]
case mk.inl.intro.left.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ 𝓝 s ×ˢ 𝓝[Ico 0 1] 1 ≤ 𝓝 s ×ˢ 𝓝[Icc 0 1] 1
[PROOFSTEP]
exact Filter.prod_mono le_rfl (nhdsWithin_mono _ Ico_subset_Icc_self)
[GOAL]
case mk.inl.intro.left.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ 𝓝 (uncurry f (s, 1)) = 𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n))
[PROOFSTEP]
simp [hf]
[GOAL]
case mk.inl.intro.right
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ Tendsto (uncurry f ∘ Prod.map id fract) (𝓝 s ×ˢ 𝓝[Ici ↑n] ↑n) (𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n)))
[PROOFSTEP]
refine
  (((h (s, 0) ⟨trivial, le_rfl, zero_le_one⟩).tendsto.mono_left <| le_of_eq ?_).comp
        (tendsto_id.prod_map (tendsto_fract_right _))).mono_right
    (le_of_eq ?_)
[GOAL]
case mk.inl.intro.right.refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ 𝓝 s ×ˢ 𝓝[Ici 0] 0 = 𝓝[univ ×ˢ Icc 0 1] (s, 0)
[PROOFSTEP]
simp [nhdsWithin_prod_eq, nhdsWithin_univ]
[GOAL]
case mk.inl.intro.right.refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
n : ℤ
⊢ 𝓝 (uncurry f (s, 0)) = 𝓝 ((uncurry f ∘ Prod.map id fract) (s, ↑n))
[PROOFSTEP]
simp [nhdsWithin_prod_eq, nhdsWithin_univ]
[GOAL]
case mk.inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
t : α
ht : ¬∃ n, t = ↑n
⊢ ContinuousAt (uncurry f ∘ Prod.map id fract) (s, t)
[PROOFSTEP]
replace ht : t ≠ ⌊t⌋ := fun ht' => ht ⟨_, ht'⟩
[GOAL]
case mk.inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
t : α
ht : t ≠ ↑⌊t⌋
⊢ ContinuousAt (uncurry f ∘ Prod.map id fract) (s, t)
[PROOFSTEP]
refine (h.continuousAt ?_).comp (continuousAt_id.prod_map (continuousAt_fract ht))
[GOAL]
case mk.inr
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : LinearOrderedRing α
inst✝⁴ : FloorRing α
inst✝³ : TopologicalSpace α
inst✝² : OrderTopology α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : β → α → γ
h : ContinuousOn (uncurry f) (univ ×ˢ Icc 0 1)
hf : ∀ (s : β), f s 0 = f s 1
s : β
t : α
ht : t ≠ ↑⌊t⌋
⊢ univ ×ˢ Icc 0 1 ∈ 𝓝 (Prod.map id fract (s, t))
[PROOFSTEP]
exact prod_mem_nhds univ_mem (Icc_mem_nhds (fract_pos.2 ht) (fract_lt_one _))
