Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Mathlib.Analysis.InnerProductSpace.Basic public import Mathlib.Geometry.Manifold.Diffeomorph

The time manifold

In this module we define the type TimeMan, corresponding to the time manifold, without any additional structures except an orientation, such as a choice of metric or origin. I.e. it is a manifold diffeomorphic to ℝ with no additional structure.

If you are looking for a more standard version of time see the type Time.

TimeMan is sometimes called topological time, due to the absence of a metric, and its use in topological field theories.

Implementation details

The manifold TimeMan is defined via the type ℝ, and thus inherits a given choice of map TimeMan.val : TimeMan β†’ ℝ, which can be extended to a homeomorphism or a diffeomorphism. When using TimeMan.val, one should be aware that using it does constitute a choice being made.

@[expose] public section

The type TimeMan represents the time manifold. Mathematically TimeMan is a manifold diffeomorphic to ℝ with an orientation but no additional structure.

The choice of a map from TimeMan to ℝ.

structure TimeMan where val : ℝ

The topology on TimeMan.

The topology on TimeMan is induced from the topology on ℝ, via the choice of map TimeMan.val.

The instance of a topological space on TimeMan induced by the map TimeMan.val. s

instance : TopologicalSpace TimeMan := TopologicalSpace.induced TimeMan.val PseudoMetricSpace.toUniformSpace.toTopologicalSpace
lemma val_surjective : Function.Surjective TimeMan.val := ⊒ Function.Surjective val t:β„βŠ’ βˆƒ a, a.val = t All goals completed! πŸ™@[simp] lemma val_range : Set.range val = Set.univ := ⊒ Set.range val = Set.univ All goals completed! πŸ™lemma val_inducing : Topology.IsInducing TimeMan.val where eq_induced := rfllemma val_injective : Function.Injective TimeMan.val := ⊒ Function.Injective val t1:TimeMant2:TimeManh:t1.val = t2.val⊒ t1 = t2 t2:TimeManval✝:ℝh:{ val := val✝ }.val = t2.val⊒ { val := val✝ } = t2 val✝¹:ℝval✝:ℝh:{ val := val✝¹ }.val = { val := val✝ }.val⊒ { val := val✝¹ } = { val := val✝ } All goals completed! πŸ™lemma val_isOpenEmbedding : Topology.IsOpenEmbedding TimeMan.val where eq_induced := rfl isOpen_range := ⊒ IsOpen (Set.range val) All goals completed! πŸ™ injective := val_injectivelemma isOpen_iff {s : Set TimeMan} : IsOpen s ↔ IsOpen (TimeMan.val '' s) := Topology.IsOpenEmbedding.isOpen_iff_image_isOpen val_isOpenEmbedding

The choice of map Time.val from TimeMan to ℝ as a homeomorphism.

s:Set TimeManhs:IsOpen (val '' s)⊒ IsOpen (?m.66 '' s)s:Set TimeManhs:IsOpen (val '' s)⊒ Function.LeftInverse (fun t => { val := t }) ?m.66s:Set TimeManhs:IsOpen (val '' s)⊒ Function.RightInverse (fun t => { val := t }) ?m.66s:Set TimeManhs:IsOpen (val '' s)⊒ TimeMan β†’ ℝ s:Set TimeManhs:IsOpen (val '' s)⊒ IsOpen (?m.66 '' s) All goals completed! πŸ™ s:Set TimeManhs:IsOpen (val '' s)⊒ Function.LeftInverse (fun t => { val := t }) val s:Set TimeManhs:IsOpen (val '' s)t:TimeMan⊒ (fun t => { val := t }) t.val = t All goals completed! πŸ™ s:Set TimeManhs:IsOpen (val '' s)⊒ Function.RightInverse (fun t => { val := t }) val s:Set TimeManhs:IsOpen (val '' s)x:β„βŠ’ ((fun t => { val := t }) x).val = x All goals completed! πŸ™

The manifold structure on TimeMan

The structure of a charted space on TimeMan

instance : ChartedSpace ℝ TimeMan where atlas := { valHomeomorphism.toOpenPartialHomeomorph } chartAt _ := valHomeomorphism.toOpenPartialHomeomorph mem_chart_source := ⊒ βˆ€ (x : TimeMan), x ∈ valHomeomorphism.toOpenPartialHomeomorph.source All goals completed! πŸ™ chart_mem_atlas := ⊒ βˆ€ (x : TimeMan), valHomeomorphism.toOpenPartialHomeomorph ∈ {valHomeomorphism.toOpenPartialHomeomorph} x:TimeMan⊒ valHomeomorphism.toOpenPartialHomeomorph ∈ {valHomeomorphism.toOpenPartialHomeomorph} All goals completed! πŸ™

The structure of a manifold on TimeMan induced by the choice of map Time.val.

instance : IsManifold π“˜(ℝ, ℝ) Ο‰ TimeMan where compatible := ⊒ βˆ€ {e e' : OpenPartialHomeomorph TimeMan ℝ}, e ∈ atlas ℝ TimeMan β†’ e' ∈ atlas ℝ TimeMan β†’ e.symm ≫ₕ e' ∈ contDiffGroupoid Ο‰ π“˜(ℝ, ℝ) e1:OpenPartialHomeomorph TimeMan ℝe2:OpenPartialHomeomorph TimeMan ℝh1:e1 ∈ atlas ℝ TimeManh2:e2 ∈ atlas ℝ TimeMan⊒ e1.symm ≫ₕ e2 ∈ contDiffGroupoid Ο‰ π“˜(ℝ, ℝ) e1:OpenPartialHomeomorph TimeMan ℝe2:OpenPartialHomeomorph TimeMan ℝh1:e1 = valHomeomorphism.toOpenPartialHomeomorphh2:e2 = valHomeomorphism.toOpenPartialHomeomorph⊒ e1.symm ≫ₕ e2 ∈ contDiffGroupoid Ο‰ π“˜(ℝ, ℝ) ⊒ valHomeomorphism.toOpenPartialHomeomorph.symm ≫ₕ valHomeomorphism.toOpenPartialHomeomorph ∈ contDiffGroupoid Ο‰ π“˜(ℝ, ℝ) All goals completed! πŸ™
lemma val_contDiff : ContMDiff π“˜(ℝ, ℝ) π“˜(ℝ, ℝ) Ο‰ TimeMan.val := ⊒ ContMDiff π“˜(ℝ, ℝ) π“˜(ℝ, ℝ) Ο‰ val ⊒ ContMDiffOn π“˜(ℝ, ℝ) π“˜(ℝ, ℝ) Ο‰ val Set.univ All goals completed! πŸ™

The orientation on TimeMan

The instance of an orientation on TimeMan.

instance : LE TimeMan where le x y := x.val ≀ y.val