Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 940d371

Browse files
feat(topology/instances/add_circle): generalize homeo_Icc_quot from ℝ to archimedean groups (#17983)
+ Add left/right/two-sided continuity results about `to_Ico/Ioc_mod` and `equiv_Ico`. + Add `tfae_to_Ico_eq_to_Ioc` which states 8 other equivalent conditions for `to_Ico_mod` and `to_Ioc_mod` to agree at a point, from [this comment](https://github.com/leanprover-community/mathlib/pull/17933/files#r1051518394) in #17933. Co-authored-by: David Loeffler <d.loeffler.01@cantab.net> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: loefflerd <d.loeffler.01@cantab.net>
1 parent ae0f31c commit 940d371

File tree

2 files changed

+228
-41
lines changed

2 files changed

+228
-41
lines changed

src/algebra/order/to_interval_mod.lean

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ noncomputable theory
3030

3131
section linear_ordered_add_comm_group
3232

33-
variables {α : Type*} [linear_ordered_add_comm_group α] [archimedean α]
33+
variables {α : Type*} [linear_ordered_add_comm_group α] [hα : archimedean α]
34+
include
3435

3536
/-- The unique integer such that this multiple of `b`, added to `x`, is in `Ico a (a + b)`. -/
3637
def to_Ico_div (a : α) {b : α} (hb : 0 < b) (x : α) : ℤ :=
@@ -457,6 +458,89 @@ begin
457458
rw [hz, to_Ioc_mod_zsmul_add] }
458459
end
459460

461+
section Ico_Ioc
462+
463+
variables (a : α) {b : α} (hb : 0 < b) (x : α)
464+
465+
omit
466+
/-- `mem_Ioo_mod a b x` means that `x` lies in the open interval `(a, a + b)` modulo `b`.
467+
Equivalently (as shown below), `x` is not congruent to `a` modulo `b`, or `to_Ico_mod a hb` agrees
468+
with `to_Ioc_mod a hb` at `x`, or `to_Ico_div a hb` agrees with `to_Ioc_div a hb` at `x`. -/
469+
def mem_Ioo_mod (b x : α) : Prop := ∃ z : ℤ, x + z • b ∈ set.Ioo a (a + b)
470+
include
471+
472+
lemma tfae_mem_Ioo_mod :
473+
tfae [mem_Ioo_mod a b x,
474+
to_Ico_mod a hb x = to_Ioc_mod a hb x,
475+
to_Ico_mod a hb x + b ≠ to_Ioc_mod a hb x,
476+
to_Ico_mod a hb x ≠ a] :=
477+
begin
478+
tfae_have : 12,
479+
{ exact λ ⟨i, hi⟩, ((to_Ico_mod_eq_iff hb).2 ⟨hi.1.le, hi.2, i, add_sub_cancel' x _⟩).trans
480+
((to_Ioc_mod_eq_iff hb).2 ⟨hi.1, hi.2.le, i, add_sub_cancel' x _⟩).symm },
481+
tfae_have : 23,
482+
{ intro h, rw [h, ne, add_right_eq_self], exact hb.ne' },
483+
tfae_have : 34,
484+
{ refine mt (λ h, _), rw [h, eq_comm, to_Ioc_mod_eq_iff],
485+
refine ⟨lt_add_of_pos_right a hb, le_rfl, to_Ico_div a hb x + 1, _⟩,
486+
conv_lhs { rw [← h, to_Ico_mod, add_assoc, ← add_one_zsmul, add_sub_cancel'] } },
487+
tfae_have : 41,
488+
{ have h' := to_Ico_mod_mem_Ico a hb x, exact λ h, ⟨_, h'.1.lt_of_ne' h, h'.2⟩ },
489+
tfae_finish,
490+
end
491+
492+
variables {a x}
493+
494+
lemma mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod :
495+
mem_Ioo_mod a b x ↔ to_Ico_mod a hb x = to_Ioc_mod a hb x := (tfae_mem_Ioo_mod a hb x).out 0 1
496+
lemma mem_Ioo_mod_iff_to_Ico_mod_add_period_ne_to_Ioc_mod :
497+
mem_Ioo_mod a b x ↔ to_Ico_mod a hb x + b ≠ to_Ioc_mod a hb x := (tfae_mem_Ioo_mod a hb x).out 0 2
498+
lemma mem_Ioo_mod_iff_to_Ico_mod_ne_left :
499+
mem_Ioo_mod a b x ↔ to_Ico_mod a hb x ≠ a := (tfae_mem_Ioo_mod a hb x).out 0 3
500+
lemma mem_Ioo_mod_iff_to_Ioc_mod_ne_right : mem_Ioo_mod a b x ↔ to_Ioc_mod a hb x ≠ a + b :=
501+
begin
502+
rw [mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod, to_Ico_mod_eq_iff hb],
503+
obtain ⟨h₁, h₂⟩ := to_Ioc_mod_mem_Ioc a hb x,
504+
exact ⟨λ h, h.2.1.ne, λ h, ⟨h₁.le, h₂.lt_of_ne h, _, add_sub_cancel' x _⟩⟩,
505+
end
506+
507+
lemma mem_Ioo_mod_iff_to_Ico_div_eq_to_Ioc_div :
508+
mem_Ioo_mod a b x ↔ to_Ico_div a hb x = to_Ioc_div a hb x :=
509+
by rw [mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod hb,
510+
to_Ico_mod, to_Ioc_mod, add_right_inj, (zsmul_strict_mono_left hb).injective.eq_iff]
511+
512+
lemma mem_Ioo_mod_iff_to_Ico_div_add_one_ne_to_Ioc_div :
513+
mem_Ioo_mod a b x ↔ to_Ico_div a hb x + 1 ≠ to_Ioc_div a hb x :=
514+
by rw [mem_Ioo_mod_iff_to_Ico_mod_add_period_ne_to_Ioc_mod hb, ne, ne, to_Ico_mod, to_Ioc_mod,
515+
add_assoc, add_right_inj, ← add_one_zsmul, (zsmul_strict_mono_left hb).injective.eq_iff]
516+
517+
include hb
518+
519+
lemma mem_Ioo_mod_iff_sub_ne_zsmul : mem_Ioo_mod a b x ↔ ∀ z : ℤ, a - x ≠ z • b :=
520+
begin
521+
rw [mem_Ioo_mod_iff_to_Ico_mod_ne_left hb, ← not_iff_not],
522+
push_neg, split; intro h,
523+
{ rw ← h, exact ⟨_, add_sub_cancel' x _⟩ },
524+
{ exact (to_Ico_mod_eq_iff hb).2 ⟨le_rfl, lt_add_of_pos_right a hb, h⟩ },
525+
end
526+
527+
lemma mem_Ioo_mod_iff_eq_mod_zmultiples :
528+
mem_Ioo_mod a b x ↔ (x : α ⧸ add_subgroup.zmultiples b) ≠ a :=
529+
begin
530+
rw [mem_Ioo_mod_iff_sub_ne_zsmul hb, ne, eq_comm,
531+
quotient_add_group.eq_iff_sub_mem, add_subgroup.mem_zmultiples_iff],
532+
push_neg, simp_rw ne_comm,
533+
end
534+
535+
lemma Ico_eq_locus_Ioc_eq_Union_Ioo :
536+
{x | to_Ico_mod a hb x = to_Ioc_mod a hb x} = ⋃ z : ℤ, set.Ioo (a - z • b) (a + b - z • b) :=
537+
begin
538+
ext1, simp_rw [set.mem_set_of, set.mem_Union, ← set.add_mem_Ioo_iff_left],
539+
exact (mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod hb).symm,
540+
end
541+
542+
end Ico_Ioc
543+
460544
lemma to_Ico_mod_eq_self {a b x : α} (hb : 0 < b) : to_Ico_mod a hb x = x ↔ a ≤ x ∧ x < a + b :=
461545
begin
462546
rw to_Ico_mod_eq_iff,

src/topology/instances/add_circle.lean

Lines changed: 143 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,58 @@ the rational circle `add_circle (1 : ℚ)`, and so we set things up more general
5050
noncomputable theory
5151

5252
open set function add_subgroup topological_space
53+
open_locale topological_space
5354

54-
variables {𝕜 : Type*} {B : Type*}
55+
variables {𝕜 B : Type*}
56+
57+
section continuity
58+
59+
variables [linear_ordered_add_comm_group 𝕜] [archimedean 𝕜]
60+
[topological_space 𝕜] [order_topology 𝕜] (a : 𝕜) {p : 𝕜} (hp : 0 < p) (x : 𝕜)
61+
62+
lemma continuous_right_to_Ico_mod : continuous_within_at (to_Ico_mod a hp) (Ici x) x :=
63+
begin
64+
intros s h,
65+
rw [filter.mem_map, mem_nhds_within_iff_exists_mem_nhds_inter],
66+
haveI : nontrivial 𝕜 := ⟨⟨0, p, hp.ne⟩⟩,
67+
simp_rw mem_nhds_iff_exists_Ioo_subset at h ⊢,
68+
obtain ⟨l, u, hxI, hIs⟩ := h,
69+
let d := to_Ico_div a hp x • p,
70+
have hd := to_Ico_mod_mem_Ico a hp x,
71+
simp_rw [subset_def, mem_inter_iff],
72+
refine ⟨_, ⟨l - d, min (a + p) u - d, _, λ x, id⟩, λ y, _⟩;
73+
simp_rw [← add_mem_Ioo_iff_left, mem_Ioo, lt_min_iff],
74+
{ exact ⟨hxI.1, hd.2, hxI.2⟩ },
75+
{ rintro ⟨h, h'⟩, apply hIs,
76+
rw [← to_Ico_mod_add_zsmul, (to_Ico_mod_eq_self _).2],
77+
exacts [⟨h.1, h.2.2⟩, ⟨hd.1.trans (add_le_add_right h' _), h.2.1⟩] },
78+
end
79+
80+
lemma continuous_left_to_Ioc_mod : continuous_within_at (to_Ioc_mod a hp) (Iic x) x :=
81+
begin
82+
rw (funext (λ y, eq.trans (by rw neg_neg) $ to_Ioc_mod_neg _ _ _) :
83+
to_Ioc_mod a hp = (λ x, p - x) ∘ to_Ico_mod (-a) hp ∘ has_neg.neg),
84+
exact ((continuous_sub_left _).continuous_at.comp_continuous_within_at $
85+
(continuous_right_to_Ico_mod _ _ _).comp continuous_neg.continuous_within_at $ λ y, neg_le_neg),
86+
end
87+
88+
variables {x} (hx : (x : 𝕜 ⧸ zmultiples p) ≠ a)
89+
90+
lemma to_Ico_mod_eventually_eq_to_Ioc_mod : to_Ico_mod a hp =ᶠ[𝓝 x] to_Ioc_mod a hp :=
91+
is_open.mem_nhds (by {rw Ico_eq_locus_Ioc_eq_Union_Ioo, exact is_open_Union (λ i, is_open_Ioo)}) $
92+
(mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod hp).1 ((mem_Ioo_mod_iff_eq_mod_zmultiples hp).2 hx)
93+
94+
lemma continuous_at_to_Ico_mod : continuous_at (to_Ico_mod a hp) x :=
95+
let h := to_Ico_mod_eventually_eq_to_Ioc_mod a hp hx in continuous_at_iff_continuous_left_right.2 $
96+
⟨(continuous_left_to_Ioc_mod a hp x).congr_of_eventually_eq
97+
(h.filter_mono nhds_within_le_nhds) h.eq_of_nhds, continuous_right_to_Ico_mod a hp x⟩
98+
99+
lemma continuous_at_to_Ioc_mod : continuous_at (to_Ioc_mod a hp) x :=
100+
let h := to_Ico_mod_eventually_eq_to_Ioc_mod a hp hx in continuous_at_iff_continuous_left_right.2 $
101+
⟨continuous_left_to_Ioc_mod a hp x, (continuous_right_to_Ico_mod a hp x).congr_of_eventually_eq
102+
(h.symm.filter_mono nhds_within_le_nhds) h.symm.eq_of_nhds⟩
103+
104+
end continuity
55105

56106
/-- The "additive circle": `𝕜 ⧸ (ℤ ∙ p)`. See also `circle` and `real.angle`. -/
57107
@[derive [add_comm_group, topological_space, topological_add_group, inhabited, has_coe_t 𝕜],
@@ -93,7 +143,7 @@ end
93143
lemma coe_period : (p : add_circle p) = 0 :=
94144
(quotient_add_group.eq_zero_iff p).2 $ mem_zmultiples p
95145

96-
@[simp] lemma coe_add_period (x : 𝕜) : (((x + p) : 𝕜) : add_circle p) = x :=
146+
@[simp] lemma coe_add_period (x : 𝕜) : ((x + p : 𝕜) : add_circle p) = x :=
97147
by rw [coe_add, ←eq_sub_iff_add_eq', sub_self, coe_period]
98148

99149
@[continuity, nolint unused_arguments] protected lemma continuous_mk' :
@@ -105,12 +155,22 @@ include hp
105155

106156
variables (a : 𝕜) [archimedean 𝕜]
107157

108-
/-- The natural equivalence between `add_circle p` and the half-open interval `[a, a + p)`. -/
158+
/-- The equivalence between `add_circle p` and the half-open interval `[a, a + p)`, whose inverse
159+
is the natural quotient map. -/
109160
def equiv_Ico : add_circle p ≃ Ico a (a + p) := quotient_add_group.equiv_Ico_mod a hp.out
110161

111-
/-- Given a function on `[a, a + p)`, lift it to `add_circle p`. -/
162+
/-- The equivalence between `add_circle p` and the half-open interval `(a, a + p]`, whose inverse
163+
is the natural quotient map. -/
164+
def equiv_Ioc : add_circle p ≃ Ioc a (a + p) := quotient_add_group.equiv_Ioc_mod a hp.out
165+
166+
/-- Given a function on `𝕜`, return the unique function on `add_circle p` agreeing with `f` on
167+
`[a, a + p)`. -/
112168
def lift_Ico (f : 𝕜 → B) : add_circle p → B := restrict _ f ∘ add_circle.equiv_Ico p a
113169

170+
/-- Given a function on `𝕜`, return the unique function on `add_circle p` agreeing with `f` on
171+
`(a, a + p]`. -/
172+
def lift_Ioc (f : 𝕜 → B) : add_circle p → B := restrict _ f ∘ add_circle.equiv_Ioc p a
173+
114174
variables {p a}
115175

116176
lemma coe_eq_coe_iff_of_mem_Ico {x y : 𝕜}
@@ -132,16 +192,54 @@ begin
132192
refl,
133193
end
134194

195+
lemma lift_Ioc_coe_apply {f : 𝕜 → B} {x : 𝕜} (hx : x ∈ Ioc a (a + p)) : lift_Ioc p a f ↑x = f x :=
196+
begin
197+
have : (equiv_Ioc p a) x = ⟨x, hx⟩,
198+
{ rw equiv.apply_eq_iff_eq_symm_apply,
199+
refl, },
200+
rw [lift_Ioc, comp_apply, this],
201+
refl,
202+
end
203+
135204
variables (p a)
136205

206+
section continuity
207+
137208
@[continuity] lemma continuous_equiv_Ico_symm : continuous (equiv_Ico p a).symm :=
138209
continuous_quotient_mk.comp continuous_subtype_coe
139210

211+
@[continuity] lemma continuous_equiv_Ioc_symm : continuous (equiv_Ioc p a).symm :=
212+
continuous_quotient_mk.comp continuous_subtype_coe
213+
214+
variables {x : add_circle p} (hx : x ≠ a)
215+
include hx
216+
217+
lemma continuous_at_equiv_Ico : continuous_at (equiv_Ico p a) x :=
218+
begin
219+
induction x using quotient_add_group.induction_on',
220+
rw [continuous_at, filter.tendsto, quotient_add_group.nhds_eq, filter.map_map],
221+
apply continuous_at.cod_restrict, exact continuous_at_to_Ico_mod a hp.out hx,
222+
end
223+
224+
lemma continuous_at_equiv_Ioc : continuous_at (equiv_Ioc p a) x :=
225+
begin
226+
induction x using quotient_add_group.induction_on',
227+
rw [continuous_at, filter.tendsto, quotient_add_group.nhds_eq, filter.map_map],
228+
apply continuous_at.cod_restrict, exact continuous_at_to_Ioc_mod a hp.out hx,
229+
end
230+
231+
end continuity
232+
140233
/-- The image of the closed-open interval `[a, a + p)` under the quotient map `𝕜 → add_circle p` is
141234
the entire space. -/
142235
@[simp] lemma coe_image_Ico_eq : (coe : 𝕜 → add_circle p) '' Ico a (a + p) = univ :=
143236
by { rw image_eq_range, exact (equiv_Ico p a).symm.range_eq_univ }
144237

238+
/-- The image of the closed-open interval `[a, a + p)` under the quotient map `𝕜 → add_circle p` is
239+
the entire space. -/
240+
@[simp] lemma coe_image_Ioc_eq : (coe : 𝕜 → add_circle p) '' Ioc a (a + p) = univ :=
241+
by { rw image_eq_range, exact (equiv_Ioc p a).symm.range_eq_univ }
242+
145243
/-- The image of the closed interval `[0, p]` under the quotient map `𝕜 → add_circle p` is the
146244
entire space. -/
147245
@[simp] lemma coe_image_Icc_eq : (coe : 𝕜 → add_circle p) '' Icc a (a + p) = univ :=
@@ -357,14 +455,12 @@ local attribute [instance] fact_zero_lt_one
357455
abbreviation unit_add_circle := add_circle (1 : ℝ)
358456

359457
section identify_Icc_ends
360-
/-! This section proves that for any `a`, the natural map from `[a, a + p] ⊂ ` to `add_circle p`
458+
/-! This section proves that for any `a`, the natural map from `[a, a + p] ⊂ 𝕜` to `add_circle p`
361459
gives an identification of `add_circle p`, as a topological space, with the quotient of `[a, a + p]`
362460
by the equivalence relation identifying the endpoints. -/
363461

364462
namespace add_circle
365463

366-
section linear_ordered_add_comm_group
367-
368464
variables [linear_ordered_add_comm_group 𝕜] [topological_space 𝕜] [order_topology 𝕜]
369465
(p a : 𝕜) [hp : fact (0 < p)]
370466

@@ -383,7 +479,7 @@ variables [archimedean 𝕜]
383479
/-- The equivalence between `add_circle p` and the quotient of `[a, a + p]` by the relation
384480
identifying the endpoints. -/
385481
def equiv_Icc_quot : 𝕋 ≃ quot (endpoint_ident p a) :=
386-
{ to_fun := λ x, quot.mk _ $ subtype.map id Ico_subset_Icc_self (equiv_Ico _ _ x),
482+
{ to_fun := λ x, quot.mk _ $ inclusion Ico_subset_Icc_self (equiv_Ico _ _ x),
387483
inv_fun := λ x, quot.lift_on x coe $ by { rintro _ _ ⟨_⟩, exact (coe_add_period p a).symm },
388484
left_inv := (equiv_Ico p a).symm_apply_apply,
389485
right_inv := quot.ind $ by
@@ -396,54 +492,61 @@ def equiv_Icc_quot : 𝕋 ≃ quot (endpoint_ident p a) :=
396492
congr, ext1,
397493
apply congr_arg subtype.val ((equiv_Ico p a).right_inv ⟨x, hx.1, hx.2.lt_of_ne h⟩) } }
398494

399-
end linear_ordered_add_comm_group
400-
401-
section real
495+
lemma equiv_Icc_quot_comp_mk_eq_to_Ico_mod : equiv_Icc_quot p a ∘ quotient.mk' =
496+
λ x, quot.mk _ ⟨to_Ico_mod a hp.out x, Ico_subset_Icc_self $ to_Ico_mod_mem_Ico a _ x⟩ := rfl
402497

403-
variables {p a : ℝ} [hp : fact (0 < p)]
404-
include hp
405-
406-
local notation `𝕋` := add_circle p
407-
408-
/- doesn't work if inlined in `homeo_of_equiv_compact_to_t2` -- why? -/
409-
private lemma continuous_equiv_Icc_quot_symm : continuous (equiv_Icc_quot p a).symm :=
410-
continuous_quot_lift _ $ (add_circle.continuous_mk' p).comp continuous_subtype_coe
498+
lemma equiv_Icc_quot_comp_mk_eq_to_Ioc_mod : equiv_Icc_quot p a ∘ quotient.mk' =
499+
λ x, quot.mk _ ⟨to_Ioc_mod a hp.out x, Ioc_subset_Icc_self $ to_Ioc_mod_mem_Ioc a _ x⟩ :=
500+
begin
501+
rw equiv_Icc_quot_comp_mk_eq_to_Ico_mod, funext,
502+
by_cases mem_Ioo_mod a p x,
503+
{ simp_rw (mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod hp.out).1 h },
504+
{ simp_rw [not_imp_comm.1 (mem_Ioo_mod_iff_to_Ico_mod_ne_left hp.out).2 h,
505+
not_imp_comm.1 (mem_Ioo_mod_iff_to_Ioc_mod_ne_right hp.out).2 h],
506+
exact quot.sound endpoint_ident.mk },
507+
end
411508

412-
/-- The natural map from `[a, a + p] ⊂ ` with endpoints identified to ` / ℤ • p`, as a
509+
/-- The natural map from `[a, a + p] ⊂ 𝕜` with endpoints identified to `𝕜 / ℤ • p`, as a
413510
homeomorphism of topological spaces. -/
414-
def homeo_Icc_quot : 𝕋 ≃ₜ quot (endpoint_ident p a) :=
415-
(continuous.homeo_of_equiv_compact_to_t2 continuous_equiv_Icc_quot_symm).symm
511+
def homeo_Icc_quot : 𝕋 ≃ₜ quot (endpoint_ident p a) :=
512+
{ to_equiv := equiv_Icc_quot p a,
513+
continuous_to_fun := begin
514+
simp_rw [quotient_map_quotient_mk.continuous_iff,
515+
continuous_iff_continuous_at, continuous_at_iff_continuous_left_right],
516+
intro x, split,
517+
work_on_goal 1 { erw equiv_Icc_quot_comp_mk_eq_to_Ioc_mod },
518+
work_on_goal 2 { erw equiv_Icc_quot_comp_mk_eq_to_Ico_mod },
519+
all_goals { apply continuous_quot_mk.continuous_at.comp_continuous_within_at,
520+
rw inducing_coe.continuous_within_at_iff },
521+
{ apply continuous_left_to_Ioc_mod },
522+
{ apply continuous_right_to_Ico_mod },
523+
end,
524+
continuous_inv_fun := continuous_quot_lift _
525+
((add_circle.continuous_mk' p).comp continuous_subtype_coe) }
526+
527+
/-! We now show that a continuous function on `[a, a + p]` satisfying `f a = f (a + p)` is the
528+
pullback of a continuous function on `add_circle p`. -/
416529

417-
/-! We now show that a continuous function on `[a, a + p]` satisfying `f a = f (a + p)` is
418-
the pullback of a continuous function on `unit_add_circle`. -/
419-
420-
lemma eq_of_end_ident {f : ℝ → B} (hf : f a = f (a + p)) (x y : Icc a (a + p)) :
421-
endpoint_ident p a x y → f x = f y := by { rintro ⟨_⟩, exact hf }
530+
variables {p a}
422531

423-
lemma lift_Ico_eq_lift_Icc {f : ℝ → B} (h : f a = f (a + p)) :
424-
lift_Ico p a f = (quot.lift (restrict (Icc a $ a + p) f) $ eq_of_end_ident h)
425-
∘ equiv_Icc_quot p a :=
426-
funext (λ x, by refl)
532+
lemma lift_Ico_eq_lift_Icc {f : 𝕜 → B} (h : f a = f (a + p)) : lift_Ico p a f =
533+
quot.lift (restrict (Icc a $ a + p) f) (by { rintro _ _ ⟨_⟩, exact h }) ∘ equiv_Icc_quot p a :=
534+
rfl
427535

428-
lemma lift_Ico_continuous [topological_space B] {f : → B} (hf : f a = f (a + p))
536+
lemma lift_Ico_continuous [topological_space B] {f : 𝕜 → B} (hf : f a = f (a + p))
429537
(hc : continuous_on f $ Icc a (a + p)) : continuous (lift_Ico p a f) :=
430538
begin
431539
rw lift_Ico_eq_lift_Icc hf,
432-
refine continuous.comp _ homeo_Icc_quot.continuous_to_fun,
540+
refine continuous.comp _ (homeo_Icc_quot p a).continuous_to_fun,
433541
exact continuous_coinduced_dom.mpr (continuous_on_iff_continuous_restrict.mp hc),
434542
end
435543

436-
end real
437-
438544
section zero_based
439545

440-
variables {p : ℝ} [hp : fact (0 < p)]
441-
include hp
442-
443-
lemma lift_Ico_zero_coe_apply {f : ℝ → B} {x : ℝ} (hx : x ∈ Ico 0 p) :
546+
lemma lift_Ico_zero_coe_apply {f : 𝕜 → B} {x : 𝕜} (hx : x ∈ Ico 0 p) :
444547
lift_Ico p 0 f ↑x = f x := lift_Ico_coe_apply (by rwa zero_add)
445548

446-
lemma lift_Ico_zero_continuous [topological_space B] {f : → B}
549+
lemma lift_Ico_zero_continuous [topological_space B] {f : 𝕜 → B}
447550
(hf : f 0 = f p) (hc : continuous_on f $ Icc 0 p) : continuous (lift_Ico p 0 f) :=
448551
lift_Ico_continuous (by rwa zero_add : f 0 = f (0 + p)) (by rwa zero_add)
449552

0 commit comments

Comments
 (0)