Paper XI · Lean source
GraphChordCharacters.lean
Selected results recorded Coverage and evidence
Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (3)
PaperXI/GraphChordCharacters.lean144 lines
Original source path
formalization/PaperXI/GraphChordCharacters.leanSkip declarations and read code
1 import PaperXI.GraphTree
2 import PaperXI.GraphLoopRepresentation
3 import PaperXI.ScalarHolonomy
4
5 /-!
6 # Independent scalar tests on fundamental graph cycles
7
8 Every assignment of unit scalars to the chords of the constructed rooted tree
9 is realized by actual one-dimensional edge transport: tree edges carry one and
10 each chord carries its prescribed scalar. Thus the scalar cycle tests can vary
11 independently. The same realization gives characters on the actual reduced loop
12 group and its abelianization.
13 -/
14
15 set_option autoImplicit false
16 set_option backward.isDefEq.respectTransparency false
17 noncomputable section
18
19 namespace PaperXI.GraphChordCharacters
20
21 variable {K α : Type*} [Field K] [Quiver α] {r : α}
22
23 /-- Prescribed chord weights, extended by one on the selected tree. -/
24 def weight (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ)
25 (e : GraphTree.Edge α) : Kˣ := by
26 classical
27 exact if h : e ∈ GraphTree.treeEdges T then 1 else t ⟨e, h⟩
28
29 @[simp] theorem weight_tree (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ)
30 (e : GraphTree.Edge α) (h : e ∈ GraphTree.treeEdges T) : weight T t e = 1 := by
31 simp [weight, h]
32
33 @[simp] theorem weight_chord (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ)
34 (e : GraphTree.Chord T) : weight T t e.val = t e := by
35 rw [weight, dite_eq_right e.property]
36 rfl
37
38 /-- An actual one-dimensional linear transport system realizing these edge weights. -/
39 def edgeSystem (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ)
40 {u v : α} (e : u ⟶ v) : K ≃ₗ[K] K :=
41 ScalarHolonomy.scalarHom (weight T t ⟨u, v, e⟩)
42
43 @[simp] theorem edgeSystem_chord (T : GraphTree.Rooted α r)
44 (t : GraphTree.Chord T → Kˣ) (e : GraphTree.Chord T) :
45 edgeSystem T t e.val.2.2 = ScalarHolonomy.scalarHom (t e) := by
46 simp [edgeSystem]
47
48 /-- Both directions of every selected tree edge have identity transport. -/
49 theorem traversal_tree (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ)
50 {u v : α} (e : GraphTree.Traversal u v)
51 (h : GraphTree.underlying e ∈ GraphTree.treeEdges T) :
52 GraphTransport.edge (α := α) (V := fun _ => K) (edgeSystem T t) e = LinearEquiv.refl K K := by
53 cases e using Sum.casesOn with
54 | inl e =>
55 change ScalarHolonomy.scalarHom (weight T t ⟨u, v, e⟩) = _
56 change (⟨u, v, e⟩ : GraphTree.Edge α) ∈ GraphTree.treeEdges T at h
57 rw [weight_tree T t _ h, map_one]
58 rfl
59 | inr e =>
60 change (ScalarHolonomy.scalarHom (weight T t ⟨v, u, e⟩)).symm = _
61 change (⟨v, u, e⟩ : GraphTree.Edge α) ∈ GraphTree.treeEdges T at h
62 rw [weight_tree T t _ h, map_one]
63 rfl
64
65 /-- The recursively constructed root paths use only identity edge transports. -/
66 @[simp] theorem rootPath_transport (T : GraphTree.Rooted α r)
67 (t : GraphTree.Chord T → Kˣ) (v : α) :
68 GraphTransport.path (α := α) (V := fun _ => K) (edgeSystem T t) (GraphTree.rootPath T v) =
69 LinearEquiv.refl K K := by
70 apply GraphTree.rooted_induction T (fun v =>
71 GraphTransport.path (α := α) (V := fun _ => K) (edgeSystem T t) (GraphTree.rootPath T v) =
72 LinearEquiv.refl K K)
73 · rw [GraphTree.rootPath_root]
74 rfl
75 · intro a ha
76 rw [← GraphTree.rootPath_parent, GraphTransport.cons, ha,
77 traversal_tree T t (T.parentEdge a) (GraphTree.mem_treeEdges T a)]
78 rfl
79
80 /-- The based fundamental cycle associated with one actual chord. -/
81 def chordLoop (T : GraphTree.Rooted α r) (e : GraphTree.Chord T) :
82 GraphTree.Path r r :=
83 ((GraphTree.rootPath T e.val.1).cons (Sum.inl e.val.2.2)).comp
84 (GraphTree.rootPath T e.val.2.1).reverse
85
86 /-- Each fundamental cycle recovers exactly its freely assigned scalar. -/
87 @[simp] theorem chordLoop_transport (T : GraphTree.Rooted α r)
88 (t : GraphTree.Chord T → Kˣ) (e : GraphTree.Chord T) :
89 GraphTransport.path (α := α) (V := fun _ => K) (edgeSystem T t) (chordLoop (α := α) T e) =
90 ScalarHolonomy.scalarHom (t e) := by
91 ext x
92 simp [chordLoop]
93
94 @[simp] theorem chordLoop_holonomy (T : GraphTree.Rooted α r)
95 (t : GraphTree.Chord T → Kˣ) (e : GraphTree.Chord T) :
96 GraphLoop.holonomy (α := α) (V := fun _ => K) (edgeSystem T t) r (GraphLoop.loopClass (chordLoop (α := α) T e)) =
97 ScalarHolonomy.scalarHom (t e) := by
98 rw [GraphLoop.holonomy_loopClass, chordLoop_transport]
99
100 /-- Every invertible linear map on the scalar field is multiplication by a unit. -/
101 theorem field_equiv_scalar (L : K ≃ₗ[K] K) :
102 ∃ c : Kˣ, L = ScalarHolonomy.scalarHom c := by
103 let c : Kˣ := Units.mk0 (L 1) (L.map_ne_zero_iff.mpr one_ne_zero)
104 refine ⟨c, ?_⟩
105 ext x
106 have h : L x = x * L 1 := by
107 simpa only [smul_eq_mul, mul_one] using L.map_smul x (1 : K)
108 exact h.trans (mul_comm x (L 1))
109
110 /-- The one-dimensional loop representation is scalar on every reduced loop. -/
111 theorem holonomy_isScalar (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ) :
112 ScalarHolonomy.IsScalar (GraphLoop.holonomy (α := α) (V := fun _ => K) (edgeSystem T t) r) := by
113 intro g
114 exact field_equiv_scalar _
115
116 /-- The actual scalar character realizing a prescribed tuple of chord tests. -/
117 def character (T : GraphTree.Rooted α r) (t : GraphTree.Chord T → Kˣ) :
118 GraphLoop.Loop r →* Kˣ :=
119 ScalarHolonomy.character (GraphLoop.holonomy (α := α) (V := fun _ => K) (edgeSystem T t) r) (holonomy_isScalar T t)
120
121 @[simp] theorem character_chord (T : GraphTree.Rooted α r)
122 (t : GraphTree.Chord T → Kˣ) (e : GraphTree.Chord T) :
123 character T t (GraphLoop.loopClass (chordLoop (α := α) T e)) = t e := by
124 apply ScalarHolonomy.scalarHom_injective (V := K)
125 rw [character, ScalarHolonomy.character_spec, chordLoop_holonomy]
126
127 /-- Arbitrary scalar tests on the actual fundamental cycles are simultaneously realizable. -/
128 theorem character_tests_surjective (T : GraphTree.Rooted α r) :
129 Function.Surjective (fun χ : GraphLoop.Loop r →* Kˣ =>
130 fun e : GraphTree.Chord T => χ (GraphLoop.loopClass (chordLoop (α := α) T e))) := by
131 intro t
132 exact ⟨character T t, funext (character_chord T t)⟩
133
134 /-- Their independence persists for characters of the actual loop abelianization. -/
135 theorem homology_tests_surjective (T : GraphTree.Rooted α r) :
136 Function.Surjective (fun χ : GraphLoop.H1 r →* Kˣ =>
137 fun e : GraphTree.Chord T =>
138 χ (GraphLoop.homologyClass r (GraphLoop.loopClass (chordLoop (α := α) T e)))) := by
139 intro t
140 refine ⟨GraphLoop.factorCharacter r Kˣ (character T t), ?_⟩
141 funext e
142 exact character_chord T t e
143
144 end PaperXI.GraphChordCharacters
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: 037a0bd69fdb62bbe05ce9760a8f4bcf242c6c01d167c45f6d9bf591cf5bcca0
Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison