Source context 6 commands
Surrounding namespaces, section variables, and local commands at this declaration.
section ProofImplementation
namespace AlgebraicCurves.Cohomology.Cech.Proofs.TwoChartCoverSquareZeroUnit
open scoped TensorProduct
open TrivSqZeroExt
universe u
open P2mTJ2a in
Lean source · full declarationtheorem _root_.TwoChartCech.Cover.squareZeroUnit_cohomologous_iff_and_exists
{K : Type u} [Field K] (𝒰 : TwoChartCech.Cover.{u, u} K)
(V : Type u) [AddCommGroup V] [Module K V] [Module Kᵐᵒᵖ V] [IsCentralScalar K V] :
(∀ t t' : (TrivSqZeroExt K V ⊗[K] 𝒰.A01)ˣ,
Algebra.TensorProduct.lift ((Algebra.ofId K 𝒰.A01).comp (TrivSqZeroExt.fstHom K K V))
(AlgHom.id K 𝒰.A01)
(fun _ _ => Commute.all _ _) (t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) = 1 →
Algebra.TensorProduct.lift ((Algebra.ofId K 𝒰.A01).comp (TrivSqZeroExt.fstHom K K V))
(AlgHom.id K 𝒰.A01)
(fun _ _ => Commute.all _ _) (t' : TrivSqZeroExt K V ⊗[K] 𝒰.A01) = 1 →
((∃ (a0 : (TrivSqZeroExt K V ⊗[K] 𝒰.A0)ˣ) (a1 : (TrivSqZeroExt K V ⊗[K] 𝒰.A1)ˣ),
(t' : TrivSqZeroExt K V ⊗[K] 𝒰.A01) =
Algebra.TensorProduct.map (AlgHom.id K (TrivSqZeroExt K V)) 𝒰.ρ0 (a0 : TrivSqZeroExt
K V ⊗[K] 𝒰.A0) *
(t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) *
Algebra.TensorProduct.map (AlgHom.id K (TrivSqZeroExt K V)) 𝒰.ρ1
((↑a1⁻¹ : (TrivSqZeroExt K V ⊗[K] 𝒰.A1)ˣ) : TrivSqZeroExt K V ⊗[K] 𝒰.A1)) ↔
(LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V
((TensorProduct.comm K V 𝒰.A01).toLinearMap
(TensorProduct.map (TrivSqZeroExt.sndHom K V) LinearMap.id (t : TrivSqZeroExt K V
⊗[K] 𝒰.A01))) =
(LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V
((TensorProduct.comm K V 𝒰.A01).toLinearMap
(TensorProduct.map (TrivSqZeroExt.sndHom K V) LinearMap.id (t' : TrivSqZeroExt K V
⊗[K] 𝒰.A01))))) ∧
(∀ y : 𝒰.structureSheaf.H1 ⊗[K] V, ∃ t : (TrivSqZeroExt K V ⊗[K] 𝒰.A01)ˣ,
Algebra.TensorProduct.lift ((Algebra.ofId K 𝒰.A01).comp (TrivSqZeroExt.fstHom K K V))
(AlgHom.id K 𝒰.A01)
(fun _ _ => Commute.all _ _) (t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) = 1 ∧
(LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V
((TensorProduct.comm K V 𝒰.A01).toLinearMap
(TensorProduct.map (TrivSqZeroExt.sndHom K V) LinearMap.id (t : TrivSqZeroExt K V
⊗[K] 𝒰.A01))) = y) := by
change (∀ t t' : (TrivSqZeroExt K V ⊗[K] 𝒰.A01)ˣ, red K V 𝒰.A01 t = 1 → red K V 𝒰.A01 t' = 1 →
((∃ (a0 : (TrivSqZeroExt K V ⊗[K] 𝒰.A0)ˣ) (a1 : (TrivSqZeroExt K V ⊗[K] 𝒰.A1)ˣ),
(t' : TrivSqZeroExt K V ⊗[K] 𝒰.A01) =
Algebra.TensorProduct.map (AlgHom.id K (TrivSqZeroExt K V)) 𝒰.ρ0 (a0 : TrivSqZeroExt
K V ⊗[K] 𝒰.A0) *
(t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) *
Algebra.TensorProduct.map (AlgHom.id K (TrivSqZeroExt K V)) 𝒰.ρ1
((↑a1⁻¹ : (TrivSqZeroExt K V ⊗[K] 𝒰.A1)ˣ) : TrivSqZeroExt K V ⊗[K] 𝒰.A1)) ↔
(LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V (σ K V 𝒰.A01 t) =
(LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V (σ K V 𝒰.A01 t'))) ∧
(∀ y : 𝒰.structureSheaf.H1 ⊗[K] V, ∃ t : (TrivSqZeroExt K V ⊗[K] 𝒰.A01)ˣ,
red K V 𝒰.A01 t = 1 ∧ (LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V (σ K V
𝒰.A01 t) = y)
refine ⟨fun t t' ht ht' => ⟨?_, ?_⟩, fun y => ?_⟩
· rintro ⟨a0, a1, h⟩
set u0 : 𝒰.A0ˣ := Units.map (red K V 𝒰.A0 : TrivSqZeroExt K V ⊗[K] 𝒰.A0 →* 𝒰.A0) a0 with hu0
set u1 : 𝒰.A1ˣ := Units.map (red K V 𝒰.A1 : TrivSqZeroExt K V ⊗[K] 𝒰.A1 →* 𝒰.A1) a1 with hu1
set β0 := σ K V 𝒰.A0 ((a0 : TrivSqZeroExt K V ⊗[K] 𝒰.A0) *
Algebra.TensorProduct.includeRight ((↑u0⁻¹ : 𝒰.A0ˣ) : 𝒰.A0)) with hβ0
set β1 := σ K V 𝒰.A1 ((a1 : TrivSqZeroExt K V ⊗[K] 𝒰.A1) *
Algebra.TensorProduct.includeRight ((↑u1⁻¹ : 𝒰.A1ˣ) : 𝒰.A1)) with hβ1
have ha0 := unit_eq (V := V) a0
have ha1 := unit_inv_eq (V := V) a1
rw [← hu0, ← hβ0] at ha0
rw [← hu1, ← hβ1] at ha1
have hg : 𝒰.ρ0 (u0 : 𝒰.A0) = 𝒰.ρ1 (u1 : 𝒰.A1) := by
have hred := congrArg (red K V 𝒰.A01) h
rw [ht', map_mul, map_mul, ht, mul_one, red_map, red_map] at hred
have e0 : red K V 𝒰.A0 (a0 : TrivSqZeroExt K V ⊗[K] 𝒰.A0) = (u0 : 𝒰.A0) := by rw [hu0]; rfl
have e1 : red K V 𝒰.A1 ((↑a1⁻¹ : (TrivSqZeroExt K V ⊗[K] 𝒰.A1)ˣ) : TrivSqZeroExt K V ⊗[K]
𝒰.A1) =
((↑u1⁻¹ : 𝒰.A1ˣ) : 𝒰.A1) := by rw [hu1]; rfl
rw [e0, e1] at hred
have := congrArg (· * 𝒰.ρ1 (u1 : 𝒰.A1)) hred
simp only [one_mul, mul_assoc, ← map_mul, Units.inv_mul, map_one, mul_one] at this
exact this.symm
set w := σ K V 𝒰.A01 (t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) with hw
have ht1 : (t : TrivSqZeroExt K V ⊗[K] 𝒰.A01) = 1 + incl K V 𝒰.A01 w :=
eq_one_add_incl_of_red_eq_one ht
have key : (t' : TrivSqZeroExt K V ⊗[K] 𝒰.A01) =
1 + incl K V 𝒰.A01 (w + 𝒰.ρ0.toLinearMap.rTensor V β0 - 𝒰.ρ1.toLinearMap.rTensor V β1) := by
rw [h, ha0, ha1, map_mul, map_mul, map_includeRight, map_includeRight, map_add, map_sub,
map_one, map_one,
map_incl, map_incl, ht1]
set g := 𝒰.ρ0 (u0 : 𝒰.A0)
have hg' : 𝒰.ρ1 ((↑u1⁻¹ : 𝒰.A1ˣ) : 𝒰.A1) * g = 1 := by
rw [hg, ← map_mul, Units.inv_mul, map_one]
calc Algebra.TensorProduct.includeRight g * (1 + incl K V 𝒰.A01 (𝒰.ρ0.toLinearMap.rTensor
V β0)) *
(1 + incl K V 𝒰.A01 w) *
(Algebra.TensorProduct.includeRight (𝒰.ρ1 ((↑u1⁻¹ : 𝒰.A1ˣ) : 𝒰.A1)) *
(1 - incl K V 𝒰.A01 (𝒰.ρ1.toLinearMap.rTensor V β1)))
= (Algebra.TensorProduct.includeRight (R := K) (A := TrivSqZeroExt K V) (𝒰.ρ1 ((↑u1⁻¹
: 𝒰.A1ˣ) : 𝒰.A1)) *
Algebra.TensorProduct.includeRight g) *
((1 + incl K V 𝒰.A01 (𝒰.ρ0.toLinearMap.rTensor V β0)) * (1 + incl K V 𝒰.A01 w) *
(1 - incl K V 𝒰.A01 (𝒰.ρ1.toLinearMap.rTensor V β1))) := by ring
_ = 1 + incl K V 𝒰.A01 (w + 𝒰.ρ0.toLinearMap.rTensor V β0 - 𝒰.ρ1.toLinearMap.rTensor V
β1) := by
rw [← map_mul, hg', map_one, one_mul, sub_eq_add_neg, ← map_neg, one_add_incl_mul,
one_add_incl_mul]
congr 2
abel
have hσ' : σ K V 𝒰.A01 t' = w + 𝒰.ρ0.toLinearMap.rTensor V β0 - 𝒰.ρ1.toLinearMap.rTensor V
β1 := by
rw [key, map_add, σ_one, σ_incl, zero_add]
rw [hσ', map_sub, map_add, rTensor_mkQ_rTensor_ρ0, rTensor_mkQ_rTensor_ρ1, add_zero, sub_zero]
· intro hcls
have hdiff : (LinearMap.range 𝒰.structureSheaf.cechDiff).mkQ.rTensor V (σ K V 𝒰.A01 t' - σ K
V 𝒰.A01 t) = 0 := by
rw [map_sub, hcls, sub_self]
obtain ⟨β0, β1, hβ⟩ := exists_of_rTensor_mkQ_eq_zero V 𝒰 hdiff
refine ⟨unitOf (-β0), unitOf (-β1), ?_⟩
rw [unitOf_val, unitOf_inv_val, map_add, map_sub, map_one, map_one, map_incl, map_incl,
eq_one_add_incl_of_red_eq_one ht, eq_one_add_incl_of_red_eq_one ht', sub_eq_add_neg, ←
map_neg,
one_add_incl_mul, one_add_incl_mul, map_neg, map_neg, neg_neg]
congr 2
rw [sub_eq_iff_eq_add] at hβ
rw [hβ]
abel
· obtain ⟨w, rfl⟩ := LinearMap.rTensor_surjective V (Submodule.mkQ_surjective _) y
exact ⟨unitOf w, red_unitOf w, by rw [σ_unitOf]⟩