@@ -276,6 +276,10 @@ theorem mem_oneCocycles_iff (f : G → A) :
276
276
rw [← add_eq_zero_iff_eq_neg, ← oneCocycles_map_one f, ← mul_inv_cancel g,
277
277
(mem_oneCocycles_iff f).1 f.2 g g⁻¹]
278
278
279
+ theorem dZero_apply_mem_oneCocycles (x : A) :
280
+ dZero A x ∈ oneCocycles A :=
281
+ congr($(dOne_comp_dZero A) x)
282
+
279
283
theorem oneCocycles_map_mul_of_isTrivial [A.IsTrivial] (f : oneCocycles A) (g h : G) :
280
284
f (g * h) = f g + f h := by
281
285
rw [(mem_oneCocycles_iff f).1 f.2 , apply_eq_self A.ρ g (f h), add_comm]
@@ -351,84 +355,85 @@ lemma twoCocycles_ρ_map_inv_sub_map_inv (f : twoCocycles A) (g : G) :
351
355
at this
352
356
exact sub_eq_sub_iff_add_eq_add.2 this.symm
353
357
358
+ theorem dOne_apply_mem_twoCocycles (x : G → A) :
359
+ dOne A x ∈ twoCocycles A :=
360
+ congr($(dTwo_comp_dOne A) x)
361
+
354
362
end Cocycles
355
363
356
364
section Coboundaries
357
365
358
366
/-- The 1-coboundaries `B¹(G, A)` of `A : Rep k G`, defined as the image of the map
359
367
`A → Fun(G, A)` sending `(a, g) ↦ ρ_A(g)(a) - a.` -/
360
- def oneCoboundaries : Submodule k (oneCocycles A) :=
361
- LinearMap.range ((dZero A).codRestrict (oneCocycles A) fun c =>
362
- LinearMap.ext_iff.1 (dOne_comp_dZero A) c)
368
+ def oneCoboundaries : Submodule k (G → A) :=
369
+ LinearMap.range (dZero A)
363
370
364
371
/-- The 2-coboundaries `B²(G, A)` of `A : Rep k G`, defined as the image of the map
365
372
`Fun(G, A) → Fun(G × G, A)` sending `(f, (g₁, g₂)) ↦ ρ_A(g₁)(f(g₂)) - f(g₁g₂) + f(g₁).` -/
366
- def twoCoboundaries : Submodule k (twoCocycles A) :=
367
- LinearMap.range ((dOne A).codRestrict (twoCocycles A) fun c =>
368
- LinearMap.ext_iff.1 (dTwo_comp_dOne.{u} A) c)
373
+ def twoCoboundaries : Submodule k (G × G → A) :=
374
+ LinearMap.range (dOne A)
369
375
370
376
variable {A}
371
377
372
- /-- Makes a 1-coboundary out of `f ∈ Im(d⁰)`. -/
373
- def oneCoboundariesOfMemRange {f : G → A} (h : f ∈ LinearMap.range (dZero A)) :
374
- oneCoboundaries A :=
375
- ⟨⟨f, LinearMap.range_le_ker_iff.2 (dOne_comp_dZero A) h⟩,
376
- by rcases h with ⟨x, rfl⟩; exact ⟨x, rfl⟩⟩
378
+ instance : FunLike (oneCoboundaries A) G A := ⟨Subtype.val, Subtype.val_injective⟩
377
379
378
- theorem oneCoboundaries_of_mem_range_apply {f : G → A} (h : f ∈ LinearMap.range (dZero A)) :
379
- (oneCoboundariesOfMemRange h).1 .1 = f := rfl
380
+ @[simp]
381
+ theorem oneCoboundaries.coe_mk (f : G → A) (hf) :
382
+ ((⟨f, hf⟩ : oneCoboundaries A) : G → A) = f := rfl
380
383
381
- /-- Makes a 1-coboundary out of `f : G → A` and `x` such that
382
- `ρ(g)(x) - x = f(g)` for all `g : G`. -/
383
- def oneCoboundariesOfEq {f : G → A} {x : A} (hf : ∀ g, A.ρ g x - x = f g) :
384
- oneCoboundaries A :=
385
- oneCoboundariesOfMemRange ⟨x, funext hf⟩
384
+ @[simp]
385
+ theorem oneCoboundaries.val_eq_coe (f : oneCoboundaries A) : f.1 = f := rfl
386
386
387
- theorem oneCoboundariesOfEq_apply {f : G → A} {x : A} (hf : ∀ g, A.ρ g x - x = f g) :
388
- (oneCoboundariesOfEq hf).1 .1 = f := rfl
387
+ @[ext]
388
+ theorem oneCoboundaries_ext {f₁ f₂ : oneCoboundaries A} (h : ∀ g : G, f₁ g = f₂ g) : f₁ = f₂ :=
389
+ DFunLike.ext f₁ f₂ h
389
390
390
- theorem mem_range_of_mem_oneCoboundaries {f : oneCocycles A} (h : f ∈ oneCoboundaries A) :
391
- f.1 ∈ LinearMap.range (dZero A) := by
392
- rcases h with ⟨x, rfl⟩; exact ⟨x, rfl⟩
391
+ variable (A) in
392
+ lemma oneCoboundaries_le_oneCocycles : oneCoboundaries A ≤ oneCocycles A := by
393
+ rintro _ ⟨x, rfl⟩
394
+ exact dZero_apply_mem_oneCocycles x
395
+
396
+ variable (A) in
397
+ /-- Natural inclusion `B¹(G, A) →ₗ[k] Z¹(G, A)`. -/
398
+ abbrev oneCoboundariesToOneCocycles : oneCoboundaries A →ₗ[k] oneCocycles A :=
399
+ Submodule.inclusion (oneCoboundaries_le_oneCocycles A)
400
+
401
+ @[simp]
402
+ lemma oneCoboundariesToOneCocycles_apply (x : oneCoboundaries A) :
403
+ oneCoboundariesToOneCocycles A x = x.1 := rfl
393
404
394
405
theorem oneCoboundaries_eq_bot_of_isTrivial (A : Rep k G) [A.IsTrivial] :
395
406
oneCoboundaries A = ⊥ := by
396
407
simp_rw [oneCoboundaries, dZero_eq_zero]
397
408
exact LinearMap.range_eq_bot.2 rfl
398
409
399
- theorem mem_oneCoboundaries_iff (f : oneCocycles A) : f ∈ oneCoboundaries A ↔
400
- ∃ x : A, ∀ g : G, A.ρ g x - x = f g := exists_congr fun x ↦ by
401
- simpa only [LinearMap.codRestrict, dZero, LinearMap.coe_mk, AddHom.coe_mk] using
402
- groupCohomology.oneCocycles_ext_iff
410
+ instance : FunLike (twoCoboundaries A) (G × G) A := ⟨Subtype.val, Subtype.val_injective⟩
403
411
404
- /-- Makes a 2-coboundary out of `f ∈ Im(d¹)`. -/
405
- def twoCoboundariesOfMemRange {f : G × G → A} (h : f ∈ LinearMap.range (dOne A)) :
406
- twoCoboundaries A :=
407
- ⟨⟨f, LinearMap.range_le_ker_iff.2 (dTwo_comp_dOne A) h⟩,
408
- by rcases h with ⟨x, rfl⟩; exact ⟨x, rfl⟩⟩
412
+ @[simp]
413
+ theorem twoCoboundaries.coe_mk (f : G × G → A) (hf) :
414
+ ((⟨f, hf⟩ : twoCoboundaries A) : G × G → A) = f := rfl
409
415
410
- theorem twoCoboundariesOfMemRange_apply {f : G × G → A} (h : f ∈ LinearMap.range (dOne A)) :
411
- (twoCoboundariesOfMemRange h). 1 .1 = f := rfl
416
+ @[simp]
417
+ theorem twoCoboundaries.val_eq_coe (f : twoCoboundaries A) : f .1 = f := rfl
412
418
413
- /-- Makes a 2-coboundary out of `f : G × G → A` and `x : G → A` such that
414
- `ρ(g)(x(h)) - x(gh) + x(g) = f(g, h)` for all `g, h : G`. -/
415
- def twoCoboundariesOfEq {f : G × G → A} {x : G → A}
416
- (hf : ∀ g h, A.ρ g (x h) - x (g * h) + x g = f (g, h)) :
417
- twoCoboundaries A :=
418
- twoCoboundariesOfMemRange ⟨x, funext fun g ↦ hf g.1 g.2 ⟩
419
+ @[ext]
420
+ theorem twoCoboundaries_ext {f₁ f₂ : twoCoboundaries A} (h : ∀ g h : G, f₁ (g, h) = f₂ (g, h)) :
421
+ f₁ = f₂ :=
422
+ DFunLike.ext f₁ f₂ (Prod.forall.mpr h)
419
423
420
- theorem twoCoboundariesOfEq_apply {f : G × G → A} {x : G → A}
421
- (hf : ∀ g h, A.ρ g (x h) - x (g * h) + x g = f (g, h)) :
422
- (twoCoboundariesOfEq hf).1 .1 = f := rfl
424
+ variable (A) in
425
+ lemma twoCoboundaries_le_twoCocycles : twoCoboundaries A ≤ twoCocycles A := by
426
+ rintro _ ⟨x, rfl⟩
427
+ exact dOne_apply_mem_twoCocycles x
423
428
424
- theorem mem_range_of_mem_twoCoboundaries {f : twoCocycles A} (h : f ∈ twoCoboundaries A) :
425
- (twoCocycles A).subtype f ∈ LinearMap.range (dOne A) := by
426
- rcases h with ⟨x, rfl⟩; exact ⟨x, rfl⟩
429
+ variable (A) in
430
+ /-- Natural inclusion `B²(G, A) →ₗ[k] Z²(G, A)`. -/
431
+ abbrev twoCoboundariesToTwoCocycles : twoCoboundaries A →ₗ[k] twoCocycles A :=
432
+ Submodule.inclusion (twoCoboundaries_le_twoCocycles A)
427
433
428
- theorem mem_twoCoboundaries_iff (f : twoCocycles A) : f ∈ twoCoboundaries A ↔
429
- ∃ x : G → A, ∀ g h : G, A.ρ g (x h) - x (g * h) + x g = f (g, h) := exists_congr fun x ↦ by
430
- simpa only [LinearMap.codRestrict, dOne, LinearMap.coe_mk, AddHom.coe_mk] using
431
- groupCohomology.twoCocycles_ext_iff
434
+ @[simp]
435
+ lemma twoCoboundariesToTwoCocycles_apply (x : twoCoboundaries A) :
436
+ twoCoboundariesToTwoCocycles A x = x.1 := rfl
432
437
433
438
end Coboundaries
434
439
@@ -508,46 +513,55 @@ variable {k G A : Type u} [CommRing k] [Group G] [AddCommGroup A] [Module k A]
508
513
/-- Given a `k`-module `A` with a compatible `DistribMulAction` of `G`, and a function
509
514
`f : G → A` satisfying the 1-cocycle condition, produces a 1-cocycle for the representation on
510
515
`A` induced by the `DistribMulAction`. -/
516
+ @[simps]
511
517
def oneCocyclesOfIsOneCocycle {f : G → A} (hf : IsOneCocycle f) :
512
518
oneCocycles (Rep.ofDistribMulAction k G A) :=
513
519
⟨f, (mem_oneCocycles_iff (A := Rep.ofDistribMulAction k G A) f).2 hf⟩
514
520
515
- theorem isOneCocycle_of_oneCocycles (f : oneCocycles (Rep.ofDistribMulAction k G A)) :
516
- IsOneCocycle (A := A) f := (mem_oneCocycles_iff f).1 f.2
521
+ theorem isOneCocycle_of_mem_oneCocycles
522
+ (f : G → A) (hf : f ∈ oneCocycles (Rep.ofDistribMulAction k G A)) :
523
+ IsOneCocycle f :=
524
+ fun _ _ => (mem_oneCocycles_iff (A := Rep.ofDistribMulAction k G A) f).1 hf _ _
517
525
518
526
/-- Given a `k`-module `A` with a compatible `DistribMulAction` of `G`, and a function
519
527
`f : G → A` satisfying the 1-coboundary condition, produces a 1-coboundary for the representation
520
528
on `A` induced by the `DistribMulAction`. -/
529
+ @[simps]
521
530
def oneCoboundariesOfIsOneCoboundary {f : G → A} (hf : IsOneCoboundary f) :
522
531
oneCoboundaries (Rep.ofDistribMulAction k G A) :=
523
- oneCoboundariesOfMemRange ⟨ hf.choose, funext hf.choose_spec⟩
532
+ ⟨f, hf.choose, funext hf.choose_spec⟩
524
533
525
- theorem isOneCoboundary_of_oneCoboundaries (f : oneCoboundaries (Rep.ofDistribMulAction k G A)) :
526
- IsOneCoboundary (A := A) f.1 .1 := by
527
- rcases mem_range_of_mem_oneCoboundaries f.2 with ⟨x, hx⟩
528
- exact ⟨x, by rw [← hx]; intro g; rfl⟩
534
+ theorem isOneCoboundary_of_mem_oneCoboundaries
535
+ (f : G → A) (hf : f ∈ oneCoboundaries (Rep.ofDistribMulAction k G A)) :
536
+ IsOneCoboundary f := by
537
+ rcases hf with ⟨a, rfl⟩
538
+ exact ⟨a, fun _ => rfl⟩
529
539
530
540
/-- Given a `k`-module `A` with a compatible `DistribMulAction` of `G`, and a function
531
541
`f : G × G → A` satisfying the 2-cocycle condition, produces a 2-cocycle for the representation on
532
542
`A` induced by the `DistribMulAction`. -/
543
+ @[simps]
533
544
def twoCocyclesOfIsTwoCocycle {f : G × G → A} (hf : IsTwoCocycle f) :
534
545
twoCocycles (Rep.ofDistribMulAction k G A) :=
535
546
⟨f, (mem_twoCocycles_iff (A := Rep.ofDistribMulAction k G A) f).2 hf⟩
536
547
537
- theorem isTwoCocycle_of_twoCocycles (f : twoCocycles (Rep.ofDistribMulAction k G A)) :
538
- IsTwoCocycle (A := A) f := (mem_twoCocycles_iff f).1 f.2
548
+ theorem isTwoCocycle_of_mem_twoCocycles
549
+ (f : G × G → A) (hf : f ∈ twoCocycles (Rep.ofDistribMulAction k G A)) :
550
+ IsTwoCocycle f := (mem_twoCocycles_iff (A := Rep.ofDistribMulAction k G A) f).1 hf
539
551
540
552
/-- Given a `k`-module `A` with a compatible `DistribMulAction` of `G`, and a function
541
553
`f : G × G → A` satisfying the 2-coboundary condition, produces a 2-coboundary for the
542
554
representation on `A` induced by the `DistribMulAction`. -/
555
+ @[simps]
543
556
def twoCoboundariesOfIsTwoCoboundary {f : G × G → A} (hf : IsTwoCoboundary f) :
544
557
twoCoboundaries (Rep.ofDistribMulAction k G A) :=
545
- twoCoboundariesOfMemRange (⟨ hf.choose,funext fun g ↦ hf.choose_spec g.1 g.2 ⟩)
558
+ ⟨f, hf.choose,funext fun g ↦ hf.choose_spec g.1 g.2 ⟩
546
559
547
- theorem isTwoCoboundary_of_twoCoboundaries (f : twoCoboundaries (Rep.ofDistribMulAction k G A)) :
548
- IsTwoCoboundary (A := A) f.1 .1 := by
549
- rcases mem_range_of_mem_twoCoboundaries f.2 with ⟨x, hx⟩
550
- exact ⟨x, fun g h => funext_iff.1 hx (g, h)⟩
560
+ theorem isTwoCoboundary_of_mem_twoCoboundaries
561
+ (f : G × G → A) (hf : f ∈ twoCoboundaries (Rep.ofDistribMulAction k G A)) :
562
+ IsTwoCoboundary f := by
563
+ rcases hf with ⟨a, rfl⟩
564
+ exact ⟨a, fun _ _ => rfl⟩
551
565
552
566
end ofDistribMulAction
553
567
@@ -631,48 +645,55 @@ variable {G M : Type} [Group G] [CommGroup M] [MulDistribMulAction G M]
631
645
/-- Given an abelian group `M` with a `MulDistribMulAction` of `G`, and a function
632
646
`f : G → M` satisfying the multiplicative 1-cocycle condition, produces a 1-cocycle for the
633
647
representation on `Additive M` induced by the `MulDistribMulAction`. -/
648
+ @[simps]
634
649
def oneCocyclesOfIsMulOneCocycle {f : G → M} (hf : IsMulOneCocycle f) :
635
650
oneCocycles (Rep.ofMulDistribMulAction G M) :=
636
651
⟨Additive.ofMul ∘ f, (mem_oneCocycles_iff (A := Rep.ofMulDistribMulAction G M) f).2 hf⟩
637
652
638
- theorem isMulOneCocycle_of_oneCocycles (f : oneCocycles (Rep.ofMulDistribMulAction G M)) :
639
- IsMulOneCocycle (M := M) (Additive.toMul ∘ f) := (mem_oneCocycles_iff f).1 f.2
653
+ theorem isMulOneCocycle_of_mem_oneCocycles
654
+ (f : G → M) (hf : f ∈ oneCocycles (Rep.ofMulDistribMulAction G M)) :
655
+ IsMulOneCocycle (Additive.toMul ∘ f) :=
656
+ (mem_oneCocycles_iff (A := Rep.ofMulDistribMulAction G M) f).1 hf
640
657
641
658
/-- Given an abelian group `M` with a `MulDistribMulAction` of `G`, and a function
642
659
`f : G → M` satisfying the multiplicative 1-coboundary condition, produces a
643
660
1-coboundary for the representation on `Additive M` induced by the `MulDistribMulAction`. -/
661
+ @[simps]
644
662
def oneCoboundariesOfIsMulOneCoboundary {f : G → M} (hf : IsMulOneCoboundary f) :
645
663
oneCoboundaries (Rep.ofMulDistribMulAction G M) :=
646
- oneCoboundariesOfMemRange (f := Additive.ofMul ∘ f) ⟨ hf.choose, funext hf.choose_spec⟩
664
+ ⟨f, hf.choose, funext hf.choose_spec⟩
647
665
648
- theorem isMulOneCoboundary_of_oneCoboundaries
649
- (f : oneCoboundaries (Rep.ofMulDistribMulAction G M)) :
650
- IsMulOneCoboundary (M := M) (Additive.ofMul ∘ f. 1 . 1 ) := by
651
- rcases mem_range_of_mem_oneCoboundaries f. 2 with ⟨x, hx ⟩
652
- exact ⟨x, by rw [← hx]; intro g; rfl⟩
666
+ theorem isMulOneCoboundary_of_mem_oneCoboundaries
667
+ (f : G → M) (hf : f ∈ oneCoboundaries (Rep.ofMulDistribMulAction G M)) :
668
+ IsMulOneCoboundary (M := M) (Additive.ofMul ∘ f) := by
669
+ rcases hf with ⟨x, rfl ⟩
670
+ exact ⟨x, fun _ => rfl⟩
653
671
654
672
/-- Given an abelian group `M` with a `MulDistribMulAction` of `G`, and a function
655
673
`f : G × G → M` satisfying the multiplicative 2-cocycle condition, produces a 2-cocycle for the
656
674
representation on `Additive M` induced by the `MulDistribMulAction`. -/
675
+ @[simps]
657
676
def twoCocyclesOfIsMulTwoCocycle {f : G × G → M} (hf : IsMulTwoCocycle f) :
658
677
twoCocycles (Rep.ofMulDistribMulAction G M) :=
659
678
⟨Additive.ofMul ∘ f, (mem_twoCocycles_iff (A := Rep.ofMulDistribMulAction G M) f).2 hf⟩
660
679
661
- theorem isMulTwoCocycle_of_twoCocycles (f : twoCocycles (Rep.ofMulDistribMulAction G M)) :
662
- IsMulTwoCocycle (M := M) (Additive.toMul ∘ f) := (mem_twoCocycles_iff f).1 f.2
680
+ theorem isMulTwoCocycle_of_mem_twoCocycles
681
+ (f : G × G → M) (hf : f ∈ twoCocycles (Rep.ofMulDistribMulAction G M)) :
682
+ IsMulTwoCocycle (Additive.toMul ∘ f) :=
683
+ (mem_twoCocycles_iff (A := Rep.ofMulDistribMulAction G M) f).1 hf
663
684
664
685
/-- Given an abelian group `M` with a `MulDistribMulAction` of `G`, and a function
665
686
`f : G × G → M` satisfying the multiplicative 2-coboundary condition, produces a
666
687
2-coboundary for the representation on `M` induced by the `MulDistribMulAction`. -/
667
688
def twoCoboundariesOfIsMulTwoCoboundary {f : G × G → M} (hf : IsMulTwoCoboundary f) :
668
689
twoCoboundaries (Rep.ofMulDistribMulAction G M) :=
669
- twoCoboundariesOfMemRange ⟨ hf.choose, funext fun g ↦ hf.choose_spec g.1 g.2 ⟩
690
+ ⟨f, hf.choose, funext fun g ↦ hf.choose_spec g.1 g.2 ⟩
670
691
671
- theorem isMulTwoCoboundary_of_twoCoboundaries
672
- (f : twoCoboundaries (Rep.ofMulDistribMulAction G M)) :
673
- IsMulTwoCoboundary (M := M) (Additive.toMul ∘ f. 1 . 1 ) := by
674
- rcases mem_range_of_mem_twoCoboundaries f. 2 with ⟨x, hx ⟩
675
- exact ⟨x, fun g h => funext_iff. 1 hx (g, h) ⟩
692
+ theorem isMulTwoCoboundary_of_mem_twoCoboundaries
693
+ (f : G × G → M) (hf : f ∈ twoCoboundaries (Rep.ofMulDistribMulAction G M)) :
694
+ IsMulTwoCoboundary (M := M) (Additive.toMul ∘ f) := by
695
+ rcases hf with ⟨x, rfl ⟩
696
+ exact ⟨x, fun _ _ => rfl ⟩
676
697
677
698
end ofMulDistribMulAction
678
699
@@ -691,8 +712,9 @@ abbrev H1 := (shortComplexH1 A).moduleCatHomology
691
712
abbrev H1π : ModuleCat.of k (oneCocycles A) ⟶ H1 A := (shortComplexH1 A).moduleCatHomologyπ
692
713
693
714
variable {A} in
694
- lemma H1π_eq_zero_iff (x : oneCocycles A) : H1π A x = 0 ↔ x ∈ oneCoboundaries A :=
695
- Submodule.Quotient.mk_eq_zero _
715
+ lemma H1π_eq_zero_iff (x : oneCocycles A) : H1π A x = 0 ↔ ⇑x ∈ oneCoboundaries A := by
716
+ show (LinearMap.range ((dZero A).codRestrict (oneCocycles A) _)).mkQ _ = 0 ↔ _
717
+ simp [LinearMap.range_codRestrict, oneCoboundaries]
696
718
697
719
/-- We define the 2nd group cohomology of a `k`-linear `G`-representation `A`, `H²(G, A)`, to be
698
720
2-cocycles (i.e. `Z²(G, A) := Ker(d² : Fun(G², A) → Fun(G³, A)`) modulo 2-coboundaries
@@ -703,8 +725,9 @@ abbrev H2 := (shortComplexH2 A).moduleCatHomology
703
725
abbrev H2π : ModuleCat.of k (twoCocycles A) ⟶ H2 A := (shortComplexH2 A).moduleCatHomologyπ
704
726
705
727
variable {A} in
706
- lemma H2π_eq_zero_iff (x : twoCocycles A) : H2π A x = 0 ↔ x ∈ twoCoboundaries A :=
707
- Submodule.Quotient.mk_eq_zero _
728
+ lemma H2π_eq_zero_iff (x : twoCocycles A) : H2π A x = 0 ↔ ⇑x ∈ twoCoboundaries A := by
729
+ show (LinearMap.range ((dOne A).codRestrict (twoCocycles A) _)).mkQ _ = 0 ↔ _
730
+ simp [LinearMap.range_codRestrict, twoCoboundaries]
708
731
709
732
end Cohomology
710
733
@@ -731,8 +754,9 @@ section H1
731
754
group homs `G → A`. -/
732
755
def H1LequivOfIsTrivial [A.IsTrivial] :
733
756
H1 A ≃ₗ[k] Additive G →+ A :=
734
- (Submodule.quotEquivOfEqBot _ (oneCoboundaries_eq_bot_of_isTrivial A)).trans
735
- (oneCocyclesLequivOfIsTrivial A)
757
+ (Submodule.quotEquivOfEqBot _
758
+ (by simp [shortComplexH1, ShortComplex.moduleCatToCycles, Submodule.eq_bot_iff])).trans
759
+ (oneCocyclesLequivOfIsTrivial A)
736
760
737
761
theorem H1LequivOfIsTrivial_comp_H1π [A.IsTrivial] :
738
762
(H1LequivOfIsTrivial A).comp (H1π A).hom = oneCocyclesLequivOfIsTrivial A := by
0 commit comments