-- Module: Mathlib.RepresentationTheory.Homological.GroupCohomology.Functoriality
Goal:
k G : Type u
inst : CommRing k
inst_1 : Group G
A : Rep k G
S : Subgroup G
inst_2 : S.Normal
x : ↥(cocycles₁ A)
hx :
  Eq (α := (↑(groupCohomology (res S.subtype A) 1) : Type u))
    ((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
            ModuleCat.carrier) (H1π (res S.subtype A)) :
          (a : ↥(cocycles₁ (res S.subtype A))) → (↑(groupCohomology (res S.subtype A) 1) : Type u))
        ((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
                ModuleCat.carrier) (mapCocycles₁ S.subtype (𝟙 (res S.subtype A))) :
              (a : ↥(cocycles₁ A)) → ↥(cocycles₁ (res S.subtype A)))
            x :
          ↥(cocycles₁ (res S.subtype A))) :
      (↑(groupCohomology (res S.subtype A) 1) : Type u))
    (0 : (↑(groupCohomology (res S.subtype A) 1) : Type u))
y : (↑A : Type u)
hy :
  Eq (α := ↥S → (↑(res S.subtype A) : Type u))
    ((ModuleCat.Hom.hom (d₀₁ (res S.subtype A)) :
          (a : (↑(ModuleCat.of k (↑(res S.subtype A) : Type u)) : Type u)) → ↥S → (↑(res S.subtype A) : Type u))
        y :
      ↥S → (↑(res S.subtype A) : Type u))
    ((⇑((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
                  ModuleCat.carrier) (mapCocycles₁ S.subtype (𝟙 (res S.subtype A))) :
                (a : ↥(cocycles₁ A)) → ↥(cocycles₁ (res S.subtype A)))
              x :
            ↥(cocycles₁ (res S.subtype A))) :
        (a : ↥S) → (↑(res S.subtype A) : Type u)) :
      (a : ↥S) → (↑(res S.subtype A) : Type u))
h1 :
  ∀ (g h : G),
    (x : (a : G) → (↑A : Type u)) (g * h) =
      HAdd.hAdd (α := (↑A : Type u)) (β := (↑A : Type u))
        ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
              (a : (↑A : Type u)) → (↑A : Type u))
            ((x : (a : G) → (↑A : Type u)) h : (↑A : Type u)) :
          (↑A : Type u))
        ((x : (a : G) → (↑A : Type u)) g : (↑A : Type u))
h2 :
  ∀ s ∈ S,
    (x : (a : G) → (↑A : Type u)) s =
      HSub.hSub (α := (↑A : Type u))
        ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) s : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
              (a : (↑A : Type u)) → (↑A : Type u))
            y :
          (↑A : Type u))
        y
h :
  ∀ (g : G ⧸ S) (g : G),
    HSub.hSub (β := (↑A : Type u)) ((↑x : G → (↑A : Type u)) g)
          ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
                (a : (↑A : Type u)) → (↑A : Type u))
              y :
            (↑A : Type u)) +
        y ∈
      invariants (MonoidHom.comp A.ρ S.subtype)
h₁ :
  ∀ (g : G ⧸ S) (a b : G),
    (QuotientGroup.leftRel S : G → G → Prop) a b →
      Eq.{u + 1} (α := (↑(A.quotientToInvariants S) : Type u))
        ((fun (g : G) ↦
            (Subtype.mk (p := fun (x : (↑A : Type u)) ↦ x ∈ invariants (MonoidHom.comp A.ρ S.subtype))
                (HSub.hSub (β := (↑A : Type u)) ((↑x : G → (↑A : Type u)) g)
                    ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
                          (a : (↑A : Type u)) → (↑A : Type u))
                        y :
                      (↑A : Type u)) +
                  y)
                ⋯ :
              ↥(invariants (MonoidHom.comp A.ρ S.subtype))))
          a)
        ((fun (g : G) ↦
            (Subtype.mk (p := fun (x : (↑A : Type u)) ↦ x ∈ invariants (MonoidHom.comp A.ρ S.subtype))
                (HSub.hSub (β := (↑A : Type u)) ((↑x : G → (↑A : Type u)) g)
                    ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
                          (a : (↑A : Type u)) → (↑A : Type u))
                        y :
                      (↑A : Type u)) +
                  y)
                ⋯ :
              ↥(invariants (MonoidHom.comp A.ρ S.subtype))))
          b)
h₂ :
  Membership.mem (γ := Submodule k (G ⧸ S → (↑(A.quotientToInvariants S) : Type u)))
    (cocycles₁ (A.quotientToInvariants S)) fun (g : G ⧸ S) ↦
    Quotient.liftOn' g
      (fun (g : G) ↦
        Subtype.mk (p := fun (x : (↑A : Type u)) ↦ x ∈ invariants (MonoidHom.comp A.ρ S.subtype))
          (HSub.hSub (β := (↑A : Type u)) ((↑x : G → (↑A : Type u)) g)
              ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g : (↑A : Type u) →ₗ[k] (↑A : Type u)) :
                    (a : (↑A : Type u)) → (↑A : Type u))
                  y :
                (↑A : Type u)) +
            y)
          ⋯)
      ⋯
h₃ :
  Eq (α := (↑(groupCohomology A 1) : Type u))
    ((ModuleCat.Hom.hom (map (QuotientGroup.mk' S) (ofHom (A.ρ.quotientToInvariants_lift S)) 1) :
          (a : (↑(groupCohomology (A.quotientToInvariants S) 1) : Type u)) → (↑(groupCohomology A 1) : Type u))
        ((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
                ModuleCat.carrier) (X := ModuleCat.of k ↥(cocycles₁ (A.quotientToInvariants S)))
                (H1π (A.quotientToInvariants S)) :
              (a : (↑(ModuleCat.of k ↥(cocycles₁ (A.quotientToInvariants S))) : Type u)) →
                (↑(H1 (A.quotientToInvariants S)) : Type u))
            (Subtype.mk (p := fun (x : G ⧸ S → (↑(A.quotientToInvariants S) : Type u)) ↦
              Membership.mem (γ := Submodule k (G ⧸ S → (↑(A.quotientToInvariants S) : Type u)))
                (cocycles₁ (A.quotientToInvariants S)) x)
              (fun (g : G ⧸ S) ↦
                Quotient.liftOn' g
                  (fun (g : G) ↦
                    Subtype.mk (p := fun (x : (↑A : Type u)) ↦ x ∈ invariants (MonoidHom.comp A.ρ S.subtype))
                      (HSub.hSub (β := (↑A : Type u)) ((↑x : G → (↑A : Type u)) g)
                          ((((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g :
                                  (↑A : Type u) →ₗ[k] (↑A : Type u)) :
                                (a : (↑A : Type u)) → (↑A : Type u))
                              y :
                            (↑A : Type u)) +
                        y)
                      ⋯)
                  ⋯)
              ⋯) :
          (↑(H1 (A.quotientToInvariants S)) : Type u)) :
      (↑(groupCohomology A 1) : Type u))
    ((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
            ModuleCat.carrier) (H1π A) :
          (a : ↥(cocycles₁ A)) → (↑(H1 A) : Type u))
        x :
      (↑(H1 A) : Type u))
⊢ Membership.mem (α := (↑(groupCohomology A 1) : Type u)) (γ := Submodule k (↑(groupCohomology A 1) : Type u))
    (LinearMap.range (M := (↑(groupCohomology (A.quotientToInvariants S) 1) : Type u))
      (ModuleCat.Hom.hom (map (QuotientGroup.mk' S) (ofHom (A.ρ.quotientToInvariants_lift S)) 1)))
    ((ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
            ModuleCat.carrier) (H1π A) :
          (a : ↥(cocycles₁ A)) → (↑(H1 A) : Type u))
        x :
      (↑(H1 A) : Type u))

Tactic:
refine ⟨H1π _ ⟨fun g => Quotient.liftOn' g (fun g => ⟨x.1 g - A.ρ g y + y, ?_⟩) ?_, ?_⟩, ?_⟩