A machine-checked solution to the Jacobians challenge

14.6. Cech.CechRefinement🔗

Jacobians.Cech.CechRefinementsource

IsRefinement

r : 𝔙.ι → 𝔘.ι exhibits 𝔙 as a refinement of 𝔘: each refining set 𝔙.U j is contained in the chosen larger set 𝔘.U (r j). This is exactly the data that induces a restriction map of Čech cochains Cochain^k 𝔘 → Cochain^k 𝔙 (reindex by r, restrict along 𝔙.U j ≤ 𝔘.U (r j)). (𝔙 being a cover is recorded in 𝔙.covers; the refinement datum only needs the per-index containment.)

def IsRefinement (𝔙 𝔘 : FiniteCover X) (r : 𝔙.ι → 𝔘.ι) : Prop

pair_le

On a pairwise overlap, the refining overlap sits inside the reindexed coarse overlap: 𝔙.U a ⊓ 𝔙.U b ≤ 𝔘.U (r a) ⊓ 𝔘.U (r b).

theorem pair_le (h : IsRefinement 𝔙 𝔘 r) (a b : 𝔙.ι) :
    𝔙.U a ⊓ 𝔙.U b ≤ 𝔘.U (r a) ⊓ 𝔘.U (r b)

triple_le

On a triple overlap, the refining overlap sits inside the reindexed coarse triple overlap.

theorem triple_le (h : IsRefinement 𝔙 𝔘 r) (a b c : 𝔙.ι) :
    𝔙.U a ⊓ 𝔙.U b ⊓ 𝔙.U c ≤ 𝔘.U (r a) ⊓ 𝔘.U (r b) ⊓ 𝔘.U (r c)

refineC0

Refinement on 0-cochains: (refineC0 c)_j = c_{r j} |_{𝔙.U j}.

noncomputable def refineC0 : 𝔘.Cochain0 →ₗ[ℂ] 𝔙.Cochain0

refineC0_apply

@[simp] theorem refineC0_apply (c : 𝔘.Cochain0) (j : 𝔙.ι) :
    h.refineC0 c j = rawRestrictG (h j) (c (r j))

refineC1

Refinement on 1-cochains: (refineC1 g)_{ab} = g_{(r a)(r b)} |_{𝔙.U a ⊓ 𝔙.U b}.

noncomputable def refineC1 : 𝔘.Cochain1 →ₗ[ℂ] 𝔙.Cochain1

refineC1_apply

@[simp] theorem refineC1_apply (g : 𝔘.Cochain1) (p : 𝔙.ι × 𝔙.ι) :
    h.refineC1 g p = rawRestrictG (h.pair_le p.1 p.2) (g (r p.1, r p.2))

refineC2

Refinement on 2-cochains.

noncomputable def refineC2 : 𝔘.Cochain2 →ₗ[ℂ] 𝔙.Cochain2

refineC2_apply

@[simp] theorem refineC2_apply (g : 𝔘.Cochain2) (t : 𝔙.ι × 𝔙.ι × 𝔙.ι) :
    h.refineC2 g t = rawRestrictG (h.triple_le t.1 t.2.1 t.2.2) (g (r t.1, r t.2.1, r t.2.2))

refineC1_comp_cechDelta0

δ⁰ is natural for refinement. δ⁰_𝔙 ∘ refineC0 = refineC1 ∘ δ⁰_𝔘: refining then taking the fine coboundary equals taking the coarse coboundary then refining. Componentwise on (a,b) both sides are c_{r b}|_{𝔙ab} − c_{r a}|_{𝔙ab} (nested restrictions collapse).

theorem refineC1_comp_cechDelta0 :
    𝔙.cechDelta0 ∘ₗ h.refineC0 = h.refineC1 ∘ₗ 𝔘.cechDelta0

refineC2_comp_cechDelta1

δ¹ is natural for refinement. δ¹_𝔙 ∘ refineC1 = refineC2 ∘ δ¹_𝔘. Componentwise on the triple (a,b,c) both sides are the alternating sum g_{(rb)(rc)} − g_{(ra)(rc)} + g_{(ra)(rb)}, each germ-restricted to 𝔙.U a ⊓ 𝔙.U b ⊓ 𝔙.U c (nested restrictions collapse).

theorem refineC2_comp_cechDelta1 :
    𝔙.cechDelta1 ∘ₗ h.refineC1 = h.refineC2 ∘ₗ 𝔘.cechDelta1

refineC0_mem_sections0

Refinement maps 𝒪_D 0-sections to 𝒪_D 0-sections.

theorem refineC0_mem_sections0 [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X]
    {c : 𝔘.Cochain0} (hc : c ∈ 𝔘.sections0 D) :
    h.refineC0 c ∈ 𝔙.sections0 D

refineC1_mem_sections1

Refinement maps 𝒪_D 1-sections to 𝒪_D 1-sections.

theorem refineC1_mem_sections1 [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X]
    {g : 𝔘.Cochain1} (hg : g ∈ 𝔘.sections1 D) :
    h.refineC1 g ∈ 𝔙.sections1 D

refineC1_mem_cocycles1

Refinement maps 𝒪_D 1-cocycles to 𝒪_D 1-cocycles (refineC1 sends ker δ¹_𝔘 into ker δ¹_𝔙 by the chain-map property, and preserves the 𝒪_D sections).

theorem refineC1_mem_cocycles1 [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X]
    {g : 𝔘.Cochain1} (hg : g ∈ 𝔘.cocycles1 D) :
    h.refineC1 g ∈ 𝔙.cocycles1 D

refineC1_mem_coboundaries1

Refinement maps 𝒪_D 1-coboundaries to 𝒪_D 1-coboundaries (a coboundary δ⁰_𝔘 c with c an 𝒪_D 0-section refines to δ⁰_𝔙 (refineC0 c) via the chain-map property, with refineC0 c again an 𝒪_D 0-section).

theorem refineC1_mem_coboundaries1 [T2Space X] [CompactSpace X] [ConnectedSpace X]
    [ChartedSpace ℂ X] [IsManifold 𝓘(ℂ) ω X]
    {g : 𝔘.Cochain1} (hg : g ∈ 𝔘.coboundaries1 D) :
    h.refineC1 g ∈ 𝔙.coboundaries1 D

refineZ1

The cocycle-level refinement map Z¹(𝔘, 𝒪_D) →ₗ[ℂ] Z¹(𝔙, 𝒪_D): refineC1 corestricted to the cocycle subspaces (using refineC1_mem_cocycles1).

noncomputable def refineZ1 [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] :
    ↥(𝔘.cocycles1 D) →ₗ[ℂ] ↥(𝔙.cocycles1 D)

refineH1

The induced map on Čech cechH1 𝔘 D →ₗ[ℂ] cechH1 𝔙 D (refineH1). The cocycle-level refinement refineZ1 sends 𝒪_D-coboundaries on 𝔘 to 𝒪_D-coboundaries on 𝔙 (refineC1_mem_coboundaries1), so it descends to the H¹ = Z¹/B¹ quotients (Submodule.mapQ). This is the comparison arrow the Leray cover-independence isomorphism is built on — the standard chain-homotopy argument shows it is a bijection when both covers are Leray (CechRefinementLeray).

noncomputable def refineH1 [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X] : 𝔘.cechH1 D →ₗ[ℂ] 𝔙.cechH1 D

refineH1_mk

@[simp] theorem refineH1_mk [T2Space X] [CompactSpace X] [ConnectedSpace X] [ChartedSpace ℂ X]
    [IsManifold 𝓘(ℂ) ω X]
    (g : ↥(𝔘.cocycles1 D)) :
    h.refineH1 D (Submodule.Quotient.mk g) = Submodule.Quotient.mk (h.refineZ1 D g)

id

The identity is a refinement of a cover by itself (𝔘.U i ≤ 𝔘.U (id i)).

theorem id (𝔘 : FiniteCover X) : IsRefinement 𝔘 𝔘 id

comp

A composite of refinement-index maps s : 𝔚.ι → 𝔙.ι, r : 𝔙.ι → 𝔘.ι is a refinement-index map 𝔚 → 𝔘 via r ∘ s.

theorem comp {s : 𝔚.ι → 𝔙.ι} {r : 𝔙.ι → 𝔘.ι}
    (hs : IsRefinement 𝔚 𝔙 s) (hr : IsRefinement 𝔙 𝔘 r) :
    IsRefinement 𝔚 𝔘 (r ∘ s)