Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
28c58ed
Import complete 1mfld proof development
Vilin97 Sep 21, 2026
a7b89e8
Complete one-manifold classification port and local verification
Vilin97 Sep 21, 2026
1f4bccc
Split manifold classification and gluing proofs into geometric lemmas
Vilin97 Sep 21, 2026
f36b686
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 22, 2026
e45e694
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 23, 2026
0231bab
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 23, 2026
ddb6cf4
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 24, 2026
641ae65
Preserve one-manifold API in public modules
Vilin97 Sep 25, 2026
b86fa39
Sync current main for module checks
Vilin97 Sep 25, 2026
4ade9b5
Contain one-manifold API and remove unused interval scaffolding
Vilin97 Sep 25, 2026
3a37bed
Merge remote-tracking branch 'origin/main' into HEAD
Vilin97 Sep 25, 2026
5548f1f
Merge remote-tracking branch 'origin/main' into HEAD
Vilin97 Sep 25, 2026
a07a240
Qualify namespaced partial-homeomorphism helpers
Vilin97 Sep 25, 2026
83cb928
Trim the one-manifold import index whitespace
Vilin97 Sep 25, 2026
66db25f
Preserve complete real-interval results in the one-manifold namespace
Vilin97 Sep 25, 2026
50bc0d1
Index the restored real-interval module
Vilin97 Sep 25, 2026
8c534dd
Merge main and preserve all YAML project registrations
Vilin97 Sep 26, 2026
5111ee0
Merge main and preserve all YAML project registrations
Vilin97 Sep 26, 2026
4355fa6
Merge remote-tracking branch 'origin/main' into HEAD
Vilin97 Sep 26, 2026
50e9f9b
refactor(OneManifold): share chart overlap and interval arguments
Vilin97 Sep 26, 2026
23d1b0b
Fix interval membership transport after shared overlap refactor
Vilin97 Sep 26, 2026
e2e524d
Merge current main without changing project claims or gates
Vilin97 Sep 26, 2026
e63fd21
Merge current main without changing project claims or gates
Vilin97 Sep 26, 2026
6e2473e
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 26, 2026
cc5e2fc
refactor: factor circle chart construction proofs
Vilin97 Sep 26, 2026
257e2c7
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 26, 2026
487c231
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 26, 2026
37c3f61
refactor(OneManifold): unify bounded chart construction
Vilin97 Sep 26, 2026
12a56b4
Merge remote-tracking branch 'origin/main' into HEAD
Vilin97 Sep 26, 2026
bdacea5
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 26, 2026
e1dc0ac
Merge remote-tracking branch 'origin/main' into pr-479
github-actions[bot] Sep 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions LeanPool.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6668,6 +6668,34 @@ public import LeanPool.Odlyzko.TestFunction.TaylorBound
public import LeanPool.Odlyzko.Theta.PoissonSummation
public import LeanPool.Odlyzko.Theta.TraceDualIdeal
public import LeanPool.Odlyzko.Theta.TraceDualLattice
public import LeanPool.OneManifold
public import LeanPool.OneManifold.OneMfld
public import LeanPool.OneManifold.OneMfld.Charts
public import LeanPool.OneManifold.OneMfld.CircleBlocks
public import LeanPool.OneManifold.OneMfld.CircleGlue
public import LeanPool.OneManifold.OneMfld.Classification
public import LeanPool.OneManifold.OneMfld.ClassifyInterval
public import LeanPool.OneManifold.OneMfld.ClassifyOverlaps
public import LeanPool.OneManifold.OneMfld.ClosureOverlap
public import LeanPool.OneManifold.OneMfld.Compactness
public import LeanPool.OneManifold.OneMfld.FiniteIntervalCharts
public import LeanPool.OneManifold.OneMfld.FinitelyCharted
public import LeanPool.OneManifold.OneMfld.GlueBlocks
public import LeanPool.OneManifold.OneMfld.GlueCore
public import LeanPool.OneManifold.OneMfld.GlueNNReal
public import LeanPool.OneManifold.OneMfld.GlueUI
public import LeanPool.OneManifold.OneMfld.IntervalCharts
public import LeanPool.OneManifold.OneMfld.LocallyConnected
public import LeanPool.OneManifold.OneMfld.NiceCharts
public import LeanPool.OneManifold.OneMfld.Noncompact
public import LeanPool.OneManifold.OneMfld.Normalize
public import LeanPool.OneManifold.OneMfld.Outer
public import LeanPool.OneManifold.OneMfld.PartialHomeomorphHelpers
public import LeanPool.OneManifold.OneMfld.RealIntervals
public import LeanPool.OneManifold.OneMfld.TransitionMono
public import LeanPool.OneManifold.OneMfld.TwoComponents
public import LeanPool.OneManifold.OneMfld.UnitInterval
public import LeanPool.OneManifold.Solution
public import LeanPool.OrderPQ
public import LeanPool.OrderPQ.Basic
public import LeanPool.OrderPQ.IsCyclic
Expand Down
49 changes: 49 additions & 0 deletions LeanPool/OneManifold.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/-
Copyright (c) 2026 Jim Fowler, Dennis Sweeney. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jim Fowler, Dennis Sweeney
-/

module

public import LeanPool.OneManifold.OneMfld
public import LeanPool.OneManifold.OneMfld.Charts
public import LeanPool.OneManifold.OneMfld.CircleBlocks
public import LeanPool.OneManifold.OneMfld.CircleGlue
public import LeanPool.OneManifold.OneMfld.Classification
public import LeanPool.OneManifold.OneMfld.ClassifyInterval
public import LeanPool.OneManifold.OneMfld.ClassifyOverlaps
public import LeanPool.OneManifold.OneMfld.ClosureOverlap
public import LeanPool.OneManifold.OneMfld.Compactness
public import LeanPool.OneManifold.OneMfld.FiniteIntervalCharts
public import LeanPool.OneManifold.OneMfld.FinitelyCharted
public import LeanPool.OneManifold.OneMfld.GlueBlocks
public import LeanPool.OneManifold.OneMfld.GlueCore
public import LeanPool.OneManifold.OneMfld.GlueNNReal
public import LeanPool.OneManifold.OneMfld.GlueUI
public import LeanPool.OneManifold.OneMfld.IntervalCharts
public import LeanPool.OneManifold.OneMfld.LocallyConnected
public import LeanPool.OneManifold.OneMfld.NiceCharts
public import LeanPool.OneManifold.OneMfld.Noncompact
public import LeanPool.OneManifold.OneMfld.Normalize
public import LeanPool.OneManifold.OneMfld.Outer
public import LeanPool.OneManifold.OneMfld.PartialHomeomorphHelpers
public import LeanPool.OneManifold.OneMfld.RealIntervals
public import LeanPool.OneManifold.OneMfld.TransitionMono
public import LeanPool.OneManifold.OneMfld.TwoComponents
public import LeanPool.OneManifold.OneMfld.UnitInterval
public import LeanPool.OneManifold.Solution


/-!
# The classification of compact 1-manifolds

Source: url:https://github.com/sweeneyde/1mfld
Authors: Jim Fowler, Dennis Sweeney
Status: verified
Main declarations: `OneMfld.homeomorph_circle_or_unitInterval`
Tags: topology
MSC: 57N99, 54F65, 68V20
-/

@[expose] public section
9 changes: 9 additions & 0 deletions LeanPool/OneManifold/OneMfld.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/-
Copyright (c) 2026 Jim Fowler, Dennis Sweeney. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jim Fowler, Dennis Sweeney
-/
module

public import LeanPool.OneManifold.OneMfld.Classification
public import LeanPool.OneManifold.OneMfld.RealIntervals
109 changes: 109 additions & 0 deletions LeanPool/OneManifold/OneMfld/Charts.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/-
Copyright (c) 2026 Jim Fowler, Dennis Sweeney. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jim Fowler, Dennis Sweeney
-/
module

public import Mathlib.Tactic
public import LeanPool.OneManifold.OneMfld.PartialHomeomorphHelpers


/-! Interval charts on a 1-manifold charted on `ℝ≥0`, and the `Overlap` relation.

An `OChart` has an open-interval target `Ioo x y` (an interior chart); an `HChart` has a
half-open target `Iio x` (a boundary chart); an `IChart` is either.
-/

@[expose] public section

namespace OneMfld

/-- A one-dimensional chart with an open bounded interval as target. -/
structure OChart (M : Type*) [TopologicalSpace M]
extends OpenPartialHomeomorph M NNReal where
target_ioo : (∃ x y, (Set.Ioo x y = target))

/-- A boundary chart with a half-open interval as target. -/
structure HChart (M : Type*) [TopologicalSpace M]
extends OpenPartialHomeomorph M NNReal where
target_iio : (∃ x, (Set.Iio x = target))

/-- A chart whose target is an open interval or a half-open interval. -/
structure IChart (M : Type*) [TopologicalSpace M]
extends OpenPartialHomeomorph M NNReal where
is_interval : (∃ x y, (Set.Ioo x y = target)) ∨ (∃ x, (Set.Iio x = target))
Comment thread
Vilin97 marked this conversation as resolved.

variable
{M : Type*}
[TopologicalSpace M]

/-- Regard an interior chart as an interval chart. -/
def OChart.toIChart (a : OChart M) : IChart M :=
{ a with is_interval := Or.inl a.target_ioo }

/-- Regard a boundary chart as an interval chart. -/
def HChart.toIChart (a : HChart M) : IChart M :=
{ a with is_interval := Or.inr a.target_iio }

/-- Two sets meet and each has a point outside the other. -/
def Overlap (U : Set α) (V : Set α) : Prop :=
(U ∩ V).Nonempty ∧ (U \ V).Nonempty ∧ (V \ U).Nonempty

theorem does_overlap' (U : Set α) (V : Set α) (hu : ¬ U ⊆ V)
: (U \ V).Nonempty := Set.sdiff_nonempty.mpr hu

theorem does_overlap (U : Set α) (V : Set α) (h : (U ∩ V).Nonempty) (hu : ¬ U ⊆ V) (hv : ¬ V ⊆ U)
: Overlap U V := by
apply And.intro
· exact h
· apply And.intro
· exact does_overlap' U V hu
· exact does_overlap' V U hv

theorem overlap_symm {U : Set α} {V : Set α} (h : Overlap U V) : Overlap V U := by
dsimp [Overlap] at h
apply And.intro
· exact Set.inter_nonempty_iff_exists_right.mpr h.1
· apply And.intro
· exact h.2.2
· exact h.2.1

lemma Overlap.nonempty {U : Set α} {V : Set α} (h : Overlap U V) : (Nonempty U) ∧ (Nonempty V) := by
have nonempty : (U ∩ V).Nonempty := h.1
apply And.intro
· exact Set.Nonempty.to_subtype (Set.Nonempty.left nonempty)
· exact Set.Nonempty.to_subtype (Set.Nonempty.right nonempty)

lemma chart_target_nonempty (φ : OpenPartialHomeomorph M NNReal) (h : φ.source.Nonempty) :
φ.target.Nonempty := by
rw [← PartialEquiv.image_source_eq_target φ.toPartialEquiv]
exact h.image _

lemma OChart.connected_source (a : OChart M) (h : a.source.Nonempty) :
IsConnected a.source := by
apply (partial_homeo_source_connected_iff_target_connected a.toOpenPartialHomeomorph).mpr
obtain ⟨x, y, hxy⟩ := a.target_ioo
have hne : a.target.Nonempty := chart_target_nonempty _ h
rw [←hxy] at hne ⊢
exact isConnected_Ioo (Set.nonempty_Ioo.mp hne)

lemma HChart.connected_source (a : HChart M) (h : a.source.Nonempty) :
IsConnected a.source := by
apply (partial_homeo_source_connected_iff_target_connected a.toOpenPartialHomeomorph).mpr
obtain ⟨x, hx⟩ := a.target_iio
have hne : a.target.Nonempty := chart_target_nonempty _ h
rw [←hx] at hne ⊢
exact ⟨hne, isPreconnected_Iio⟩

lemma IChart.connected_source (a : IChart M) (h : a.source.Nonempty) :
IsConnected a.source := by
apply (partial_homeo_source_connected_iff_target_connected a.toOpenPartialHomeomorph).mpr
have hne : a.target.Nonempty := chart_target_nonempty _ h
rcases a.is_interval with (⟨x, y, hxy⟩ | ⟨x, hx⟩)
· rw [←hxy] at hne ⊢
exact isConnected_Ioo (Set.nonempty_Ioo.mp hne)
· rw [←hx] at hne ⊢
exact ⟨hne, isPreconnected_Iio⟩

end OneMfld
Loading
Loading