Source context 7 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Geometry.Schemes.Proofs
namespace Scheme_exists_app_eq_app_of_isCompact_of_isDirectLimit
open CategoryTheory CategoryTheory.Limits AlgebraicGeometry TopologicalSpace Opposite TensorProduct
universe u
noncomputable section
open LimitIsoFil in
Lean source · full declarationtheorem _root_.AlgebraicGeometry.Scheme.exists_app_eq_app_of_isCompact_of_isDirectLimit
{ι : Type u} [Preorder ι] [Nonempty ι] [IsDirected ι (· ≤ ·)]
{G : ι → Type u} [∀ i, CommRing (G i)] (φ : ∀ i j : ι, i ≤ j → G i →+* G j)
[DirectedSystem G fun i j h => ⇑(φ i j h)]
{R : Type u} [CommRing R] (g : ∀ i, G i →+* R)
(hR : IsDirectLimit (fun i j h => ⇑(φ i j h)) fun i => ⇑(g i))
(i : ι) {X : Scheme.{u}} (fX : X ⟶ Spec (CommRingCat.of (G i))) [QuasiCompact fX]
[QuasiSeparated fX]
(W : X.Opens) (hW : IsCompact (W : Set X)) (j : ι) (hij : i ≤ j)
(t t' : Γ(Limits.pullback fX (Spec.map (CommRingCat.ofHom (φ i j hij))), (Limits.pullback.fst
fX (Spec.map (CommRingCat.ofHom (φ i j hij)))) ⁻¹ᵁ W))
(h : ∀ (c : Limits.pullback fX (Spec.map (CommRingCat.ofHom (g i))) ⟶ Limits.pullback fX
(Spec.map (CommRingCat.ofHom (φ i j hij)))),
c ≫ Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij))) = Limits.pullback.fst
fX (Spec.map (CommRingCat.ofHom (g i))) →
c ≫ Limits.pullback.snd fX (Spec.map (CommRingCat.ofHom (φ i j hij))) = Limits.pullback.snd
fX (Spec.map (CommRingCat.ofHom (g i))) ≫ Spec.map (CommRingCat.ofHom (g j)) →
c.app ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij)))) ⁻¹ᵁ W) t = c.app
((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij)))) ⁻¹ᵁ W) t') :
∃ (j' : ι) (hjj' : j ≤ j'),
∀ (c : Limits.pullback fX (Spec.map (CommRingCat.ofHom (φ i j' (hij.trans hjj')))) ⟶
Limits.pullback fX (Spec.map (CommRingCat.ofHom (φ i j hij)))),
c ≫ Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij))) = Limits.pullback.fst
fX (Spec.map (CommRingCat.ofHom (φ i j' (hij.trans hjj')))) →
c ≫ Limits.pullback.snd fX (Spec.map (CommRingCat.ofHom (φ i j hij))) = Limits.pullback.snd
fX (Spec.map (CommRingCat.ofHom (φ i j' (hij.trans hjj')))) ≫ Spec.map (CommRingCat.ofHom
(φ j j' hjj')) →
c.app ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij)))) ⁻¹ᵁ W) t = c.app
((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (φ i j hij)))) ⁻¹ᵁ W) t' := by
classical
have : CompactSpace ↥(Spec (CommRingCat.of (G i))) := (inferInstance : CompactSpace
(PrimeSpectrum (G i)))
have : CompactSpace ↥X := QuasiCompact.compactSpace_of_compactSpace fX
have : QuasiSeparatedSpace ↥X := (quasiSeparated_iff_quasiSeparatedSpace fX).mp inferInstance
let J : Type u := {j : ι // i ≤ j}
have : Nonempty J := ⟨⟨i, le_rfl⟩⟩
have : IsDirected J (· ≤ ·) := ⟨fun a b => by
obtain ⟨c, hac, hbc⟩ := directed_of (· ≤ ·) a.1 b.1
exact ⟨⟨c, a.2.trans hac⟩, hac, hbc⟩⟩
let algK : ∀ j : J, Algebra (G i) (G j.1) := fun j => (φ i j.1 j.2).toAlgebra
let algR : Algebra (G i) R := (g i).toAlgebra
let algGR : ∀ j : J, Algebra (G j.1) R := fun j => (g j.1).toAlgebra
have hST : ∀ j : J, IsScalarTower (G i) (G j.1) R := fun j =>
IsScalarTower.of_algebraMap_eq (fun r => (IsDirectLimit.compatibility (f := fun i j h => ⇑(φ i
j h))
(g := fun i => ⇑(g i)) i j.1 j.2 r).symm)
let f' : ∀ j k : J, j ≤ k → G j.1 →ₐ[G i] G k.1 := fun j k h =>
{ toRingHom := φ j.1 k.1 h
commutes' := fun r => DirectedSystem.map_map (f := fun i j h => ⇑(φ i j h)) j.2 h r }
have hDS : DirectedSystem (fun j : J => G j.1) (fun j k h => ⇑(f' j k h)) :=
⟨fun j x => DirectedSystem.map_self (f := fun i j h => ⇑(φ i j h)) x,
fun k j l hlj hjk x => DirectedSystem.map_map (f := fun i j h => ⇑(φ i j h)) hlj hjk x⟩
have hR' : IsDirectLimit (fun j k h => ⇑(f' j k h)) (fun j : J => ⇑(algebraMap (G j.1) R)) := by
refine ⟨fun x => ?_, fun j k x y hxy => ?_, fun j k h x => ?_⟩
· obtain ⟨i', y, hy⟩ := hR.surj x
obtain ⟨k, hik, hi'k⟩ := directed_of (· ≤ ·) i i'
exact ⟨⟨k, hik⟩, φ i' k hi'k y, by rw [← hy]; exact hR.compatibility i' k hi'k y⟩
· obtain ⟨l, hjl, hkl, e⟩ := hR.inj j.1 k.1 x y hxy
exact ⟨⟨l, j.2.trans hjl⟩, hjl, hkl, e⟩
· exact hR.compatibility j.1 k.1 h x
let instK : ∀ V : X.Opens, Algebra (G i) Γ(X, V) := fun V =>
Scheme.TwoAffineOpenCover.algebraOfHom fX V
let instKR : ∀ W : (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))).Opens,
Algebra (G i) Γ(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))), W) :=
fun W =>
Scheme.TwoAffineOpenCover.algebraOfHom
(Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))) ≫ fX) W
obtain ⟨εR, hεaff, hε1, hε1', hε2⟩ :=
AlgebraicGeometry.exists_algEquiv_sections_pullback_fst_preimage_tensor_of_isAffineOpen (G i)
fX R
have hDL : ∀ V : X.Opens, ∃ _ : DirectedSystem (fun j : J => G j.1 ⊗[G i] Γ(X, V))
(fun j k h => ⇑(Algebra.TensorProduct.map (f' j k h) (AlgHom.id (G i) Γ(X, V)))),
IsDirectLimit (fun j k h => ⇑(Algebra.TensorProduct.map (f' j k h) (AlgHom.id (G i) Γ(X, V))))
(fun j : J => ⇑(Algebra.TensorProduct.map (IsScalarTower.toAlgHom (G i) (G j.1) R)
(AlgHom.id (G i) Γ(X, V)))) := fun V =>
Algebra.TensorProduct.isDirectLimit_map_of_isDirectLimit (G i) (fun j : J => G j.1) f' R hR'
Γ(X, V)
choose hDSv hDLv using hDL
let γR : ∀ (V : X.Opens) (hV : IsAffineOpen V),
Γ(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))),
(Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))) ⁻¹ᵁ V) ≃ₐ[G i]
R ⊗[G i] Γ(X, V) := fun V hV => (εR V hV).trans (Algebra.TensorProduct.comm (G i) Γ(X, V) R)
have γR1 : ∀ (V : X.Opens) (hV : IsAffineOpen V) (s : Γ(X, V)),
γR V hV ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))).app V
s) =
(1 : R) ⊗ₜ[G i] s := by
intro V hV s
change Algebra.TensorProduct.comm (G i) _ R (εR V hV _) = _
erw [hε1 V hV s]
exact Algebra.TensorProduct.comm_tmul _ _ _
have γR2 : ∀ (V V' : X.Opens) (hV : IsAffineOpen V) (hV' : IsAffineOpen V') (hle : V' ≤ V)
(s : Γ(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))),
(Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))) ⁻¹ᵁ V)),
Algebra.TensorProduct.map (AlgHom.id (G i) R) (Scheme.TwoAffineOpenCover.restrictAlgHom fX
hle) (γR V hV s) =
γR V' hV' ((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i)
R)))).presheaf.map
(homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i)
R)))).preimage_mono
hle)).op s) := by
intro V V' hV hV' hle s
change Algebra.TensorProduct.map _ _ (Algebra.TensorProduct.comm (G i) _ R (εR V hV s)) =
Algebra.TensorProduct.comm (G i) _ R (εR V' hV' _)
rw [← hε2 V V' hV hV' hle s]
exact (Algebra.TensorProduct.comm_comp_map_apply _ _ _).symm
let jj : J := ⟨j, hij⟩
let instKj : ∀ W' : (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))).Opens, Algebra (G i) Γ((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap
(G i) (G jj.1))))), W') := fun W' =>
Scheme.TwoAffineOpenCover.algebraOfHom ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))) ≫ fX) W'
obtain ⟨εj, hεjaff, hεj1, hεj1', hεj2⟩ :=
AlgebraicGeometry.exists_algEquiv_sections_pullback_fst_preimage_tensor_of_isAffineOpen (G i)
fX (G jj.1)
have ecomp : (g j).comp (φ i j hij) = g i := RingHom.ext fun x => hR.compatibility i j hij x
let c₀ : (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))) ⟶
(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G jj.1))))) :=
Limits.pullback.lift (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i)
R))))
(Limits.pullback.snd fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))) ≫ Spec.map
(CommRingCat.ofHom (g j)))
(by
rw [Limits.pullback.condition, Category.assoc, ← Spec.map_comp, ← CommRingCat.ofHom_comp]
exact congrArg (fun r : G i →+* R => Limits.pullback.snd fX
(Spec.map (CommRingCat.ofHom (algebraMap (G i) R))) ≫ Spec.map (CommRingCat.ofHom r))
ecomp.symm)
have hc₀₁ : c₀ ≫ (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))) = (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))) :=
Limits.pullback.lift_fst _ _ _
have hc₀₂ : c₀ ≫ Limits.pullback.snd fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1)))) =
Limits.pullback.snd fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))) ≫ Spec.map
(CommRingCat.ofHom (g j)) :=
Limits.pullback.lift_snd _ _ _
have h₀ := h c₀ hc₀₁ hc₀₂
have N := nat_gamma (G i) fX (G jj.1) R (IsScalarTower.toAlgHom (G i) (G jj.1) R) c₀ hc₀₁ hc₀₂
εj hεj1 hεj1' εR hε1 hε1'
obtain ⟨S, hSfin, hSeq⟩ := (isCompact_iff_finite_and_eq_biUnion_affineOpens (U := W)).1 hW
have : Finite ↥S := hSfin.to_subtype
have hSle : ∀ V : ↥S, ((V : X.affineOpens) : X.Opens) ≤ W := fun V => by
rw [hSeq]; exact le_iSup₂ (f := fun (i : X.affineOpens) (_ : i ∈ S) => (i : X.Opens)) V.1 V.2
have e₂ : ∀ V : ↥S, (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))))
⁻¹ᵁ ((V : X.affineOpens) : X.Opens) ≤ c₀ ⁻¹ᵁ ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G jj.1))))) ⁻¹ᵁ W) := fun V => by
rw [← Scheme.Hom.comp_preimage, hc₀₁]; exact (Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) R)))).preimage_mono (hSle V)
have e₁ : ∀ V : ↥S, (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R))))
⁻¹ᵁ ((V : X.affineOpens) : X.Opens) ≤ c₀ ⁻¹ᵁ ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G jj.1))))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) :=
fun V => by rw [← Scheme.Hom.comp_preimage, hc₀₁]
have key : ∀ (V : ↥S) (x : Γ((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i)
(G jj.1))))), (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))) ⁻¹ᵁ W)),
c₀.appLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G jj.1)))))
⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) R)))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) (e₁ V)
((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))).preimage_mono (hSle V))).op x) =
(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) R)))).presheaf.map
(homOfLE (e₂ V)).op (c₀.app ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))) ⁻¹ᵁ W) x) := by
intro V x
rw [← CategoryTheory.comp_apply, Scheme.Hom.map_appLE, ← CategoryTheory.comp_apply,
Scheme.Hom.app_eq_appLE,
Scheme.Hom.appLE_map]
have step : ∀ V : ↥S, ∃ (m : J) (h1 h2 : jj ≤ m),
Algebra.TensorProduct.map (f' jj m h1) (AlgHom.id (G i) Γ(X, ((V : X.affineOpens) : X.Opens)))
(Algebra.TensorProduct.comm (G i) _ (G jj.1) (εj _ V.1.2
((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))).preimage_mono (hSle V))).op t))) =
Algebra.TensorProduct.map (f' jj m h2) (AlgHom.id (G i) Γ(X, ((V : X.affineOpens) : X.Opens)))
(Algebra.TensorProduct.comm (G i) _ (G jj.1) (εj _ V.1.2
((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))).preimage_mono (hSle V))).op t'))) := by
intro V
apply (hDLv ((V : X.affineOpens) : X.Opens)).inj jj jj
rw [← N _ V.1.2, ← N _ V.1.2, key, key, h₀]
choose m hm1 hm2 hm using step
obtain ⟨m₁, hm₁, -⟩ := exists_ge₂ m m
obtain ⟨js, hjjs, hm₁s⟩ := directed_of (· ≤ ·) jj m₁
refine ⟨js.1, hjjs, fun c' hc'₁ hc'₂ => ?_⟩
let instKs : ∀ W' : (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).Opens, Algebra (G i) Γ((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap
(G i) (G js.1))))), W') := fun W' =>
Scheme.TwoAffineOpenCover.algebraOfHom ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G js.1))))) ≫ fX) W'
obtain ⟨εs, -, hεs1, hεs1', -⟩ :=
AlgebraicGeometry.exists_algEquiv_sections_pullback_fst_preimage_tensor_of_isAffineOpen (G i)
fX (G js.1)
have N' := nat_gamma (G i) fX (G jj.1) (G js.1) (f' jj js hjjs) c' hc'₁ hc'₂ εj hεj1 hεj1' εs
hεs1 hεs1'
have hE : (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G js.1))))) ⁻¹ᵁ
W = c' ⁻¹ᵁ ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G jj.1)))))
⁻¹ᵁ W) := by rw [← Scheme.Hom.comp_preimage, hc'₁]
refine res_injective_of_eq hE ?_
have key' : ∀ x, (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).presheaf.map (homOfLE hE.le).op (c'.app ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G jj.1))))) ⁻¹ᵁ W) x) =
c'.appLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G jj.1)))))
⁻¹ᵁ W) ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G js.1)))))
⁻¹ᵁ W) hE.le x := fun x => by
rw [← CategoryTheory.comp_apply, Scheme.Hom.app_eq_appLE, Scheme.Hom.appLE_map]
rw [key', key']
apply TopCat.Sheaf.eq_of_locally_eq' (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap
(G i) (G js.1))))).sheaf
(fun V : ↥S => (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G js.1))))) ⁻¹ᵁ W)
(fun V => homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).preimage_mono (hSle V)))
· intro x hx
have hx' : (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G js.1)))))
x ∈ (⨆ V ∈ S, (V : X.Opens)) := by rw [← hSeq]; exact hx
obtain ⟨V, hV⟩ := Opens.mem_iSup.1 hx'
obtain ⟨hVS, hxV⟩ := Opens.mem_iSup.1 hV
exact Opens.mem_iSup.2 ⟨⟨V, hVS⟩, hxV⟩
· intro V
have e₄ : (Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G js.1)))))
⁻¹ᵁ ((V : X.affineOpens) : X.Opens) ≤ c' ⁻¹ᵁ ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G jj.1))))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) := by
rw [← Scheme.Hom.comp_preimage, hc'₁]
have key'' : ∀ x, (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G js.1))))).preimage_mono (hSle V))).op
(c'.appLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))) ⁻¹ᵁ W) ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i)
(G js.1))))) ⁻¹ᵁ W) hE.le x) =
c'.appLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) ((Limits.pullback.fst fX (Spec.map
(CommRingCat.ofHom (algebraMap (G i) (G js.1))))) ⁻¹ᵁ ((V : X.affineOpens) : X.Opens)) e₄
((Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
jj.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G jj.1))))).preimage_mono (hSle V))).op x) := fun x => by
rw [← CategoryTheory.comp_apply, Scheme.Hom.appLE_map, ← CategoryTheory.comp_apply,
Scheme.Hom.map_appLE]
change (Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).presheaf.map (homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom
(algebraMap (G i) (G js.1))))).preimage_mono (hSle V))).op _ =
(Limits.pullback fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G js.1))))).presheaf.map
(homOfLE ((Limits.pullback.fst fX (Spec.map (CommRingCat.ofHom (algebraMap (G i) (G
js.1))))).preimage_mono (hSle V))).op _
rw [key'', key'']
apply ((εs _ V.1.2).trans (Algebra.TensorProduct.comm (G i) _ (G js.1))).injective
rw [AlgEquiv.trans_apply, AlgEquiv.trans_apply]
erw [N' _ V.1.2, N' _ V.1.2]
have e := congrArg (Algebra.TensorProduct.map (f' (m V) js ((hm₁ V).trans hm₁s))
(AlgHom.id (G i) Γ(X, ((V : X.affineOpens) : X.Opens)))) (hm V)
rw [(hDSv _).map_map, (hDSv _).map_map] at e
exact e