Skip to content

Commit efef2cb

Browse files
committed
setup for koszul duality
1 parent 32eb217 commit efef2cb

File tree

1 file changed

+55
-2
lines changed

1 file changed

+55
-2
lines changed

LeanCommAlg/Koszul.lean

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Mathlib.Algebra.DirectSum.Basic
1616
import Mathlib.Algebra.DirectSum.Module
1717
import Mathlib.Algebra.Category.ModuleCat.Basic
1818
import Mathlib.CategoryTheory.Subobject.Limits
19-
19+
import Mathlib.CategoryTheory.Functor.Hom
2020

2121
infixr:20 "<∘ₗ>" => LinearMap.comp
2222

@@ -81,6 +81,10 @@ lemma ext_mul_a_inc_grade (i : ℕ) (x : ⋀[R]^i M) :
8181
apply (ExteriorAlgebra.gradedAlgebra R M).mul_mem hx ?_
8282
simp_all only [pow_one, LinearMap.mem_range, ι_inj, exists_eq]
8383

84+
lemma ext_mul_graded (hx : x ∈ ⋀[R]^i M) (hy : y ∈ ⋀[R]^j M) :
85+
(x * y : ExteriorAlgebra R M) ∈ ⋀[R]^(i + j) M :=
86+
(ExteriorAlgebra.gradedAlgebra R M).mul_mem hx hy
87+
8488
theorem koszul_d_squared_zero (i : ℕ) (m : M) :
8589
(diff_map (i + 1) (i + 2) m) ∘ₗ (diff_map i (i + 1) m) = (0 : ⋀[R]^i M →ₗ[R] ⋀[R]^(i + 2) M) := by
8690
simp [diff_map]
@@ -111,10 +115,59 @@ def KoszulComplex (a : M) [Module R M] : CochainComplex (ModuleCat R) ℕ := {
111115
}
112116

113117
-- Self-duality of the Koszul Complex
114-
variable {E : Type*} [AddCommGroup E] [Module R E] [Module.Free R E]
118+
variable {E : Type*} [AddCommGroup E] [Module R E] [Module.Free R E] [Module.Finite R E]
115119

120+
noncomputable def rank_E : ℕ := (Module.rank R E).toNat
116121
def aux_KoszulComplex (e : E) : CochainComplex (ModuleCat R) ℕ := KoszulComplex e
117122

123+
-- im not sure how to "take the dual"
124+
-- i know you have to do `Hom(-, R)` but i dont know how to do that in lean
125+
-- hence, the definition is not complete
126+
#check Module.Dual R (⋀[R]^2 E)
127+
128+
#check (Module.Free R E)
129+
130+
-- Aluffi Lemma 8.4.3
131+
lemma rank_free_wedge :
132+
(Module.rank R (⋀[R]^ℓ E)).toNat = Nat.choose ((Module.rank R E).toNat) ℓ := by
133+
sorry
134+
135+
136+
noncomputable def dual_is_rank_minus_power (i : ℕ) :
137+
(⋀[R]^i E) ≃ₗ[R] Module.Dual R (⋀[R]^((Module.rank R E).toNat - i) E) := by
138+
generalize rankh : (Module.rank R E).toNat = r
139+
have E_basis := Module.Free.chooseBasis R E
140+
-- need to get some a ∈ ⋀[R]^i E
141+
-- need to get some b ∈ ⋀[R]^(r - i) E
142+
-- multiply them together
143+
-- show the result is in ⋀[R]^r E ≃ R
144+
-- so a ^ b = r
145+
unfold Module.Dual
146+
147+
148+
apply LinearEquiv.ofBijective
149+
. case hf =>
150+
151+
sorry
152+
. case f =>
153+
apply LinearMap.mk
154+
. case _ =>
155+
intro m x
156+
157+
158+
sorry
159+
160+
161+
162+
163+
noncomputable def dual_ext_comm (j : ℕ) :
164+
Module.Dual R (⋀[R]^j E) ≃ₗ[R] ⋀[R]^j (Module.Dual R E) := by
165+
sorry
166+
167+
def dual_rank_comm (i : ℕ) :
168+
(⋀[R]^i E) → ⋀[R]^((Module.rank R E).toNat - i) (Module.Dual R E) := by
169+
sorry
170+
118171

119172
def DualKoszulComplex (e : E) : ChainComplex (ModuleCat R) ℕ := {
120173
X := (fun i => of R (⋀[R]^i M)),

0 commit comments

Comments
 (0)