@@ -175,6 +175,9 @@ instance KaehlerDifferential.isScalarTower' : IsScalarTower R (S ⊗[R] S) Ω[S
175175def KaehlerDifferential.fromIdeal : KaehlerDifferential.ideal R S →ₗ[S ⊗[R] S] Ω[S⁄R] :=
176176 (KaehlerDifferential.ideal R S).toCotangent
177177
178+ theorem KaehlerDifferential.fromIdeal_surjective : Function.Surjective (fromIdeal R S) :=
179+ Ideal.toCotangent_surjective _
180+
178181/-- (Implementation) The underlying linear map of the derivation into `Ω[S⁄R]`. -/
179182def KaehlerDifferential.DLinearMap : S →ₗ[R] Ω[S⁄R] :=
180183 ((KaehlerDifferential.fromIdeal R S).restrictScalars R).comp
@@ -218,13 +221,14 @@ theorem KaehlerDifferential.span_range_derivation :
218221 Submodule.span S (Set.range <| KaehlerDifferential.D R S) = ⊤ := by
219222 rw [_root_.eq_top_iff]
220223 rintro x -
221- obtain ⟨⟨x, hx⟩, rfl⟩ := Ideal.toCotangent_surjective _ x
222- have : x ∈ (KaehlerDifferential.ideal R S).restrictScalars S := hx
223- rw [← KaehlerDifferential.submodule_span_range_eq_ideal] at this
224- suffices ∃ hx, (KaehlerDifferential.ideal R S).toCotangent ⟨x, hx⟩ ∈
225- Submodule.span S (Set.range <| KaehlerDifferential.D R S) by
226- exact this.choose_spec
227- refine Submodule.span_induction ?_ ?_ ?_ ?_ this
224+ obtain ⟨⟨x, hx⟩, rfl⟩ := fromIdeal_surjective R S x
225+ rw [← Submodule.restrictScalars_mem S, ← KaehlerDifferential.submodule_span_range_eq_ideal] at hx
226+ suffices ∃ hx,
227+ fromIdeal R S ⟨x, hx⟩ ∈ Submodule.span S (Set.range <| KaehlerDifferential.D R S) from
228+ this.snd
229+ -- TODO: this proof looks like we're reinventinv `Submodule.span_le`.
230+ -- I'm not sure what's the RHS here though.
231+ refine Submodule.span_induction ?_ ?_ ?_ ?_ hx
228232 · rintro _ ⟨x, rfl⟩
229233 refine ⟨KaehlerDifferential.one_smul_sub_smul_one_mem_ideal R x, ?_⟩
230234 apply Submodule.subset_span
0 commit comments