Zulip Chat Archive

Stream: Is there code for X?

Topic: PathConnectedSpace ℂˣ


Andrew Yang (Oct 10 2025 at 19:18):

Do we have this? If not, where should this go?
Is there a better proof that avoids such a large import?
Or is there something more general that I should be proving instead?

import Mathlib.Analysis.InnerProductSpace.Basic
import Mathlib.Analysis.NormedSpace.Connected
import Mathlib.LinearAlgebra.Complex.FiniteDimensional

instance : PathConnectedSpace ˣ :=
  have : PathConnectedSpace { z :  // z  0 } :=
    isPathConnected_iff_pathConnectedSpace (F := { z :  | z  0 }).mp
    (isPathConnected_compl_singleton_of_one_lt_rank (by simp) _)
  let e := unitsHomeomorphNeZero (G₀ := )
  e.symm.surjective.pathConnectedSpace e.symm.continuous

Yury G. Kudryashov (Oct 10 2025 at 19:25):

Removing a point from a tvs of dimension larger than one gives you a path connected space

Jireh Loreaux (Oct 10 2025 at 19:25):

That's the result Andrew used already.

Kenny Lau (Oct 10 2025 at 19:27):

exp is surjective, C is path connected

Andrew Yang (Oct 10 2025 at 19:31):

That sounds like more import but I could try.

Andrew Yang (Oct 10 2025 at 19:31):

@loogle Complex.exp, Function.Surjective

Andrew Yang (Oct 10 2025 at 19:32):

@loogle Complex.exp, Function.Surjective

Edit: It should be docs#Complex.range_exp

loogle (Oct 10 2025 at 19:32):

:shrug: nothing found

Andrew Yang (Oct 10 2025 at 19:38):

Would people prefer this set of imports more?

import Mathlib.Analysis.Convex.PathConnected
import Mathlib.Analysis.SpecialFunctions.Complex.Log

instance : PathConnectedSpace  :=
  IsTopologicalAddGroup.pathConnectedSpace

instance : PathConnectedSpace ˣ :=
  have : PathConnectedSpace { z :  // z  0 } :=
    isPathConnected_iff_pathConnectedSpace (F := {0}).mp
    (by rw [ Complex.range_exp]; exact isPathConnected_range Complex.continuous_exp)
  let e := unitsHomeomorphNeZero (G₀ := )
  e.symm.surjective.pathConnectedSpace e.symm.continuous

Perhaps I can import the former into the latter and put it there?

Kenny Lau (Oct 10 2025 at 19:50):

I tried it myself (unfortunately my attempt is much longer) and found some holes in the API:

import Mathlib.Analysis.CStarAlgebra.Classes
import Mathlib.Analysis.Calculus.MeanValue
import Mathlib.Analysis.SpecialFunctions.Complex.Log

open Complex

noncomputable def cexp' (z : ) : ˣ :=
  Units.mk0 (cexp z) (by simp)

theorem cexp'_surjective : cexp'.Surjective :=
  fun z  log z, Units.ext <| exp_log z.ne_zero

@[simp] lemma unitsHomeomorphNeZero_apply_coe
    {G₀ : Type*} [GroupWithZero G₀] [TopologicalSpace G₀] [ContinuousInv₀ G₀] (x : G₀ˣ) :
    (unitsHomeomorphNeZero (G₀ := G₀)) x = (x : G₀) :=
  rfl

@[simp] lemma unitsHomeomorphNeZero_symm_apply
    {G₀ : Type*} [GroupWithZero G₀] [TopologicalSpace G₀] [ContinuousInv₀ G₀]
    (x : {x : G₀ // x  0}) :
    (unitsHomeomorphNeZero (G₀ := G₀)).symm x = .mk0 x x.2 :=
  (Equiv.symm_apply_eq _).mpr rfl

theorem cexp'_eq : cexp' =
    unitsHomeomorphNeZero.symm  Equiv.setCongr (by ext; aesop)  Set.rangeFactorization cexp :=
  by ext; unfold cexp'; simp

#check Homeomorph.subtype

@[fun_prop] theorem cexp'_continuous : Continuous cexp' := by
  rw [cexp'_eq]; sorry

instance : PathConnectedSpace ˣ :=
  cexp'_surjective.pathConnectedSpace cexp'_continuous

#min_imports

Kenny Lau (Oct 10 2025 at 19:59):

Andrew Yang said:

Would people prefer this set of imports more?

... yeah... i think we can consider "exp" to be basic knowledge...

Kenny Lau (Oct 10 2025 at 20:05):

@Andrew Yang (t,r)(2trt2+1,(t21)rt2+1)(t,r) \mapsto (\frac{2tr}{t^{2}+1},\frac{(t^{2}-1)r}{t^{2}+1}) defines a surjection R×R>0C×\mathbb{R} \times \mathbb{R}_{>0} \to \mathbb{C}^\times

Kenny Lau (Oct 10 2025 at 20:05):

(i basically drew a unit circle using the AG trick and then multiplied by r)

Kenny Lau (Oct 10 2025 at 20:05):

oh wait, no, the AG trick doesn't produce a circle lol

Aaron Liu (Oct 10 2025 at 20:06):

what's AG

Aaron Liu (Oct 10 2025 at 20:06):

algebraic geometry?

Kenny Lau (Oct 10 2025 at 20:06):

algebraic geometry

Kenny Lau (Oct 10 2025 at 20:06):

(-1,0) is on the unit circle, and any line through it has to intersect the circle at exactly one other point, and this defines a rational parametrisation of the circle

Aaron Liu (Oct 10 2025 at 20:07):

is that the stereographic projection?

Aaron Liu (Oct 10 2025 at 20:07):

maybe not quite

Kenny Lau (Oct 10 2025 at 20:07):

yeah

Aaron Liu (Oct 10 2025 at 20:15):

has stereographic projection been reduced to an "AG trick" now

Kenny Lau (Oct 10 2025 at 20:18):

I think the amount of effort to find a "shorter" proof might be the same amount of effort to just draw a path between any two points, lol

Aaron Liu (Oct 10 2025 at 20:29):

yeah just draw a path it's not that hard

Aaron Liu (Oct 10 2025 at 20:30):

although I don't think the path can depend continuously on the desired endpoints

Andrew Yang (Oct 10 2025 at 20:40):

Here's a PR with a stupid proof: #30418. Do people prefer this or a better proof in a later file?

Kenny Lau (Oct 10 2025 at 20:52):

nice proof!


Last updated: Dec 20 2025 at 21:32 UTC