@@ -16,7 +16,7 @@ import Mathlib.Algebra.DirectSum.Basic
1616import Mathlib.Algebra.DirectSum.Module
1717import Mathlib.Algebra.Category.ModuleCat.Basic
1818import Mathlib.CategoryTheory.Subobject.Limits
19-
19+ import Mathlib.CategoryTheory.Functor.Hom
2020
2121infixr :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+
8488theorem 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
116121def 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
119172def DualKoszulComplex (e : E) : ChainComplex (ModuleCat R) ℕ := {
120173 X := (fun i => of R (⋀[R]^i M)),
0 commit comments