@@ -106,84 +106,31 @@ def KoszulComplex (a : M) [Module R M] : CochainComplex (ModuleCat R) ℕ := {
106106 d_comp_d' := by
107107 intro i _ _ hij hjk
108108 simp at hij hjk; subst hij hjk; simp
109- have conv (j : ℕ) (a : ⋀[R]^j M →ₗ[R] ⋀[R]^(j + 1 ) M) (b : ⋀[R]^(j + 1 ) M →ₗ[R] ⋀[R]^(j + 2 ) M) :
110- ofHom a ≫ ofHom b = ofHom (b ∘ₗ a) := rfl
111- rw [conv]
112- have : i + 1 + 1 = i + 2 := rfl; rw [this]; clear this
109+ rw [← @ofHom_comp]
110+ have : i + 1 + 1 = i + 2 := rfl; rw [this];
113111 rw [koszul_d_squared_zero i a]
114112 rfl
115113}
116114
117115-- Self-duality of the Koszul Complex
118116variable {E : Type *} [AddCommGroup E] [Module R E] [Module.Free R E] [Module.Finite R E]
117+ variable [ CommMonoid (ExteriorAlgebra R E)]
119118
120- noncomputable def rank_E : ℕ := (Module.rank R E).toNat
121- def aux_KoszulComplex (e : E) : CochainComplex (ModuleCat R) ℕ := KoszulComplex e
122-
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
126119#check Module.Dual R (⋀[R]^2 E)
127-
128120#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-
121+ #check exteriorPower.zeroEquiv
122+ #check exteriorPower.oneEquiv
171123
172124def DualKoszulComplex (e : E) : ChainComplex (ModuleCat R) ℕ := {
173- X := (fun i => of R (⋀[R]^i M)),
174- d := fun i j => if i == j + 1 then ofHom (diff_map i j e) else 0 ,
175- shape := fun i j h => by
176- simp_all
177- sorry
178- ,
125+ X := fun i => of R (Module.Dual R (⋀[R]^i E)),
126+ d := fun i j => if j + 1 == i then @ofHom R _ _ _ _ _ _ _ (LinearMap.dualMap (diff_map j i e)) else 0 ,
127+ shape := fun i j h => by simp_all,
179128 d_comp_d' := by
180- intro i _ _ hij hjk
129+ intro _ _ k hij hjk
181130 simp at hij hjk; subst hij hjk; simp
182- have conv (j : ℕ) (a : ⋀[R]^j M →ₗ[R] ⋀[R]^(j + 1 ) M) (b : ⋀[R]^(j + 1 ) M →ₗ[R] ⋀[R]^(j + 2 ) M) :
183- ofHom a ≫ ofHom b = ofHom (b ∘ₗ a) := rfl
184- -- rw [ conv ]
185- sorry
186- -- have : i + 1 + 1 = i + 2 := rfl; rw [ this ] ; clear this
187- -- rw [koszul_d_squared_zero i a]
188- -- rfl
131+ rw [← @ofHom_comp]
132+ have : k + 1 + 1 = k + 2 := rfl; rw [this]; clear this
133+ rw [LinearMap.dualMap_comp_dualMap, koszul_d_squared_zero k e]
134+ rw [LinearMap.dualMap_eq_lcomp, LinearMap.lcomp, LinearMap.comp_zero]
135+ rfl
189136}
0 commit comments