/-
Copyright (c) 2018 Kevin Buzzard, Patrick Massot. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Patrick Massot

This file is to a certain extent based on `quotient_module.lean` by Johannes Hölzl.

! This file was ported from Lean 3 source module group_theory.quotient_group
! leanprover-community/mathlib commit 0ebfdb71919ac6ca5d7fbc61a082fa2519556818
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.GroupTheory.Congruence
import Mathbin.GroupTheory.Coset
import Mathbin.GroupTheory.Subgroup.Finite
import Mathbin.GroupTheory.Subgroup.Pointwise

/-!
# Quotients of groups by normal subgroups

> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
> Any changes to this file require a corresponding PR to mathlib4.

This files develops the basic theory of quotients of groups by normal subgroups. In particular it
proves Noether's first and second isomorphism theorems.

## Main definitions

* `mk'`: the canonical group homomorphism `G →* G/N` given a normal subgroup `N` of `G`.
* `lift φ`: the group homomorphism `G/N →* H` given a group homomorphism `φ : G →* H` such that
  `N ⊆ ker φ`.
* `map f`: the group homomorphism `G/N →* H/M` given a group homomorphism `f : G →* H` such that
  `N ⊆ f⁻¹(M)`.

## Main statements

* `quotient_ker_equiv_range`: Noether's first isomorphism theorem, an explicit isomorphism
  `G/ker φ → range φ` for every group homomorphism `φ : G →* H`.
* `quotient_inf_equiv_prod_normal_quotient`: Noether's second isomorphism theorem, an explicit
  isomorphism between `H/(H ∩ N)` and `(HN)/N` given a subgroup `H` and a normal subgroup `N` of a
  group `G`.
* `quotient_group.quotient_quotient_equiv_quotient`: Noether's third isomorphism theorem,
  the canonical isomorphism between `(G / N) / (M / N)` and `G / M`, where `N ≤ M`.

## Tags

isomorphism theorems, quotient groups
-/

open Function

universe u v

namespace QuotientGroup

variable {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] {H : Type v} [Group H]

include nN

/- warning: quotient_group.con -> QuotientGroup.con is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Con.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Con.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))
Case conversion may be inaccurate. Consider using '#align quotient_group.con QuotientGroup.conₓ'. -/
/-- The congruence relation generated by a normal subgroup. -/
@[to_additive "The additive congruence relation generated by a normal additive subgroup."]
protected def con : Con G where
  toSetoid := leftRel N
  mul' a b c d hab hcd := by
    rw [left_rel_eq] at hab hcd⊢
    calc
      (a * c)⁻¹ * (b * d) = c⁻¹ * (a⁻¹ * b) * c⁻¹⁻¹ * (c⁻¹ * d) := by
        simp only [mul_inv_rev, mul_assoc, inv_mul_cancel_left]
      _ ∈ N := N.mul_mem (nN.conj_mem _ hab _) hcd

#align quotient_group.con QuotientGroup.con
#align quotient_add_group.con QuotientAddGroup.con

#print QuotientGroup.Quotient.group /-
@[to_additive]
instance Quotient.group : Group (G ⧸ N) :=
  (QuotientGroup.con N).Group
#align quotient_group.quotient.group QuotientGroup.Quotient.group
#align quotient_add_group.quotient.add_group QuotientAddGroup.Quotient.addGroup
-/

#print QuotientGroup.mk' /-
/-- The group homomorphism from `G` to `G/N`. -/
@[to_additive "The additive group homomorphism from `G` to `G/N`."]
def mk' : G →* G ⧸ N :=
  MonoidHom.mk' QuotientGroup.mk fun _ _ => rfl
#align quotient_group.mk' QuotientGroup.mk'
#align quotient_add_group.mk' QuotientAddGroup.mk'
-/

/- warning: quotient_group.coe_mk' -> QuotientGroup.coe_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (QuotientGroup.mk'.{u1} G _inst_1 N nN)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Eq.{succ u1} (forall (a : G), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN)) (QuotientGroup.mk.{u1} G _inst_1 N)
Case conversion may be inaccurate. Consider using '#align quotient_group.coe_mk' QuotientGroup.coe_mk'ₓ'. -/
@[simp, to_additive]
theorem coe_mk' : (mk' N : G → G ⧸ N) = coe :=
  rfl
#align quotient_group.coe_mk' QuotientGroup.coe_mk'
#align quotient_add_group.coe_mk' QuotientAddGroup.coe_mk'

/- warning: quotient_group.mk'_apply -> QuotientGroup.mk'_apply is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (x : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) x)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (x : G), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) x) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x) (QuotientGroup.mk.{u1} G _inst_1 N x)
Case conversion may be inaccurate. Consider using '#align quotient_group.mk'_apply QuotientGroup.mk'_applyₓ'. -/
@[simp, to_additive]
theorem mk'_apply (x : G) : mk' N x = x :=
  rfl
#align quotient_group.mk'_apply QuotientGroup.mk'_apply
#align quotient_add_group.mk'_apply QuotientAddGroup.mk'_apply

/- warning: quotient_group.mk'_surjective -> QuotientGroup.mk'_surjective is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Function.Surjective.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Function.Surjective.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN))
Case conversion may be inaccurate. Consider using '#align quotient_group.mk'_surjective QuotientGroup.mk'_surjectiveₓ'. -/
@[to_additive]
theorem mk'_surjective : Surjective <| mk' N :=
  @mk_surjective _ _ N
#align quotient_group.mk'_surjective QuotientGroup.mk'_surjective
#align quotient_add_group.mk'_surjective QuotientAddGroup.mk'_surjective

/- warning: quotient_group.mk'_eq_mk' -> QuotientGroup.mk'_eq_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {x : G} {y : G}, Iff (Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) y)) (Exists.{succ u1} G (fun (z : G) => Exists.{0} (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) z N) (fun (H : Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) z N) => Eq.{succ u1} G (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) x z) y)))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {x : G} {y : G}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) x) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) y)) (Exists.{succ u1} G (fun (z : G) => And (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) z N) (Eq.{succ u1} G (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) x z) y)))
Case conversion may be inaccurate. Consider using '#align quotient_group.mk'_eq_mk' QuotientGroup.mk'_eq_mk'ₓ'. -/
@[to_additive]
theorem mk'_eq_mk' {x y : G} : mk' N x = mk' N y ↔ ∃ z ∈ N, x * z = y :=
  QuotientGroup.eq'.trans <| by
    simp only [← _root_.eq_inv_mul_iff_mul_eq, exists_prop, exists_eq_right]
#align quotient_group.mk'_eq_mk' QuotientGroup.mk'_eq_mk'
#align quotient_add_group.mk'_eq_mk' QuotientAddGroup.mk'_eq_mk'

#print QuotientGroup.monoidHom_ext /-
/-- Two `monoid_hom`s from a quotient group are equal if their compositions with
`quotient_group.mk'` are equal.

See note [partially-applied ext lemmas]. -/
@[ext,
  to_additive
      " Two `add_monoid_hom`s from an additive quotient group are equal if their\ncompositions with `add_quotient_group.mk'` are equal.\n\nSee note [partially-applied ext lemmas]. "]
theorem monoidHom_ext ⦃f g : G ⧸ N →* H⦄ (h : f.comp (mk' N) = g.comp (mk' N)) : f = g :=
  MonoidHom.ext fun x => QuotientGroup.induction_on x <| (MonoidHom.congr_fun h : _)
#align quotient_group.monoid_hom_ext QuotientGroup.monoidHom_ext
#align quotient_add_group.add_monoid_hom_ext QuotientAddGroup.addMonoidHom_ext
-/

/- warning: quotient_group.eq_one_iff -> QuotientGroup.eq_one_iff is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {N : Subgroup.{u1} G _inst_1} [nN : Subgroup.Normal.{u1} G _inst_1 N] (x : G), Iff (Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) x) (OfNat.ofNat.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) 1 (OfNat.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) 1 (One.one.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasOne.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))))) (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) x N)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {N : Subgroup.{u1} G _inst_1} [nN : Subgroup.Normal.{u1} G _inst_1 N] (x : G), Iff (Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N x) (OfNat.ofNat.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) 1 (One.toOfNat1.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (InvOneClass.toOne.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvOneMonoid.toInvOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivisionMonoid.toDivInvOneMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivisionMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))))) (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x N)
Case conversion may be inaccurate. Consider using '#align quotient_group.eq_one_iff QuotientGroup.eq_one_iffₓ'. -/
@[simp, to_additive]
theorem eq_one_iff {N : Subgroup G} [nN : N.Normal] (x : G) : (x : G ⧸ N) = 1 ↔ x ∈ N :=
  by
  refine' quotient_group.eq.trans _
  rw [mul_one, Subgroup.inv_mem_iff]
#align quotient_group.eq_one_iff QuotientGroup.eq_one_iff
#align quotient_add_group.eq_zero_iff QuotientAddGroup.eq_zero_iff

#print QuotientGroup.ker_mk' /-
@[simp, to_additive]
theorem ker_mk' : MonoidHom.ker (QuotientGroup.mk' N : G →* G ⧸ N) = N :=
  Subgroup.ext eq_one_iff
#align quotient_group.ker_mk QuotientGroup.ker_mk'
#align quotient_add_group.ker_mk QuotientAddGroup.ker_mk'
-/

/- warning: quotient_group.eq_iff_div_mem -> QuotientGroup.eq_iff_div_mem is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {N : Subgroup.{u1} G _inst_1} [nN : Subgroup.Normal.{u1} G _inst_1 N] {x : G} {y : G}, Iff (Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) x) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) y)) (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y) N)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {N : Subgroup.{u1} G _inst_1} [nN : Subgroup.Normal.{u1} G _inst_1 N] {x : G} {y : G}, Iff (Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N x) (QuotientGroup.mk.{u1} G _inst_1 N y)) (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y) N)
Case conversion may be inaccurate. Consider using '#align quotient_group.eq_iff_div_mem QuotientGroup.eq_iff_div_memₓ'. -/
@[to_additive]
theorem eq_iff_div_mem {N : Subgroup G} [nN : N.Normal] {x y : G} : (x : G ⧸ N) = y ↔ x / y ∈ N :=
  by
  refine' eq_comm.trans (quotient_group.eq.trans _)
  rw [nN.mem_comm_iff, div_eq_mul_inv]
#align quotient_group.eq_iff_div_mem QuotientGroup.eq_iff_div_mem
#align quotient_add_group.eq_iff_sub_mem QuotientAddGroup.eq_iff_sub_mem

-- for commutative groups we don't need normality assumption
omit nN

#print QuotientGroup.Quotient.commGroup /-
@[to_additive]
instance Quotient.commGroup {G : Type _} [CommGroup G] (N : Subgroup G) : CommGroup (G ⧸ N) :=
  { @QuotientGroup.Quotient.group _ _ N N.normal_of_comm with
    mul_comm := fun a b => Quotient.inductionOn₂' a b fun a b => congr_arg mk (mul_comm a b) }
#align quotient_group.quotient.comm_group QuotientGroup.Quotient.commGroup
#align quotient_add_group.quotient.add_comm_group QuotientAddGroup.Quotient.addCommGroup
-/

include nN

-- mathport name: exprQ
local notation " Q " => G ⧸ N

/- warning: quotient_group.coe_one -> QuotientGroup.mk_one is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) (OfNat.ofNat.{u1} G 1 (OfNat.mk.{u1} G 1 (One.one.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))))) (OfNat.ofNat.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) 1 (OfNat.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) 1 (One.one.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasOne.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N], Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N (OfNat.ofNat.{u1} G 1 (One.toOfNat1.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1))))))) (OfNat.ofNat.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) 1 (One.toOfNat1.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (InvOneClass.toOne.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvOneMonoid.toInvOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivisionMonoid.toDivInvOneMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivisionMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.coe_one QuotientGroup.mk_oneₓ'. -/
@[simp, to_additive]
theorem mk_one : ((1 : G) : Q ) = 1 :=
  rfl
#align quotient_group.coe_one QuotientGroup.mk_one
#align quotient_add_group.coe_zero QuotientAddGroup.mk_zero

/- warning: quotient_group.coe_mul -> QuotientGroup.mk_mul is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G) (b : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a b)) (HMul.hMul.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (instHMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) b))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G) (b : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a b)) (HMul.hMul.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (instHMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))) (QuotientGroup.mk.{u1} G _inst_1 N a) (QuotientGroup.mk.{u1} G _inst_1 N b))
Case conversion may be inaccurate. Consider using '#align quotient_group.coe_mul QuotientGroup.mk_mulₓ'. -/
@[simp, to_additive]
theorem mk_mul (a b : G) : ((a * b : G) : Q ) = a * b :=
  rfl
#align quotient_group.coe_mul QuotientGroup.mk_mul
#align quotient_add_group.coe_add QuotientAddGroup.mk_add

/- warning: quotient_group.coe_inv -> QuotientGroup.mk_inv is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) a)) (Inv.inv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toHasInv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) a))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) a)) (Inv.inv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (InvOneClass.toInv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvOneMonoid.toInvOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivisionMonoid.toDivInvOneMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivisionMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk.{u1} G _inst_1 N a))
Case conversion may be inaccurate. Consider using '#align quotient_group.coe_inv QuotientGroup.mk_invₓ'. -/
@[simp, to_additive]
theorem mk_inv (a : G) : ((a⁻¹ : G) : Q ) = a⁻¹ :=
  rfl
#align quotient_group.coe_inv QuotientGroup.mk_inv
#align quotient_add_group.coe_neg QuotientAddGroup.mk_neg

/- warning: quotient_group.coe_div -> QuotientGroup.mk_div is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G) (b : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) a b)) (HDiv.hDiv.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (instHDiv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toHasDiv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) b))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (a : G) (b : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 N (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) a b)) (HDiv.hDiv.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (instHDiv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toDiv.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.mk.{u1} G _inst_1 N a) (QuotientGroup.mk.{u1} G _inst_1 N b))
Case conversion may be inaccurate. Consider using '#align quotient_group.coe_div QuotientGroup.mk_divₓ'. -/
@[simp, to_additive]
theorem mk_div (a b : G) : ((a / b : G) : Q ) = a / b :=
  rfl
#align quotient_group.coe_div QuotientGroup.mk_div
#align quotient_add_group.coe_sub QuotientAddGroup.mk_sub

#print QuotientGroup.mk_pow /-
@[simp, to_additive]
theorem mk_pow (a : G) (n : ℕ) : ((a ^ n : G) : Q ) = a ^ n :=
  rfl
#align quotient_group.coe_pow QuotientGroup.mk_pow
#align quotient_add_group.coe_nsmul QuotientAddGroup.mk_nsmul
-/

#print QuotientGroup.mk_zpow /-
@[simp, to_additive]
theorem mk_zpow (a : G) (n : ℤ) : ((a ^ n : G) : Q ) = a ^ n :=
  rfl
#align quotient_group.coe_zpow QuotientGroup.mk_zpow
#align quotient_add_group.coe_zsmul QuotientAddGroup.mk_zsmul
-/

/- warning: quotient_group.lift -> QuotientGroup.lift is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (forall (x : G), (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) x N) -> (Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ x) (OfNat.ofNat.{u2} H 1 (OfNat.mk.{u2} H 1 (One.one.{u2} H (MulOneClass.toHasOne.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) -> (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (forall (x : G), (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x N) -> (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (InvOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (Group.toDivisionMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2)))))))) -> (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))
Case conversion may be inaccurate. Consider using '#align quotient_group.lift QuotientGroup.liftₓ'. -/
/-- A group homomorphism `φ : G →* H` with `N ⊆ ker(φ)` descends (i.e. `lift`s) to a
group homomorphism `G/N →* H`. -/
@[to_additive
      "An `add_group` homomorphism `φ : G →+ H` with `N ⊆ ker(φ)` descends (i.e. `lift`s)\nto a group homomorphism `G/N →* H`."]
def lift (φ : G →* H) (HN : ∀ x ∈ N, φ x = 1) : Q →* H :=
  (QuotientGroup.con N).lift φ fun x y h =>
    by
    simp only [QuotientGroup.con, left_rel_apply, Con.rel_mk] at h
    calc
      φ x = φ (y * (x⁻¹ * y)⁻¹) := by rw [mul_inv_rev, inv_inv, mul_inv_cancel_left]
      _ = φ y := by rw [φ.map_mul, HN _ (N.inv_mem h), mul_one]

#align quotient_group.lift QuotientGroup.lift
#align quotient_add_group.lift QuotientAddGroup.lift

/- warning: quotient_group.lift_mk -> QuotientGroup.lift_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) x N) -> (Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ x) (OfNat.ofNat.{u2} H 1 (OfNat.mk.{u2} H 1 (One.one.{u2} H (MulOneClass.toHasOne.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) (g : G), Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) g)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ g)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x N) -> (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (InvOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (Group.toDivisionMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2)))))))) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) (QuotientGroup.mk.{u1} G _inst_1 N g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) (QuotientGroup.mk.{u1} G _inst_1 N g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ g)
Case conversion may be inaccurate. Consider using '#align quotient_group.lift_mk QuotientGroup.lift_mkₓ'. -/
@[simp, to_additive]
theorem lift_mk {φ : G →* H} (HN : ∀ x ∈ N, φ x = 1) (g : G) : lift N φ HN (g : Q ) = φ g :=
  rfl
#align quotient_group.lift_mk QuotientGroup.lift_mk
#align quotient_add_group.lift_mk QuotientAddGroup.lift_mk

/- warning: quotient_group.lift_mk' -> QuotientGroup.lift_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) x N) -> (Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ x) (OfNat.ofNat.{u2} H 1 (OfNat.mk.{u2} H 1 (One.one.{u2} H (MulOneClass.toHasOne.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) (g : G), Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) (QuotientGroup.mk.{u1} G _inst_1 N g)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ g)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x N) -> (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (InvOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (Group.toDivisionMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2)))))))) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) (QuotientGroup.mk.{u1} G _inst_1 N g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) (QuotientGroup.mk.{u1} G _inst_1 N g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ g)
Case conversion may be inaccurate. Consider using '#align quotient_group.lift_mk' QuotientGroup.lift_mk'ₓ'. -/
@[simp, to_additive]
theorem lift_mk' {φ : G →* H} (HN : ∀ x ∈ N, φ x = 1) (g : G) : lift N φ HN (mk g : Q ) = φ g :=
  rfl
#align quotient_group.lift_mk' QuotientGroup.lift_mk'
#align quotient_add_group.lift_mk' QuotientAddGroup.lift_mk'

/- warning: quotient_group.lift_quot_mk -> QuotientGroup.lift_quot_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.Mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.hasMem.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) x N) -> (Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ x) (OfNat.ofNat.{u2} H 1 (OfNat.mk.{u2} H 1 (One.one.{u2} H (MulOneClass.toHasOne.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) (g : G), Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 N nN)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) (Quot.mk.{succ u1} G (Setoid.r.{succ u1} G (QuotientGroup.leftRel.{u1} G _inst_1 N)) g)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ g)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))} (HN : forall (x : G), (Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x N) -> (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (InvOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (Group.toDivisionMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2)))))))) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) (Quot.mk.{succ u1} G (Setoid.r.{succ u1} G (QuotientGroup.leftRel.{u1} G _inst_1 N)) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.lift.{u1, u2} G _inst_1 N nN H _inst_2 φ HN) (Quot.mk.{succ u1} G (Setoid.r.{succ u1} G (QuotientGroup.leftRel.{u1} G _inst_1 N)) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ g)
Case conversion may be inaccurate. Consider using '#align quotient_group.lift_quot_mk QuotientGroup.lift_quot_mkₓ'. -/
@[simp, to_additive]
theorem lift_quot_mk {φ : G →* H} (HN : ∀ x ∈ N, φ x = 1) (g : G) :
    lift N φ HN (Quot.mk _ g : Q ) = φ g :=
  rfl
#align quotient_group.lift_quot_mk QuotientGroup.lift_quot_mk
#align quotient_add_group.lift_quot_mk QuotientAddGroup.lift_quot_mk

/- warning: quotient_group.map -> QuotientGroup.map is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) -> (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) -> (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.map QuotientGroup.mapₓ'. -/
/-- A group homomorphism `f : G →* H` induces a map `G/N →* H/M` if `N ⊆ f⁻¹(M)`. -/
@[to_additive
      "An `add_group` homomorphism `f : G →+ H` induces a map `G/N →+ H/M` if\n`N ⊆ f⁻¹(M)`."]
def map (M : Subgroup H) [M.Normal] (f : G →* H) (h : N ≤ M.comap f) : G ⧸ N →* H ⧸ M :=
  by
  refine' QuotientGroup.lift N ((mk' M).comp f) _
  intro x hx
  refine' QuotientGroup.eq.2 _
  rw [mul_one, Subgroup.inv_mem_iff]
  exact h hx
#align quotient_group.map QuotientGroup.map
#align quotient_add_group.map QuotientAddGroup.map

/- warning: quotient_group.map_coe -> QuotientGroup.map_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (x : G), Eq.{succ u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M)) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_3 f h) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) x)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasLiftT.mk.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (CoeTCₓ.coe.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u2} H _inst_2 M))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) f x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.mk.{u1} G _inst_1 N x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3)))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))))) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_3 f h) (QuotientGroup.mk.{u1} G _inst_1 N x)) (QuotientGroup.mk.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2 M (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) f x))
Case conversion may be inaccurate. Consider using '#align quotient_group.map_coe QuotientGroup.map_mkₓ'. -/
@[simp, to_additive]
theorem map_mk (M : Subgroup H) [M.Normal] (f : G →* H) (h : N ≤ M.comap f) (x : G) :
    map N M f h ↑x = ↑(f x) :=
  rfl
#align quotient_group.map_coe QuotientGroup.map_mk
#align quotient_add_group.map_coe QuotientAddGroup.map_mk

/- warning: quotient_group.map_mk' -> QuotientGroup.map_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (x : G), Eq.{succ u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M)) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_3 f h) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasLiftT.mk.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (CoeTCₓ.coe.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u2} H _inst_2 M))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) f x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (M : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u2} H _inst_2 M] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (a : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) a) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3)))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_3))))))) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_3 f h) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.mk'.{u1} G _inst_1 N nN) x)) (QuotientGroup.mk.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_2 M (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) f x))
Case conversion may be inaccurate. Consider using '#align quotient_group.map_mk' QuotientGroup.map_mk'ₓ'. -/
@[to_additive]
theorem map_mk' (M : Subgroup H) [M.Normal] (f : G →* H) (h : N ≤ M.comap f) (x : G) :
    map N M f h (mk' _ x) = ↑(f x) :=
  rfl
#align quotient_group.map_mk' QuotientGroup.map_mk'
#align quotient_add_group.map_mk' QuotientAddGroup.map_mk'

/- warning: quotient_group.map_id_apply -> QuotientGroup.map_id_apply is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (h : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N)) (Eq.le.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N) N (Subgroup.comap_id.{u1} G _inst_1 N))) (x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (fun (_x : MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MonoidHom.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 N nN (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) x) x
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (h : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N)) (Eq.le.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1)))) (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N) N (Subgroup.comap_id.{u1} G _inst_1 N))) (x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) x) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (MonoidHom.monoidHomClass.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 N nN (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) x) x
Case conversion may be inaccurate. Consider using '#align quotient_group.map_id_apply QuotientGroup.map_id_applyₓ'. -/
@[to_additive]
theorem map_id_apply (h : N ≤ Subgroup.comap (MonoidHom.id _) N := (Subgroup.comap_id N).le) (x) :
    map N N (MonoidHom.id _) h x = x :=
  induction_on' x fun x => rfl
#align quotient_group.map_id_apply QuotientGroup.map_id_apply
#align quotient_add_group.map_id_apply QuotientAddGroup.map_id_apply

/- warning: quotient_group.map_id -> QuotientGroup.map_id is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (h : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N)) (Eq.le.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N) N (Subgroup.comap_id.{u1} G _inst_1 N))), Eq.{succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 N nN (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) (MonoidHom.id.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (h : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N)) (Eq.le.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1)))) (Subgroup.comap.{u1, u1} G _inst_1 G _inst_1 (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) N) N (Subgroup.comap_id.{u1} G _inst_1 N))), Eq.{succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 N nN (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) (MonoidHom.id.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.map_id QuotientGroup.map_idₓ'. -/
@[simp, to_additive]
theorem map_id (h : N ≤ Subgroup.comap (MonoidHom.id _) N := (Subgroup.comap_id N).le) :
    map N N (MonoidHom.id _) h = MonoidHom.id _ :=
  MonoidHom.ext (map_id_apply N h)
#align quotient_group.map_id QuotientGroup.map_id
#align quotient_add_group.map_id QuotientAddGroup.map_id

/- warning: quotient_group.map_map -> QuotientGroup.map_map is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {I : Type.{u3}} [_inst_3 : Group.{u3} I] (M : Subgroup.{u2} H _inst_2) (O : Subgroup.{u3} I _inst_3) [_inst_4 : Subgroup.Normal.{u2} H _inst_2 M] [_inst_5 : Subgroup.Normal.{u3} I _inst_3 O] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : MonoidHom.{u2, u3} H I (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3)))) (hf : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (hg : LE.le.{u2} (Subgroup.{u2} H _inst_2) (Preorder.toLE.{u2} (Subgroup.{u2} H _inst_2) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} H _inst_2) (SetLike.partialOrder.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)))) M (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O)) (hgf : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O)) (LE.le.trans.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O) hf (LE.le.trans_eq.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O)) (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O) (Subgroup.comap_mono.{u1, u2} G _inst_1 H _inst_2 f M (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O) hg) (Subgroup.comap_comap.{u1, u2, u3} G _inst_1 H _inst_2 I _inst_3 O g f)))) (x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N), Eq.{succ u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) (fun (_x : MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) => (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) -> (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O)) (MonoidHom.hasCoeToFun.{u2, u3} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) (QuotientGroup.map.{u2, u3} H _inst_2 M _inst_4 I _inst_3 O _inst_5 g hg) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4))))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M)) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4))))) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_4 f hf) x)) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) (fun (_x : MonoidHom.{u1, u3} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O)) (MonoidHom.hasCoeToFun.{u1, u3} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) (QuotientGroup.map.{u1, u3} G _inst_1 N nN I _inst_3 O _inst_5 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) hgf) x)
but is expected to have type
  forall {G : Type.{u2}} [_inst_1 : Group.{u2} G] (N : Subgroup.{u2} G _inst_1) [nN : Subgroup.Normal.{u2} G _inst_1 N] {H : Type.{u3}} [_inst_2 : Group.{u3} H] {I : Type.{u1}} [_inst_3 : Group.{u1} I] (M : Subgroup.{u3} H _inst_2) (O : Subgroup.{u1} I _inst_3) [_inst_4 : Subgroup.Normal.{u3} H _inst_2 M] [_inst_5 : Subgroup.Normal.{u1} I _inst_3 O] (f : MonoidHom.{u2, u3} G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2)))) (g : MonoidHom.{u3, u1} H I (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3)))) (hf : LE.le.{u2} (Subgroup.{u2} G _inst_1) (Preorder.toLE.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1))))) N (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M)) (hg : LE.le.{u3} (Subgroup.{u3} H _inst_2) (Preorder.toLE.{u3} (Subgroup.{u3} H _inst_2) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} H _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} H _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} H _inst_2) (Subgroup.instCompleteLatticeSubgroup.{u3} H _inst_2))))) M (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O)) (hgf : optParam.{0} (LE.le.{u2} (Subgroup.{u2} G _inst_1) (Preorder.toLE.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1))))) N (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O)) (LE.le.trans.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1)))) N (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O) hf (LE.le.trans_eq.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1)))) (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O)) (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O) (Subgroup.comap_mono.{u3, u2} G _inst_1 H _inst_2 f M (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O) hg) (Subgroup.comap_comap.{u2, u3, u1} G _inst_1 H _inst_2 I _inst_3 O g f)))) (x : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) => HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (fun (a : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) a) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN))))) (MulOneClass.toMul.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (MonoidHom.monoidHomClass.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))))) (QuotientGroup.map.{u2, u3} G _inst_1 N nN H _inst_2 M _inst_4 f hf) x)) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (fun (_x : HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) => HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (MulOneClass.toMul.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5)))) (MonoidHom.monoidHomClass.{u3, u1} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))))) (QuotientGroup.map.{u3, u1} H _inst_2 M _inst_4 I _inst_3 O _inst_5 g hg) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN))))) (MulOneClass.toMul.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (MonoidHom.monoidHomClass.{u2, u3} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4))))))) (QuotientGroup.map.{u2, u3} G _inst_1 N nN H _inst_2 M _inst_4 f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) => HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5)))) (MonoidHom.monoidHomClass.{u2, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))))) (QuotientGroup.map.{u2, u1} G _inst_1 N nN I _inst_3 O _inst_5 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) hgf) x)
Case conversion may be inaccurate. Consider using '#align quotient_group.map_map QuotientGroup.map_mapₓ'. -/
@[simp, to_additive]
theorem map_map {I : Type _} [Group I] (M : Subgroup H) (O : Subgroup I) [M.Normal] [O.Normal]
    (f : G →* H) (g : H →* I) (hf : N ≤ Subgroup.comap f M) (hg : M ≤ Subgroup.comap g O)
    (hgf : N ≤ Subgroup.comap (g.comp f) O :=
      hf.trans ((Subgroup.comap_mono hg).trans_eq (Subgroup.comap_comap _ _ _)))
    (x : G ⧸ N) : map M O g hg (map N M f hf x) = map N O (g.comp f) hgf x :=
  by
  refine' induction_on' x fun x => _
  simp only [map_coe, MonoidHom.comp_apply]
#align quotient_group.map_map QuotientGroup.map_map
#align quotient_add_group.map_map QuotientAddGroup.map_map

/- warning: quotient_group.map_comp_map -> QuotientGroup.map_comp_map is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] {H : Type.{u2}} [_inst_2 : Group.{u2} H] {I : Type.{u3}} [_inst_3 : Group.{u3} I] (M : Subgroup.{u2} H _inst_2) (O : Subgroup.{u3} I _inst_3) [_inst_4 : Subgroup.Normal.{u2} H _inst_2 M] [_inst_5 : Subgroup.Normal.{u3} I _inst_3 O] (f : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : MonoidHom.{u2, u3} H I (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3)))) (hf : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M)) (hg : LE.le.{u2} (Subgroup.{u2} H _inst_2) (Preorder.toLE.{u2} (Subgroup.{u2} H _inst_2) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} H _inst_2) (SetLike.partialOrder.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)))) M (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O)) (hgf : optParam.{0} (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O)) (LE.le.trans.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) N (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O) hf (LE.le.trans_eq.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1))) (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u1, u2} G _inst_1 H _inst_2 f (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O)) (Subgroup.comap.{u1, u3} G _inst_1 I _inst_3 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) O) (Subgroup.comap_mono.{u1, u2} G _inst_1 H _inst_2 f M (Subgroup.comap.{u2, u3} H _inst_2 I _inst_3 g O) hg) (Subgroup.comap_comap.{u1, u2, u3} G _inst_1 H _inst_2 I _inst_3 O g f)))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5))))) (MonoidHom.comp.{u1, u2, u3} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) M) (QuotientGroup.Quotient.group.{u2} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} I (Subgroup.{u3} I _inst_3) (QuotientGroup.Subgroup.hasQuotient.{u3} I _inst_3) O) (QuotientGroup.Quotient.group.{u3} I _inst_3 O _inst_5)))) (QuotientGroup.map.{u2, u3} H _inst_2 M _inst_4 I _inst_3 O _inst_5 g hg) (QuotientGroup.map.{u1, u2} G _inst_1 N nN H _inst_2 M _inst_4 f hf)) (QuotientGroup.map.{u1, u3} G _inst_1 N nN I _inst_3 O _inst_5 (MonoidHom.comp.{u1, u2, u3} G H I (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u3} I (DivInvMonoid.toMonoid.{u3} I (Group.toDivInvMonoid.{u3} I _inst_3))) g f) hgf)
but is expected to have type
  forall {G : Type.{u2}} [_inst_1 : Group.{u2} G] (N : Subgroup.{u2} G _inst_1) [nN : Subgroup.Normal.{u2} G _inst_1 N] {H : Type.{u3}} [_inst_2 : Group.{u3} H] {I : Type.{u1}} [_inst_3 : Group.{u1} I] (M : Subgroup.{u3} H _inst_2) (O : Subgroup.{u1} I _inst_3) [_inst_4 : Subgroup.Normal.{u3} H _inst_2 M] [_inst_5 : Subgroup.Normal.{u1} I _inst_3 O] (f : MonoidHom.{u2, u3} G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2)))) (g : MonoidHom.{u3, u1} H I (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3)))) (hf : LE.le.{u2} (Subgroup.{u2} G _inst_1) (Preorder.toLE.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1))))) N (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M)) (hg : LE.le.{u3} (Subgroup.{u3} H _inst_2) (Preorder.toLE.{u3} (Subgroup.{u3} H _inst_2) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} H _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} H _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} H _inst_2) (Subgroup.instCompleteLatticeSubgroup.{u3} H _inst_2))))) M (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O)) (hgf : optParam.{0} (LE.le.{u2} (Subgroup.{u2} G _inst_1) (Preorder.toLE.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1))))) N (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O)) (LE.le.trans.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1)))) N (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O) hf (LE.le.trans_eq.{u2} (Subgroup.{u2} G _inst_1) (PartialOrder.toPreorder.{u2} (Subgroup.{u2} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subgroup.{u2} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subgroup.{u2} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u2} G _inst_1)))) (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f M) (Subgroup.comap.{u2, u3} G _inst_1 H _inst_2 f (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O)) (Subgroup.comap.{u2, u1} G _inst_1 I _inst_3 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) O) (Subgroup.comap_mono.{u3, u2} G _inst_1 H _inst_2 f M (Subgroup.comap.{u3, u1} H _inst_2 I _inst_3 g O) hg) (Subgroup.comap_comap.{u2, u3, u1} G _inst_1 H _inst_2 I _inst_3 O g f)))), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5))))) (MonoidHom.comp.{u2, u3, u1} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} G (Subgroup.{u2} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u2} G _inst_1) N) (QuotientGroup.Quotient.group.{u2} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (DivInvMonoid.toMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (Group.toDivInvMonoid.{u3} (HasQuotient.Quotient.{u3, u3} H (Subgroup.{u3} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u3} H _inst_2) M) (QuotientGroup.Quotient.group.{u3} H _inst_2 M _inst_4)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} I (Subgroup.{u1} I _inst_3) (QuotientGroup.instHasQuotientSubgroup.{u1} I _inst_3) O) (QuotientGroup.Quotient.group.{u1} I _inst_3 O _inst_5)))) (QuotientGroup.map.{u3, u1} H _inst_2 M _inst_4 I _inst_3 O _inst_5 g hg) (QuotientGroup.map.{u2, u3} G _inst_1 N nN H _inst_2 M _inst_4 f hf)) (QuotientGroup.map.{u2, u1} G _inst_1 N nN I _inst_3 O _inst_5 (MonoidHom.comp.{u2, u3, u1} G H I (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Monoid.toMulOneClass.{u3} H (DivInvMonoid.toMonoid.{u3} H (Group.toDivInvMonoid.{u3} H _inst_2))) (Monoid.toMulOneClass.{u1} I (DivInvMonoid.toMonoid.{u1} I (Group.toDivInvMonoid.{u1} I _inst_3))) g f) hgf)
Case conversion may be inaccurate. Consider using '#align quotient_group.map_comp_map QuotientGroup.map_comp_mapₓ'. -/
@[simp, to_additive]
theorem map_comp_map {I : Type _} [Group I] (M : Subgroup H) (O : Subgroup I) [M.Normal] [O.Normal]
    (f : G →* H) (g : H →* I) (hf : N ≤ Subgroup.comap f M) (hg : M ≤ Subgroup.comap g O)
    (hgf : N ≤ Subgroup.comap (g.comp f) O :=
      hf.trans ((Subgroup.comap_mono hg).trans_eq (Subgroup.comap_comap _ _ _))) :
    (map M O g hg).comp (map N M f hf) = map N O (g.comp f) hgf :=
  MonoidHom.ext (map_map N M O f g hf hg hgf)
#align quotient_group.map_comp_map QuotientGroup.map_comp_map
#align quotient_add_group.map_comp_map QuotientAddGroup.map_comp_map

omit nN

section congr

variable (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H']

/- warning: quotient_group.congr -> QuotientGroup.congr is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))), (Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H') -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))), (Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H') -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr QuotientGroup.congrₓ'. -/
/-- `quotient_group.congr` lifts the isomorphism `e : G ≃ H` to `G ⧸ G' ≃ H ⧸ H'`,
given that `e` maps `G` to `H`. -/
@[to_additive
      "`quotient_add_group.congr` lifts the isomorphism `e : G ≃ H` to `G ⧸ G' ≃ H ⧸ H'`,\ngiven that `e` maps `G` to `H`."]
def congr (e : G ≃* H) (he : G'.map ↑e = H') : G ⧸ G' ≃* H ⧸ H' :=
  {-- `simp` doesn't like this lemma...
      -- `simp` doesn't like this lemma...
      map
      G' H' (↑e)
      (he ▸ G'.le_comap_map
          e) with
    toFun := map G' H' (↑e) (he ▸ G'.le_comap_map e)
    invFun := map H' G' (↑e.symm) (he ▸ (G'.map_equiv_eq_comap_symm e).le)
    left_inv := fun x => by
      rw [map_map] <;>
        simp only [map_map, ← MulEquiv.coe_monoidHom_trans, MulEquiv.self_trans_symm,
          MulEquiv.coe_monoidHom_refl, map_id_apply]
    right_inv := fun x => by
      rw [map_map] <;>
        simp only [← MulEquiv.coe_monoidHom_trans, MulEquiv.symm_trans_self,
          MulEquiv.coe_monoidHom_refl, map_id_apply] }
#align quotient_group.congr QuotientGroup.congr
#align quotient_add_group.congr QuotientAddGroup.congr

/- warning: quotient_group.congr_mk -> QuotientGroup.congr_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H') (x : G), Eq.{succ u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (fun (_x : MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H')) (MulEquiv.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) (QuotientGroup.mk.{u1} G _inst_1 G' x)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (HasLiftT.mk.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (CoeTCₓ.coe.{succ u2, succ u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u2} H _inst_2 H'))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (fun (_x : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) => G -> H) (MulEquiv.hasCoeToFun.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) e x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H') (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.mk.{u1} G _inst_1 G' x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) (QuotientGroup.mk.{u1} G _inst_1 G' x)) (QuotientGroup.mk.{u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : G) => H) x) _inst_2 H' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G (fun (_x : G) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : G) => H) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))))) e x))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr_mk QuotientGroup.congr_mkₓ'. -/
@[simp]
theorem congr_mk (e : G ≃* H) (he : G'.map ↑e = H') (x) : congr G' H' e he (mk x) = e x :=
  rfl
#align quotient_group.congr_mk QuotientGroup.congr_mk

/- warning: quotient_group.congr_mk' -> QuotientGroup.congr_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H') (x : G), Eq.{succ u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (fun (_x : MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H')) (MulEquiv.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (fun (_x : MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) => G -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G')) (MonoidHom.hasCoeToFun.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (QuotientGroup.mk'.{u1} G _inst_1 G' _inst_3) x)) (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (fun (_x : MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) => H -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H')) (MonoidHom.hasCoeToFun.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (QuotientGroup.mk'.{u2} H _inst_2 H' _inst_4) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (fun (_x : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) => G -> H) (MulEquiv.hasCoeToFun.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) e x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H') (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (fun (a : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') a) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))))) (QuotientGroup.mk'.{u1} G _inst_1 G' _inst_3) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))) (MonoidHom.monoidHomClass.{u1, u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))))) (QuotientGroup.mk'.{u1} G _inst_1 G' _inst_3) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (fun (_x : H) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))) (MonoidHom.monoidHomClass.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))) (QuotientGroup.mk'.{u2} H _inst_2 H' _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G (fun (_x : G) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : G) => H) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))))) e x))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr_mk' QuotientGroup.congr_mk'ₓ'. -/
theorem congr_mk' (e : G ≃* H) (he : G'.map ↑e = H') (x) :
    congr G' H' e he (mk' G' x) = mk' H' (e x) :=
  rfl
#align quotient_group.congr_mk' QuotientGroup.congr_mk'

/- warning: quotient_group.congr_apply -> QuotientGroup.congr_apply is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H') (x : G), Eq.{succ u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (fun (_x : MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H')) (MulEquiv.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 G'))) x)) (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (fun (_x : MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) => H -> (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H')) (MonoidHom.hasCoeToFun.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (QuotientGroup.mk'.{u2} H _inst_2 H' _inst_4) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (fun (_x : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) => G -> H) (MulEquiv.hasCoeToFun.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) e x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H') (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.mk.{u1} G _inst_1 G' x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he) (QuotientGroup.mk.{u1} G _inst_1 G' x)) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (fun (_x : H) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H) => HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4)))) (MonoidHom.monoidHomClass.{u2, u2} H (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))))) (QuotientGroup.mk'.{u2} H _inst_2 H' _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G (fun (_x : G) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : G) => H) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))))) e x))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr_apply QuotientGroup.congr_applyₓ'. -/
@[simp]
theorem congr_apply (e : G ≃* H) (he : G'.map ↑e = H') (x : G) :
    congr G' H' e he x = mk' H' (e x) :=
  rfl
#align quotient_group.congr_apply QuotientGroup.congr_apply

/- warning: quotient_group.congr_refl -> QuotientGroup.congr_refl is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (G' : Subgroup.{u1} G _inst_1) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] (he : optParam.{0} (Eq.{succ u1} (Subgroup.{u1} G _inst_1) (Subgroup.map.{u1, u1} G _inst_1 G _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (MulEquiv.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u1, u1} G G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (HasLiftT.mk.{succ u1, succ u1} (MulEquiv.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u1, u1} G G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (CoeTCₓ.coe.{succ u1, succ u1} (MulEquiv.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u1, u1} G G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MonoidHom.hasCoeT.{u1, u1, u1} G G (MulEquiv.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquivClass.monoidHomClass.{u1, u1, u1} (MulEquiv.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) G G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquiv.mulEquivClass.{u1, u1} G G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))))))) (MulEquiv.refl.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) G') G') (Subgroup.map_id.{u1} G _inst_1 G')), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))))) (QuotientGroup.congr.{u1, u1} G _inst_1 G _inst_1 G' G' _inst_3 _inst_3 (MulEquiv.refl.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) he) (MulEquiv.refl.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (G' : Subgroup.{u1} G _inst_1) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] (he : optParam.{0} (Eq.{succ u1} (Subgroup.{u1} G _inst_1) (Subgroup.map.{u1, u1} G _inst_1 G _inst_1 (MonoidHomClass.toMonoidHom.{u1, u1, u1} G G (MulEquiv.{u1, u1} G G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquivClass.instMonoidHomClass.{u1, u1, u1} (MulEquiv.{u1, u1} G G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) G G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u1} G G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) (MulEquiv.refl.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) G') G') (Subgroup.map_id.{u1} G _inst_1 G')), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))))) (QuotientGroup.congr.{u1, u1} G _inst_1 G _inst_1 G' G' _inst_3 _inst_3 (MulEquiv.refl.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) he) (MulEquiv.refl.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr_refl QuotientGroup.congr_reflₓ'. -/
@[simp]
theorem congr_refl (he : G'.map (MulEquiv.refl G : G →* G) = G' := Subgroup.map_id G') :
    congr G' G' (MulEquiv.refl G) he = MulEquiv.refl (G ⧸ G') :=
  by
  ext ⟨x⟩
  rfl
#align quotient_group.congr_refl QuotientGroup.congr_refl

/- warning: quotient_group.congr_symm -> QuotientGroup.congr_symm is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H'), Eq.{max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))))) (MulEquiv.symm.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toHasMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.Subgroup.hasQuotient.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he)) (QuotientGroup.congr.{u2, u1} H _inst_2 G _inst_1 H' G' _inst_4 _inst_3 (MulEquiv.symm.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) e) (Iff.mpr (Eq.{succ u1} (Subgroup.{u1} G _inst_1) (Subgroup.map.{u2, u1} H _inst_2 G _inst_1 ((fun (a : Sort.{max (succ u2) (succ u1)}) (b : Sort.{max (succ u1) (succ u2)}) [self : HasLiftT.{max (succ u2) (succ u1), max (succ u1) (succ u2)} a b] => self.0) (MulEquiv.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u2, u1} H G (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (HasLiftT.mk.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulEquiv.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u2, u1} H G (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (CoeTCₓ.coe.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulEquiv.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (MonoidHom.{u2, u1} H G (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MonoidHom.hasCoeT.{u2, u1, max u2 u1} H G (MulEquiv.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquivClass.monoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) H G (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquiv.mulEquivClass.{u2, u1} H G (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))))))) (MulEquiv.symm.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) e)) H') G') (Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.mulEquivClass.{u1, u2} G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))))))) e) G') H') (Subgroup.map_symm_eq_iff_map_eq.{u1, u2} G _inst_1 G' H _inst_2 H' e) he))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (G' : Subgroup.{u1} G _inst_1) (H' : Subgroup.{u2} H _inst_2) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 G'] [_inst_4 : Subgroup.Normal.{u2} H _inst_2 H'] (e : MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (he : Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H'), Eq.{max (succ u1) (succ u2)} (MulEquiv.{u2, u1} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3)))))) (MulEquiv.symm.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) G') (QuotientGroup.Quotient.group.{u1} G _inst_1 G' _inst_3))))) (MulOneClass.toMul.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Monoid.toMulOneClass.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (DivInvMonoid.toMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (Group.toDivInvMonoid.{u2} (HasQuotient.Quotient.{u2, u2} H (Subgroup.{u2} H _inst_2) (QuotientGroup.instHasQuotientSubgroup.{u2} H _inst_2) H') (QuotientGroup.Quotient.group.{u2} H _inst_2 H' _inst_4))))) (QuotientGroup.congr.{u1, u2} G _inst_1 H _inst_2 G' H' _inst_3 _inst_4 e he)) (QuotientGroup.congr.{u2, u1} H _inst_2 G _inst_1 H' G' _inst_4 _inst_3 (MulEquiv.symm.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) e) (Iff.mpr (Eq.{succ u1} (Subgroup.{u1} G _inst_1) (Subgroup.map.{u2, u1} H _inst_2 G _inst_1 (MonoidHomClass.toMonoidHom.{u2, u1, max u1 u2} H G (MulEquiv.{u2, u1} H G (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u2, u1} (MulEquiv.{u2, u1} H G (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) H G (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} H G (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) (MulEquiv.symm.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) e)) H') G') (Eq.{succ u2} (Subgroup.{u2} H _inst_2) (Subgroup.map.{u1, u2} G _inst_1 H _inst_2 (MonoidHomClass.toMonoidHom.{u1, u2, max u1 u2} G H (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquivClass.instMonoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) e) G') H') (Subgroup.map_symm_eq_iff_map_eq.{u1, u2} G _inst_1 G' H _inst_2 H' e) he))
Case conversion may be inaccurate. Consider using '#align quotient_group.congr_symm QuotientGroup.congr_symmₓ'. -/
@[simp]
theorem congr_symm (e : G ≃* H) (he : G'.map ↑e = H') :
    (congr G' H' e he).symm = congr H' G' e.symm ((Subgroup.map_symm_eq_iff_map_eq _).mpr he) :=
  rfl
#align quotient_group.congr_symm QuotientGroup.congr_symm

end congr

variable (φ : G →* H)

open MonoidHom

#print QuotientGroup.kerLift /-
/-- The induced map from the quotient by the kernel to the codomain. -/
@[to_additive "The induced map from the quotient by the kernel to the codomain."]
def kerLift : G ⧸ ker φ →* H :=
  lift _ φ fun g => φ.mem_ker.mp
#align quotient_group.ker_lift QuotientGroup.kerLift
#align quotient_add_group.ker_lift QuotientAddGroup.kerLift
-/

/- warning: quotient_group.ker_lift_mk -> QuotientGroup.kerLift_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : G), Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))) g)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ g)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => H) (QuotientGroup.mk.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ) (QuotientGroup.mk.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ g)
Case conversion may be inaccurate. Consider using '#align quotient_group.ker_lift_mk QuotientGroup.kerLift_mkₓ'. -/
@[simp, to_additive]
theorem kerLift_mk (g : G) : (kerLift φ) g = φ g :=
  lift_mk _ _ _
#align quotient_group.ker_lift_mk QuotientGroup.kerLift_mk
#align quotient_add_group.ker_lift_mk QuotientAddGroup.kerLift_mk

/- warning: quotient_group.ker_lift_mk' -> QuotientGroup.kerLift_mk' is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : G), Eq.{succ u2} H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ) (QuotientGroup.mk.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) g)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ g)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => H) (QuotientGroup.mk.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ) (QuotientGroup.mk.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ g)
Case conversion may be inaccurate. Consider using '#align quotient_group.ker_lift_mk' QuotientGroup.kerLift_mk'ₓ'. -/
@[simp, to_additive]
theorem kerLift_mk' (g : G) : (kerLift φ) (mk g) = φ g :=
  lift_mk' _ _ _
#align quotient_group.ker_lift_mk' QuotientGroup.kerLift_mk'
#align quotient_add_group.ker_lift_mk' QuotientAddGroup.kerLift_mk'

/- warning: quotient_group.ker_lift_injective -> QuotientGroup.kerLift_injective is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Injective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) -> H) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Con.mulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (QuotientGroup.con.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.kerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Injective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) (QuotientGroup.kerLift.{u1, u2} G _inst_1 H _inst_2 φ))
Case conversion may be inaccurate. Consider using '#align quotient_group.ker_lift_injective QuotientGroup.kerLift_injectiveₓ'. -/
@[to_additive]
theorem kerLift_injective : Injective (kerLift φ) := fun a b =>
  Quotient.inductionOn₂' a b fun a b (h : φ a = φ b) =>
    Quotient.sound' <| by rw [left_rel_apply, mem_ker, φ.map_mul, ← h, φ.map_inv, inv_mul_self]
#align quotient_group.ker_lift_injective QuotientGroup.kerLift_injective
#align quotient_add_group.ker_lift_injective QuotientAddGroup.kerLift_injective

/- warning: quotient_group.range_ker_lift -> QuotientGroup.rangeKerLift is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))
Case conversion may be inaccurate. Consider using '#align quotient_group.range_ker_lift QuotientGroup.rangeKerLiftₓ'. -/
-- Note that `ker φ` isn't definitionally `ker (φ.range_restrict)`
-- so there is a bit of annoying code duplication here
/-- The induced map from the quotient by the kernel to the range. -/
@[to_additive "The induced map from the quotient by the kernel to the range."]
def rangeKerLift : G ⧸ ker φ →* φ.range :=
  lift _ φ.range_restrict fun g hg => (mem_ker _).mp <| by rwa [ker_range_restrict]
#align quotient_group.range_ker_lift QuotientGroup.rangeKerLift
#align quotient_add_group.range_ker_lift QuotientAddGroup.rangeKerLift

/- warning: quotient_group.range_ker_lift_injective -> QuotientGroup.rangeKerLift_injective is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Injective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) -> (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (QuotientGroup.rangeKerLift.{u1, u2} G _inst_1 H _inst_2 φ))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Injective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (QuotientGroup.rangeKerLift.{u1, u2} G _inst_1 H _inst_2 φ))
Case conversion may be inaccurate. Consider using '#align quotient_group.range_ker_lift_injective QuotientGroup.rangeKerLift_injectiveₓ'. -/
@[to_additive]
theorem rangeKerLift_injective : Injective (rangeKerLift φ) := fun a b =>
  Quotient.inductionOn₂' a b fun a b (h : φ.range_restrict a = φ.range_restrict b) =>
    Quotient.sound' <| by
      rw [left_rel_apply, ← ker_range_restrict, mem_ker, φ.range_restrict.map_mul, ← h,
        φ.range_restrict.map_inv, inv_mul_self]
#align quotient_group.range_ker_lift_injective QuotientGroup.rangeKerLift_injective
#align quotient_add_group.range_ker_lift_injective QuotientAddGroup.rangeKerLift_injective

/- warning: quotient_group.range_ker_lift_surjective -> QuotientGroup.rangeKerLift_surjective is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Surjective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (fun (_x : MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) -> (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MonoidHom.hasCoeToFun.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.rangeKerLift._proof_1.{u1, u2} G _inst_1 H _inst_2 φ))))) (Monoid.toMulOneClass.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (DivInvMonoid.toMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Group.toDivInvMonoid.{u2} (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (Subgroup.toGroup.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (QuotientGroup.rangeKerLift.{u1, u2} G _inst_1 H _inst_2 φ))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), Function.Surjective.{succ u1, succ u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) => Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MonoidHom.monoidHomClass.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ))))) (Submonoid.toMulOneClass.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (Subgroup.toSubmonoid.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)))))) (QuotientGroup.rangeKerLift.{u1, u2} G _inst_1 H _inst_2 φ))
Case conversion may be inaccurate. Consider using '#align quotient_group.range_ker_lift_surjective QuotientGroup.rangeKerLift_surjectiveₓ'. -/
@[to_additive]
theorem rangeKerLift_surjective : Surjective (rangeKerLift φ) :=
  by
  rintro ⟨_, g, rfl⟩
  use mk g
  rfl
#align quotient_group.range_ker_lift_surjective QuotientGroup.rangeKerLift_surjective
#align quotient_add_group.range_ker_lift_surjective QuotientAddGroup.rangeKerLift_surjective

/- warning: quotient_group.quotient_ker_equiv_range -> QuotientGroup.quotientKerEquivRange is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (coeSort.{succ u2, succ (succ u2)} (Subgroup.{u2} H _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.setLike.{u2} H _inst_2)) (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ)) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.quotientKerEquivRange._proof_1.{u1, u2} G _inst_1 H _inst_2 φ)))))) (Subgroup.mul.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Subtype.{succ u2} H (fun (x : H) => Membership.mem.{u2, u2} H (Subgroup.{u2} H _inst_2) (SetLike.instMembership.{u2, u2} (Subgroup.{u2} H _inst_2) H (Subgroup.instSetLikeSubgroup.{u2} H _inst_2)) x (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (Subgroup.mul.{u2} H _inst_2 (MonoidHom.range.{u1, u2} G _inst_1 H _inst_2 φ))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_ker_equiv_range QuotientGroup.quotientKerEquivRangeₓ'. -/
/-- **Noether's first isomorphism theorem** (a definition): the canonical isomorphism between
`G/(ker φ)` to `range φ`. -/
@[to_additive
      "The first isomorphism theorem (a definition): the canonical isomorphism between\n`G/(ker φ)` to `range φ`."]
noncomputable def quotientKerEquivRange : G ⧸ ker φ ≃* range φ :=
  MulEquiv.ofBijective (rangeKerLift φ) ⟨rangeKerLift_injective φ, rangeKerLift_surjective φ⟩
#align quotient_group.quotient_ker_equiv_range QuotientGroup.quotientKerEquivRange
#align quotient_add_group.quotient_ker_equiv_range QuotientAddGroup.quotientKerEquivRange

/- warning: quotient_group.quotient_ker_equiv_of_right_inverse -> QuotientGroup.quotientKerEquivOfRightInverse is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (ψ : H -> G), (Function.RightInverse.{succ u1, succ u2} G H ψ (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ)) -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.quotientKerEquivOfRightInverse._proof_1.{u1, u2} G _inst_1 H _inst_2 φ)))))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (ψ : H -> G), (Function.RightInverse.{succ u1, succ u2} G H ψ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ)) -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_ker_equiv_of_right_inverse QuotientGroup.quotientKerEquivOfRightInverseₓ'. -/
/-- The canonical isomorphism `G/(ker φ) ≃* H` induced by a homomorphism `φ : G →* H`
with a right inverse `ψ : H → G`. -/
@[to_additive
      "The canonical isomorphism `G/(ker φ) ≃+ H` induced by a homomorphism `φ : G →+ H`\nwith a right inverse `ψ : H → G`.",
  simps]
def quotientKerEquivOfRightInverse (ψ : H → G) (hφ : RightInverse ψ φ) : G ⧸ ker φ ≃* H :=
  { kerLift φ with
    toFun := kerLift φ
    invFun := mk ∘ ψ
    left_inv := fun x => kerLift_injective φ (by rw [comp_app, ker_lift_mk', hφ])
    right_inv := hφ }
#align quotient_group.quotient_ker_equiv_of_right_inverse QuotientGroup.quotientKerEquivOfRightInverse
#align quotient_add_group.quotient_ker_equiv_of_right_inverse QuotientAddGroup.quotientKerEquivOfRightInverse

/- warning: quotient_group.quotient_bot -> QuotientGroup.quotientBot is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G], MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1))) G (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1))) (QuotientGroup.Quotient.group.{u1} G _inst_1 (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasBot.{u1} G _inst_1)) (QuotientGroup.quotientBot._proof_1.{u1} G _inst_1)))))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G], MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1))) G (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1))) (QuotientGroup.Quotient.group.{u1} G _inst_1 (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1)) (Subgroup.normal_of_characteristic.{u1} G _inst_1 (Bot.bot.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instBotSubgroup.{u1} G _inst_1)) (Subgroup.botCharacteristic.{u1} G _inst_1))))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_bot QuotientGroup.quotientBotₓ'. -/
/-- The canonical isomorphism `G/⊥ ≃* G`. -/
@[to_additive "The canonical isomorphism `G/⊥ ≃+ G`.", simps]
def quotientBot : G ⧸ (⊥ : Subgroup G) ≃* G :=
  quotientKerEquivOfRightInverse (MonoidHom.id G) id fun x => rfl
#align quotient_group.quotient_bot QuotientGroup.quotientBot
#align quotient_add_group.quotient_bot QuotientAddGroup.quotientBot

/- warning: quotient_group.quotient_ker_equiv_of_surjective -> QuotientGroup.quotientKerEquivOfSurjective is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (Function.Surjective.{succ u1, succ u2} G H (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) φ)) -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (QuotientGroup.quotientKerEquivOfRightInverse._proof_1.{u1, u2} G _inst_1 H _inst_2 φ)))))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_2 : Group.{u2} H] (φ : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))), (Function.Surjective.{succ u1, succ u2} G H (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))) φ)) -> (MulEquiv.{u1, u2} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) H (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)) (QuotientGroup.Quotient.group.{u1} G _inst_1 (MonoidHom.ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ) (MonoidHom.normal_ker.{u1, u2} G _inst_1 H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2))) φ)))))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_2)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_ker_equiv_of_surjective QuotientGroup.quotientKerEquivOfSurjectiveₓ'. -/
/-- The canonical isomorphism `G/(ker φ) ≃* H` induced by a surjection `φ : G →* H`.

For a `computable` version, see `quotient_group.quotient_ker_equiv_of_right_inverse`.
-/
@[to_additive
      "The canonical isomorphism `G/(ker φ) ≃+ H` induced by a surjection `φ : G →+ H`.\n\nFor a `computable` version, see `quotient_add_group.quotient_ker_equiv_of_right_inverse`."]
noncomputable def quotientKerEquivOfSurjective (hφ : Surjective φ) : G ⧸ ker φ ≃* H :=
  quotientKerEquivOfRightInverse φ _ hφ.HasRightInverse.choose_spec
#align quotient_group.quotient_ker_equiv_of_surjective QuotientGroup.quotientKerEquivOfSurjective
#align quotient_add_group.quotient_ker_equiv_of_surjective QuotientAddGroup.quotientKerEquivOfSurjective

/- warning: quotient_group.quotient_mul_equiv_of_eq -> QuotientGroup.quotientMulEquivOfEq is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {M : Subgroup.{u1} G _inst_1} {N : Subgroup.{u1} G _inst_1} [_inst_3 : Subgroup.Normal.{u1} G _inst_1 M] [_inst_4 : Subgroup.Normal.{u1} G _inst_1 N], (Eq.{succ u1} (Subgroup.{u1} G _inst_1) M N) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {M : Subgroup.{u1} G _inst_1} {N : Subgroup.{u1} G _inst_1} [_inst_3 : Subgroup.Normal.{u1} G _inst_1 M] [_inst_4 : Subgroup.Normal.{u1} G _inst_1 N], (Eq.{succ u1} (Subgroup.{u1} G _inst_1) M N) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_mul_equiv_of_eq QuotientGroup.quotientMulEquivOfEqₓ'. -/
/-- If two normal subgroups `M` and `N` of `G` are the same, their quotient groups are
isomorphic. -/
@[to_additive
      "If two normal subgroups `M` and `N` of `G` are the same, their quotient groups are\nisomorphic."]
def quotientMulEquivOfEq {M N : Subgroup G} [M.Normal] [N.Normal] (h : M = N) : G ⧸ M ≃* G ⧸ N :=
  { Subgroup.quotientEquivOfEq h with
    map_mul' := fun q r => Quotient.inductionOn₂' q r fun g h => rfl }
#align quotient_group.quotient_mul_equiv_of_eq QuotientGroup.quotientMulEquivOfEq
#align quotient_add_group.quotient_add_equiv_of_eq QuotientAddGroup.quotientAddEquivOfEq

/- warning: quotient_group.quotient_mul_equiv_of_eq_mk -> QuotientGroup.quotientMulEquivOfEq_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {M : Subgroup.{u1} G _inst_1} {N : Subgroup.{u1} G _inst_1} [_inst_3 : Subgroup.Normal.{u1} G _inst_1 M] [_inst_4 : Subgroup.Normal.{u1} G _inst_1 N] (h : Eq.{succ u1} (Subgroup.{u1} G _inst_1) M N) (x : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (coeFn.{succ u1, succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (fun (_x : MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N)) (MulEquiv.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (QuotientGroup.quotientMulEquivOfEq.{u1} G _inst_1 M N _inst_3 _inst_4 h) (QuotientGroup.mk.{u1} G _inst_1 M x)) (QuotientGroup.mk.{u1} G _inst_1 N x)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {M : Subgroup.{u1} G _inst_1} {N : Subgroup.{u1} G _inst_1} [_inst_3 : Subgroup.Normal.{u1} G _inst_1 M] [_inst_4 : Subgroup.Normal.{u1} G _inst_1 N] (h : Eq.{succ u1} (Subgroup.{u1} G _inst_1) M N) (x : G), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.mk.{u1} G _inst_1 M x)) (FunLike.coe.{succ u1, succ u1, succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (EquivLike.toEmbeddingLike.{succ u1, succ u1, succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulEquivClass.toEquivLike.{u1, u1, u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4)))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4))))) (MulEquiv.instMulEquivClassMulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M _inst_3))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N _inst_4))))))))) (QuotientGroup.quotientMulEquivOfEq.{u1} G _inst_1 M N _inst_3 _inst_4 h) (QuotientGroup.mk.{u1} G _inst_1 M x)) (QuotientGroup.mk.{u1} G _inst_1 N x)
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_mul_equiv_of_eq_mk QuotientGroup.quotientMulEquivOfEq_mkₓ'. -/
@[simp, to_additive]
theorem quotientMulEquivOfEq_mk {M N : Subgroup G} [M.Normal] [N.Normal] (h : M = N) (x : G) :
    QuotientGroup.quotientMulEquivOfEq h (QuotientGroup.mk x) = QuotientGroup.mk x :=
  rfl
#align quotient_group.quotient_mul_equiv_of_eq_mk QuotientGroup.quotientMulEquivOfEq_mk
#align quotient_add_group.quotient_add_equiv_of_eq_mk QuotientAddGroup.quotientAddEquivOfEq_mk

/- warning: quotient_group.quotient_map_subgroup_of_of_le -> QuotientGroup.quotientMapSubgroupOfOfLe is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) A' B') -> (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) A B) -> (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) A' B') -> (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) A B) -> (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_map_subgroup_of_of_le QuotientGroup.quotientMapSubgroupOfOfLeₓ'. -/
/-- Let `A', A, B', B` be subgroups of `G`. If `A' ≤ B'` and `A ≤ B`,
then there is a map `A / (A' ⊓ A) →* B / (B' ⊓ B)` induced by the inclusions. -/
@[to_additive
      "Let `A', A, B', B` be subgroups of `G`. If `A' ≤ B'` and `A ≤ B`,\nthen there is a map `A / (A' ⊓ A) →+ B / (B' ⊓ B)` induced by the inclusions."]
def quotientMapSubgroupOfOfLe {A' A B' B : Subgroup G} [hAN : (A'.subgroupOf A).Normal]
    [hBN : (B'.subgroupOf B).Normal] (h' : A' ≤ B') (h : A ≤ B) :
    A ⧸ A'.subgroupOf A →* B ⧸ B'.subgroupOf B :=
  map _ _ (Subgroup.inclusion h) <| Subgroup.comap_mono h'
#align quotient_group.quotient_map_subgroup_of_of_le QuotientGroup.quotientMapSubgroupOfOfLe
#align quotient_add_group.quotient_map_add_subgroup_of_of_le QuotientAddGroup.quotientMapAddSubgroupOfOfLe

/- warning: quotient_group.quotient_map_subgroup_of_of_le_coe -> QuotientGroup.quotientMapSubgroupOfOfLe_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)] (h' : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) A' B') (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) A B) (x : coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (fun (_x : MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) => (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) -> (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B))) (MonoidHom.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (QuotientGroup.quotientMapSubgroupOfOfLe.{u1} G _inst_1 A' A B' B hAN hBN h' h) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)))) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)))) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)))) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B))))) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)))) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B))))) => (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) -> (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B)) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)))) (Monoid.toMulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B))))) (Subgroup.inclusion.{u1} G _inst_1 A B h) x))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)] (h' : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) A' B') (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) A B) (x : Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) => HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.mk.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (fun (_x : HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) => HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN)))) (MonoidHom.monoidHomClass.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))))) (QuotientGroup.quotientMapSubgroupOfOfLe.{u1} G _inst_1 A' A B' B hAN hBN h' h) (QuotientGroup.mk.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) x)) (QuotientGroup.mk.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) => Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) x) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B))) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (fun (_x : Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) => Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B))) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A))) (MulOneClass.toMul.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B))) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B)) (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 A)) (Submonoid.toMulOneClass.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Subgroup.toSubmonoid.{u1} G _inst_1 B))))) (Subgroup.inclusion.{u1} G _inst_1 A B h) x))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_map_subgroup_of_of_le_coe QuotientGroup.quotientMapSubgroupOfOfLe_mkₓ'. -/
@[simp, to_additive]
theorem quotientMapSubgroupOfOfLe_mk {A' A B' B : Subgroup G} [hAN : (A'.subgroupOf A).Normal]
    [hBN : (B'.subgroupOf B).Normal] (h' : A' ≤ B') (h : A ≤ B) (x : A) :
    quotientMapSubgroupOfOfLe h' h x = ↑(Subgroup.inclusion h x : B) :=
  rfl
#align quotient_group.quotient_map_subgroup_of_of_le_coe QuotientGroup.quotientMapSubgroupOfOfLe_mk
#align quotient_add_group.quotient_map_add_subgroup_of_of_le_coe QuotientAddGroup.quotientMapAddSubgroupOfOfLe_mk

/- warning: quotient_group.equiv_quotient_subgroup_of_of_eq -> QuotientGroup.equivQuotientSubgroupOfOfEq is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)], (Eq.{succ u1} (Subgroup.{u1} G _inst_1) A' B') -> (Eq.{succ u1} (Subgroup.{u1} G _inst_1) A B) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) A) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) B) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {A' : Subgroup.{u1} G _inst_1} {A : Subgroup.{u1} G _inst_1} {B' : Subgroup.{u1} G _inst_1} {B : Subgroup.{u1} G _inst_1} [hAN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)] [hBN : Subgroup.Normal.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)], (Eq.{succ u1} (Subgroup.{u1} G _inst_1) A' B') -> (Eq.{succ u1} (Subgroup.{u1} G _inst_1) A B) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A)) (Subgroup.subgroupOf.{u1} G _inst_1 A' A)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x A)) (Subgroup.toGroup.{u1} G _inst_1 A) (Subgroup.subgroupOf.{u1} G _inst_1 A' A) hAN))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B)) (Subgroup.subgroupOf.{u1} G _inst_1 B' B)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x B)) (Subgroup.toGroup.{u1} G _inst_1 B) (Subgroup.subgroupOf.{u1} G _inst_1 B' B) hBN))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.equiv_quotient_subgroup_of_of_eq QuotientGroup.equivQuotientSubgroupOfOfEqₓ'. -/
/-- Let `A', A, B', B` be subgroups of `G`.
If `A' = B'` and `A = B`, then the quotients `A / (A' ⊓ A)` and `B / (B' ⊓ B)` are isomorphic.

Applying this equiv is nicer than rewriting along the equalities, since the type of
`(A'.subgroup_of A : subgroup A)` depends on on `A`.
-/
@[to_additive
      "Let `A', A, B', B` be subgroups of `G`.\nIf `A' = B'` and `A = B`, then the quotients `A / (A' ⊓ A)` and `B / (B' ⊓ B)` are isomorphic.\n\nApplying this equiv is nicer than rewriting along the equalities, since the type of\n`(A'.add_subgroup_of A : add_subgroup A)` depends on on `A`.\n"]
def equivQuotientSubgroupOfOfEq {A' A B' B : Subgroup G} [hAN : (A'.subgroupOf A).Normal]
    [hBN : (B'.subgroupOf B).Normal] (h' : A' = B') (h : A = B) :
    A ⧸ A'.subgroupOf A ≃* B ⧸ B'.subgroupOf B :=
  MonoidHom.toMulEquiv (quotientMapSubgroupOfOfLe h'.le h.le) (quotientMapSubgroupOfOfLe h'.ge h.ge)
    (by
      ext ⟨x, hx⟩
      rfl)
    (by
      ext ⟨x, hx⟩
      rfl)
#align quotient_group.equiv_quotient_subgroup_of_of_eq QuotientGroup.equivQuotientSubgroupOfOfEq
#align quotient_add_group.equiv_quotient_add_subgroup_of_of_eq QuotientAddGroup.equivQuotientAddSubgroupOfOfEq

section Zpow

variable {A B C : Type u} [CommGroup A] [CommGroup B] [CommGroup C]

variable (f : A →* B) (g : B →* A) (e : A ≃* B) (d : B ≃* C) (n : ℤ)

#print QuotientGroup.homQuotientZPowOfHom /-
/-- The map of quotients by powers of an integer induced by a group homomorphism. -/
@[to_additive
      "The map of quotients by multiples of an integer induced by an additive group\nhomomorphism."]
def homQuotientZPowOfHom :
    A ⧸ (zpowGroupHom n : A →* A).range →* B ⧸ (zpowGroupHom n : B →* B).range :=
  lift _ ((mk' _).comp f) fun g ⟨h, (hg : h ^ n = g)⟩ =>
    (eq_one_iff _).mpr ⟨_, by simpa only [← hg, map_zpow] ⟩
#align quotient_group.hom_quotient_zpow_of_hom QuotientGroup.homQuotientZPowOfHom
#align quotient_add_group.hom_quotient_zsmul_of_hom QuotientAddGroup.homQuotientZSMulOfHom
-/

#print QuotientGroup.homQuotientZPowOfHom_id /-
@[simp, to_additive]
theorem homQuotientZPowOfHom_id : homQuotientZPowOfHom (MonoidHom.id A) n = MonoidHom.id _ :=
  monoidHom_ext _ rfl
#align quotient_group.hom_quotient_zpow_of_hom_id QuotientGroup.homQuotientZPowOfHom_id
#align quotient_add_group.hom_quotient_zsmul_of_hom_id QuotientAddGroup.homQuotientZSMulOfHom_id
-/

#print QuotientGroup.homQuotientZPowOfHom_comp /-
@[simp, to_additive]
theorem homQuotientZPowOfHom_comp :
    homQuotientZPowOfHom (f.comp g) n =
      (homQuotientZPowOfHom f n).comp (homQuotientZPowOfHom g n) :=
  monoidHom_ext _ rfl
#align quotient_group.hom_quotient_zpow_of_hom_comp QuotientGroup.homQuotientZPowOfHom_comp
#align quotient_add_group.hom_quotient_zsmul_of_hom_comp QuotientAddGroup.homQuotientZSMulOfHom_comp
-/

/- warning: quotient_group.hom_quotient_zpow_of_hom_comp_of_right_inverse -> QuotientGroup.homQuotientZPowOfHom_comp_of_rightInverse is a dubious translation:
lean 3 declaration is
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] (f : MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (g : MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (n : Int), (Function.RightInverse.{succ u1, succ u1} A B (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (fun (_x : MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) => B -> A) (MonoidHom.hasCoeToFun.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) g) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (fun (_x : MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) => A -> B) (MonoidHom.hasCoeToFun.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) f)) -> (Eq.{succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_2.{u1} B _inst_4 n)))))) (MonoidHom.comp.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} A _inst_3 n))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_2.{u1} B _inst_4 n))))) (QuotientGroup.homQuotientZPowOfHom.{u1} A B _inst_3 _inst_4 f n) (QuotientGroup.homQuotientZPowOfHom.{u1} B A _inst_4 _inst_3 g n)) (MonoidHom.id.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n)))))))
but is expected to have type
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] (f : MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (g : MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (n : Int), (Function.RightInverse.{succ u1, succ u1} A B (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) B A (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (MonoidHom.monoidHomClass.{u1, u1} B A (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))))) g) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) A B (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))) (MonoidHom.monoidHomClass.{u1, u1} A B (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))))) f)) -> (Eq.{succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))) (MonoidHom.comp.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))))))) (QuotientGroup.homQuotientZPowOfHom.{u1} A B _inst_3 _inst_4 f n) (QuotientGroup.homQuotientZPowOfHom.{u1} B A _inst_4 _inst_3 g n)) (MonoidHom.id.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.hom_quotient_zpow_of_hom_comp_of_right_inverse QuotientGroup.homQuotientZPowOfHom_comp_of_rightInverseₓ'. -/
@[simp, to_additive]
theorem homQuotientZPowOfHom_comp_of_rightInverse (i : Function.RightInverse g f) :
    (homQuotientZPowOfHom f n).comp (homQuotientZPowOfHom g n) = MonoidHom.id _ :=
  monoidHom_ext _ <| MonoidHom.ext fun x => congr_arg coe <| i x
#align quotient_group.hom_quotient_zpow_of_hom_comp_of_right_inverse QuotientGroup.homQuotientZPowOfHom_comp_of_rightInverse
#align quotient_add_group.hom_quotient_zsmul_of_hom_comp_of_right_inverse QuotientAddGroup.homQuotientZSMulOfHom_comp_of_rightInverse

/- warning: quotient_group.equiv_quotient_zpow_of_equiv -> QuotientGroup.equivQuotientZPowOfEquiv is a dubious translation:
lean 3 declaration is
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B], (MulEquiv.{u1, u1} A B (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) -> (forall (n : Int), MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n)))))))
but is expected to have type
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B], (MulEquiv.{u1, u1} A B (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) -> (forall (n : Int), MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.equiv_quotient_zpow_of_equiv QuotientGroup.equivQuotientZPowOfEquivₓ'. -/
/-- The equivalence of quotients by powers of an integer induced by a group isomorphism. -/
@[to_additive
      "The equivalence of quotients by multiples of an integer induced by an additive group\nisomorphism."]
def equivQuotientZPowOfEquiv :
    A ⧸ (zpowGroupHom n : A →* A).range ≃* B ⧸ (zpowGroupHom n : B →* B).range :=
  MonoidHom.toMulEquiv _ _ (homQuotientZPowOfHom_comp_of_rightInverse e.symm e n e.left_inv)
    (homQuotientZPowOfHom_comp_of_rightInverse e e.symm n e.right_inv)
#align quotient_group.equiv_quotient_zpow_of_equiv QuotientGroup.equivQuotientZPowOfEquiv
#align quotient_add_group.equiv_quotient_zsmul_of_equiv QuotientAddGroup.equivQuotientZSMulOfEquiv

/- warning: quotient_group.equiv_quotient_zpow_of_equiv_refl -> QuotientGroup.equivQuotientZPowOfEquiv_refl is a dubious translation:
lean 3 declaration is
  forall {A : Type.{u1}} [_inst_3 : CommGroup.{u1} A] (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n))))))) (MulEquiv.refl.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n))))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A A _inst_3 _inst_3 (MulEquiv.refl.{u1} A (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))))) n)
but is expected to have type
  forall {A : Type.{u1}} [_inst_3 : CommGroup.{u1} A] (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))))))))) (MulEquiv.refl.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))))))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A A _inst_3 _inst_3 (MulEquiv.refl.{u1} A (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3)))))) n)
Case conversion may be inaccurate. Consider using '#align quotient_group.equiv_quotient_zpow_of_equiv_refl QuotientGroup.equivQuotientZPowOfEquiv_reflₓ'. -/
@[simp, to_additive]
theorem equivQuotientZPowOfEquiv_refl :
    MulEquiv.refl (A ⧸ (zpowGroupHom n : A →* A).range) =
      equivQuotientZPowOfEquiv (MulEquiv.refl A) n :=
  by
  ext x
  rw [← Quotient.out_eq' x]
  rfl
#align quotient_group.equiv_quotient_zpow_of_equiv_refl QuotientGroup.equivQuotientZPowOfEquiv_refl
#align quotient_add_group.equiv_quotient_zsmul_of_equiv_refl QuotientAddGroup.equivQuotientZSMulOfEquiv_refl

/- warning: quotient_group.equiv_quotient_zpow_of_equiv_symm -> QuotientGroup.equivQuotientZPowOfEquiv_symm is a dubious translation:
lean 3 declaration is
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] (e : MulEquiv.{u1, u1} A B (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n))))))) (MulEquiv.symm.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n)))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A B _inst_3 _inst_4 e n)) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} B A _inst_4 _inst_3 (MulEquiv.symm.{u1, u1} A B (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) e) n)
but is expected to have type
  forall {A : Type.{u1}} {B : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] (e : MulEquiv.{u1, u1} A B (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))))))))) (MulEquiv.symm.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A B _inst_3 _inst_4 e n)) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} B A _inst_4 _inst_3 (MulEquiv.symm.{u1, u1} A B (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) e) n)
Case conversion may be inaccurate. Consider using '#align quotient_group.equiv_quotient_zpow_of_equiv_symm QuotientGroup.equivQuotientZPowOfEquiv_symmₓ'. -/
@[simp, to_additive]
theorem equivQuotientZPowOfEquiv_symm :
    (equivQuotientZPowOfEquiv e n).symm = equivQuotientZPowOfEquiv e.symm n :=
  rfl
#align quotient_group.equiv_quotient_zpow_of_equiv_symm QuotientGroup.equivQuotientZPowOfEquiv_symm
#align quotient_add_group.equiv_quotient_zsmul_of_equiv_symm QuotientAddGroup.equivQuotientZSMulOfEquiv_symm

/- warning: quotient_group.equiv_quotient_zpow_of_equiv_trans -> QuotientGroup.equivQuotientZPowOfEquiv_trans is a dubious translation:
lean 3 declaration is
  forall {A : Type.{u1}} {B : Type.{u1}} {C : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] [_inst_5 : CommGroup.{u1} C] (e : MulEquiv.{u1, u1} A B (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) (d : MulEquiv.{u1, u1} B C (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MulOneClass.toHasMul.{u1} C (Monoid.toMulOneClass.{u1} C (DivInvMonoid.toMonoid.{u1} C (Group.toDivInvMonoid.{u1} C (CommGroup.toGroup.{u1} C _inst_5)))))) (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (QuotientGroup.Quotient.group.{u1} C (CommGroup.toGroup.{u1} C _inst_5) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} C _inst_5 n))))))) (MulEquiv.trans.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.Subgroup.hasQuotient.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (QuotientGroup.equivQuotientZPowOfEquiv._proof_1.{u1} A _inst_3 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.Subgroup.hasQuotient.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} B _inst_4 n)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.Subgroup.hasQuotient.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (QuotientGroup.Quotient.group.{u1} C (CommGroup.toGroup.{u1} C _inst_5) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n)) (QuotientGroup.homQuotientZPowOfHom._proof_1.{u1} C _inst_5 n)))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A B _inst_3 _inst_4 e n) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} B C _inst_4 _inst_5 d n)) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A C _inst_3 _inst_5 (MulEquiv.trans.{u1, u1, u1} A B C (MulOneClass.toHasMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toHasMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MulOneClass.toHasMul.{u1} C (Monoid.toMulOneClass.{u1} C (DivInvMonoid.toMonoid.{u1} C (Group.toDivInvMonoid.{u1} C (CommGroup.toGroup.{u1} C _inst_5))))) e d) n)
but is expected to have type
  forall {A : Type.{u1}} {B : Type.{u1}} {C : Type.{u1}} [_inst_3 : CommGroup.{u1} A] [_inst_4 : CommGroup.{u1} B] [_inst_5 : CommGroup.{u1} C] (e : MulEquiv.{u1, u1} A B (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4)))))) (d : MulEquiv.{u1, u1} B C (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MulOneClass.toMul.{u1} C (Monoid.toMulOneClass.{u1} C (DivInvMonoid.toMonoid.{u1} C (Group.toDivInvMonoid.{u1} C (CommGroup.toGroup.{u1} C _inst_5)))))) (n : Int), Eq.{succ u1} (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (QuotientGroup.Quotient.group.{u1} C (CommGroup.toGroup.{u1} C _inst_5) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n)) (Subgroup.normal_of_comm.{u1} C _inst_5 (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))))))))) (MulEquiv.trans.{u1, u1, u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} A (Subgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (QuotientGroup.instHasQuotientSubgroup.{u1} A (CommGroup.toGroup.{u1} A _inst_3)) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n))) (QuotientGroup.Quotient.group.{u1} A (CommGroup.toGroup.{u1} A _inst_3) (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)) (Subgroup.normal_of_comm.{u1} A _inst_3 (MonoidHom.range.{u1, u1} A (CommGroup.toGroup.{u1} A _inst_3) A (CommGroup.toGroup.{u1} A _inst_3) (zpowGroupHom.{u1} A (CommGroup.toDivisionCommMonoid.{u1} A _inst_3) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} B (Subgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (QuotientGroup.instHasQuotientSubgroup.{u1} B (CommGroup.toGroup.{u1} B _inst_4)) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n))) (QuotientGroup.Quotient.group.{u1} B (CommGroup.toGroup.{u1} B _inst_4) (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)) (Subgroup.normal_of_comm.{u1} B _inst_4 (MonoidHom.range.{u1, u1} B (CommGroup.toGroup.{u1} B _inst_4) B (CommGroup.toGroup.{u1} B _inst_4) (zpowGroupHom.{u1} B (CommGroup.toDivisionCommMonoid.{u1} B _inst_4) n)))))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} C (Subgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (QuotientGroup.instHasQuotientSubgroup.{u1} C (CommGroup.toGroup.{u1} C _inst_5)) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n))) (QuotientGroup.Quotient.group.{u1} C (CommGroup.toGroup.{u1} C _inst_5) (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n)) (Subgroup.normal_of_comm.{u1} C _inst_5 (MonoidHom.range.{u1, u1} C (CommGroup.toGroup.{u1} C _inst_5) C (CommGroup.toGroup.{u1} C _inst_5) (zpowGroupHom.{u1} C (CommGroup.toDivisionCommMonoid.{u1} C _inst_5) n)))))))) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A B _inst_3 _inst_4 e n) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} B C _inst_4 _inst_5 d n)) (QuotientGroup.equivQuotientZPowOfEquiv.{u1} A C _inst_3 _inst_5 (MulEquiv.trans.{u1, u1, u1} A B C (MulOneClass.toMul.{u1} A (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A _inst_3))))) (MulOneClass.toMul.{u1} B (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B _inst_4))))) (MulOneClass.toMul.{u1} C (Monoid.toMulOneClass.{u1} C (DivInvMonoid.toMonoid.{u1} C (Group.toDivInvMonoid.{u1} C (CommGroup.toGroup.{u1} C _inst_5))))) e d) n)
Case conversion may be inaccurate. Consider using '#align quotient_group.equiv_quotient_zpow_of_equiv_trans QuotientGroup.equivQuotientZPowOfEquiv_transₓ'. -/
@[simp, to_additive]
theorem equivQuotientZPowOfEquiv_trans :
    (equivQuotientZPowOfEquiv e n).trans (equivQuotientZPowOfEquiv d n) =
      equivQuotientZPowOfEquiv (e.trans d) n :=
  by
  ext x
  rw [← Quotient.out_eq' x]
  rfl
#align quotient_group.equiv_quotient_zpow_of_equiv_trans QuotientGroup.equivQuotientZPowOfEquiv_trans
#align quotient_add_group.equiv_quotient_zsmul_of_equiv_trans QuotientAddGroup.equivQuotientZSMulOfEquiv_trans

end Zpow

section SndIsomorphismThm

open _Root_.Subgroup

/- warning: quotient_group.quotient_inf_equiv_prod_normal_quotient -> QuotientGroup.quotientInfEquivProdNormalQuotient is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (H : Subgroup.{u1} G _inst_1) (N : Subgroup.{u1} G _inst_1) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 N], MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) H) (Subgroup.toGroup.{u1} G _inst_1 H) (Subgroup.subgroupOf.{u1} G _inst_1 N H) (Subgroup.normal_subgroupOf.{u1} G _inst_1 H N _inst_3)))))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Subgroup.hasQuotient.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N))) (QuotientGroup.Quotient.group.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)) (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toHasSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.completeLattice.{u1} G _inst_1))))) H N)) (QuotientGroup.quotientInfEquivProdNormalQuotient._proof_1.{u1} G _inst_1 H N _inst_3))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (H : Subgroup.{u1} G _inst_1) (N : Subgroup.{u1} G _inst_1) [_inst_3 : Subgroup.Normal.{u1} G _inst_1 N], MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H)) (Subgroup.subgroupOf.{u1} G _inst_1 N H)) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x H)) (Subgroup.toGroup.{u1} G _inst_1 H) (Subgroup.subgroupOf.{u1} G _inst_1 N H) (Subgroup.normal_subgroupOf.{u1} G _inst_1 H N _inst_3)))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.instHasQuotientSubgroup.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (QuotientGroup.Quotient.group.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_1) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_1)) x (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N))) (Subgroup.toGroup.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N)) (Subgroup.subgroupOf.{u1} G _inst_1 N (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N)) (Subgroup.normal_subgroupOf.{u1} G _inst_1 (Sup.sup.{u1} (Subgroup.{u1} G _inst_1) (SemilatticeSup.toSup.{u1} (Subgroup.{u1} G _inst_1) (Lattice.toSemilatticeSup.{u1} (Subgroup.{u1} G _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) H N) N _inst_3))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_inf_equiv_prod_normal_quotient QuotientGroup.quotientInfEquivProdNormalQuotientₓ'. -/
/-- **Noether's second isomorphism theorem**: given two subgroups `H` and `N` of a group `G`, where
`N` is normal, defines an isomorphism between `H/(H ∩ N)` and `(HN)/N`. -/
@[to_additive
      "The second isomorphism theorem: given two subgroups `H` and `N` of a group `G`,\nwhere `N` is normal, defines an isomorphism between `H/(H ∩ N)` and `(H + N)/N`"]
noncomputable def quotientInfEquivProdNormalQuotient (H N : Subgroup G) [N.Normal] :
    H ⧸ N.subgroupOf H ≃* _ ⧸ N.subgroupOf (H ⊔ N) :=
  let
    φ :-- φ is the natural homomorphism H →* (HN)/N.
      H →*
      _ ⧸ N.subgroupOf (H ⊔ N) :=
    (mk' <| N.subgroupOf (H ⊔ N)).comp (inclusion le_sup_left)
  have φ_surjective : Surjective φ := fun x =>
    x.inductionOn' <| by
      rintro ⟨y, hy : y ∈ ↑(H ⊔ N)⟩; rw [mul_normal H N] at hy
      rcases hy with ⟨h, n, hh, hn, rfl⟩
      use h, hh; apply quotient.eq.mpr
      change Setoid.r _ _
      rw [left_rel_apply]
      change h⁻¹ * (h * n) ∈ N
      rwa [← mul_assoc, inv_mul_self, one_mul]
  (quotientMulEquivOfEq (by simp [← comap_ker])).trans (quotientKerEquivOfSurjective φ φ_surjective)
#align quotient_group.quotient_inf_equiv_prod_normal_quotient QuotientGroup.quotientInfEquivProdNormalQuotient
#align quotient_add_group.quotient_inf_equiv_sum_normal_quotient QuotientAddGroup.quotientInfEquivSumNormalQuotient

end SndIsomorphismThm

section ThirdIsoThm

variable (M : Subgroup G) [nM : M.Normal]

include nM nN

#print QuotientGroup.map_normal /-
@[to_additive]
instance map_normal : (M.map (QuotientGroup.mk' N)).Normal :=
  nM.map _ mk_surjective
#align quotient_group.map_normal QuotientGroup.map_normal
#align quotient_add_group.map_normal QuotientAddGroup.map_normal
-/

variable (h : N ≤ M)

/- warning: quotient_group.quotient_quotient_equiv_quotient_aux -> QuotientGroup.quotientQuotientEquivQuotientAux is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N M) -> (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM)))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N M) -> (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM)))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_quotient_equiv_quotient_aux QuotientGroup.quotientQuotientEquivQuotientAuxₓ'. -/
/-- The map from the third isomorphism theorem for groups: `(G / N) / (M / N) → G / M`. -/
@[to_additive
      "The map from the third isomorphism theorem for additive groups:\n`(A / N) / (M / N) → A / M`."]
def quotientQuotientEquivQuotientAux : (G ⧸ N) ⧸ M.map (mk' N) →* G ⧸ M :=
  lift (M.map (mk' N)) (map N M (MonoidHom.id G) h)
    (by
      rintro _ ⟨x, hx, rfl⟩
      rw [map_mk' N M _ _ x]
      exact (QuotientGroup.eq_one_iff _).mpr hx)
#align quotient_group.quotient_quotient_equiv_quotient_aux QuotientGroup.quotientQuotientEquivQuotientAux
#align quotient_add_group.quotient_quotient_equiv_quotient_aux QuotientAddGroup.quotientQuotientEquivQuotientAux

/- warning: quotient_group.quotient_quotient_equiv_quotient_aux_coe -> QuotientGroup.quotientQuotientEquivQuotientAux_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M] (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N M) (x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (fun (_x : MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) => (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M)) (MonoidHom.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (QuotientGroup.quotientQuotientEquivQuotientAux.{u1} G _inst_1 N nN M nM h) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasLiftT.mk.{succ u1, succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (CoeTCₓ.coe.{succ u1, succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)))) x)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (fun (_x : MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) => (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M)) (MonoidHom.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 M nM (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) x)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M] (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N M) (x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (fun (_x : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM)))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM)))) (MonoidHom.monoidHomClass.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))))) (QuotientGroup.quotientQuotientEquivQuotientAux.{u1} G _inst_1 N nN M nM h) (QuotientGroup.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (fun (_x : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM)))) (MonoidHom.monoidHomClass.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))))) (QuotientGroup.map.{u1, u1} G _inst_1 N nN G _inst_1 M nM (MonoidHom.id.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) h) x)
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_quotient_equiv_quotient_aux_coe QuotientGroup.quotientQuotientEquivQuotientAux_mkₓ'. -/
@[simp, to_additive]
theorem quotientQuotientEquivQuotientAux_mk (x : G ⧸ N) :
    quotientQuotientEquivQuotientAux N M h x = QuotientGroup.map N M (MonoidHom.id G) h x :=
  QuotientGroup.lift_mk' _ _ x
#align quotient_group.quotient_quotient_equiv_quotient_aux_coe QuotientGroup.quotientQuotientEquivQuotientAux_mk
#align quotient_add_group.quotient_quotient_equiv_quotient_aux_coe QuotientAddGroup.quotientQuotientEquivQuotientAux_mk

/- warning: quotient_group.quotient_quotient_equiv_quotient_aux_coe_coe -> QuotientGroup.quotientQuotientEquivQuotientAux_mk_mk is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M] (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N M) (x : G), Eq.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (fun (_x : MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) => (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) -> (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M)) (MonoidHom.hasCoeToFun.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (QuotientGroup.quotientQuotientEquivQuotientAux.{u1} G _inst_1 N nN M nM h) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasLiftT.mk.{succ u1, succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (CoeTCₓ.coe.{succ u1, succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 N))) x))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (HasLiftT.mk.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (CoeTCₓ.coe.{succ u1, succ u1} G (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.HasQuotient.Quotient.hasCoeT.{u1} G _inst_1 M))) x)
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M] (h : LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N M) (x : G), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.mk.{u1} G _inst_1 N x))) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (fun (_x : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) => HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM)))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))) (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM)))) (MonoidHom.monoidHomClass.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM))))) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))))) (QuotientGroup.quotientQuotientEquivQuotientAux.{u1} G _inst_1 N nN M nM h) (QuotientGroup.mk.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.mk.{u1} G _inst_1 N x))) (QuotientGroup.mk.{u1} G _inst_1 M x)
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_quotient_equiv_quotient_aux_coe_coe QuotientGroup.quotientQuotientEquivQuotientAux_mk_mkₓ'. -/
@[to_additive]
theorem quotientQuotientEquivQuotientAux_mk_mk (x : G) :
    quotientQuotientEquivQuotientAux N M h (x : G ⧸ N) = x :=
  QuotientGroup.lift_mk' _ _ x
#align quotient_group.quotient_quotient_equiv_quotient_aux_coe_coe QuotientGroup.quotientQuotientEquivQuotientAux_mk_mk
#align quotient_add_group.quotient_quotient_equiv_quotient_aux_coe_coe QuotientAddGroup.quotientQuotientEquivQuotientAux_mk_mk

/- warning: quotient_group.quotient_quotient_equiv_quotient -> QuotientGroup.quotientQuotientEquivQuotient is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_1) G (Subgroup.setLike.{u1} G _inst_1)))) N M) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.Subgroup.hasQuotient.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Con.mulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)))) (QuotientGroup.con.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM)))) (MulOneClass.toHasMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (N : Subgroup.{u1} G _inst_1) [nN : Subgroup.Normal.{u1} G _inst_1 N] (M : Subgroup.{u1} G _inst_1) [nM : Subgroup.Normal.{u1} G _inst_1 M], (LE.le.{u1} (Subgroup.{u1} G _inst_1) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_1) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_1))))) N M) -> (MulEquiv.{u1, u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (Subgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (QuotientGroup.instHasQuotientSubgroup.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN)) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M)) (QuotientGroup.Quotient.group.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (Subgroup.map.{u1, u1} G _inst_1 (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) N) (QuotientGroup.Quotient.group.{u1} G _inst_1 N nN) (QuotientGroup.mk'.{u1} G _inst_1 N nN) M) (QuotientGroup.map_normal.{u1} G _inst_1 N nN M nM)))))) (MulOneClass.toMul.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Monoid.toMulOneClass.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (DivInvMonoid.toMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (Group.toDivInvMonoid.{u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) M) (QuotientGroup.Quotient.group.{u1} G _inst_1 M nM))))))
Case conversion may be inaccurate. Consider using '#align quotient_group.quotient_quotient_equiv_quotient QuotientGroup.quotientQuotientEquivQuotientₓ'. -/
/-- **Noether's third isomorphism theorem** for groups: `(G / N) / (M / N) ≃* G / M`. -/
@[to_additive
      "**Noether's third isomorphism theorem** for additive groups:\n`(A / N) / (M / N) ≃+ A / M`."]
def quotientQuotientEquivQuotient : (G ⧸ N) ⧸ M.map (QuotientGroup.mk' N) ≃* G ⧸ M :=
  MonoidHom.toMulEquiv (quotientQuotientEquivQuotientAux N M h)
    (QuotientGroup.map _ _ (QuotientGroup.mk' N) (Subgroup.le_comap_map _ _))
    (by
      ext
      simp)
    (by
      ext
      simp)
#align quotient_group.quotient_quotient_equiv_quotient QuotientGroup.quotientQuotientEquivQuotient
#align quotient_add_group.quotient_quotient_equiv_quotient QuotientAddGroup.quotientQuotientEquivQuotient

end ThirdIsoThm

section trivial

/- warning: quotient_group.subsingleton_quotient_top -> QuotientGroup.subsingleton_quotient_top is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G], Subsingleton.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) (Top.top.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasTop.{u1} G _inst_1)))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G], Subsingleton.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) (Top.top.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instTopSubgroup.{u1} G _inst_1)))
Case conversion may be inaccurate. Consider using '#align quotient_group.subsingleton_quotient_top QuotientGroup.subsingleton_quotient_topₓ'. -/
@[to_additive]
theorem subsingleton_quotient_top : Subsingleton (G ⧸ (⊤ : Subgroup G)) :=
  by
  dsimp [HasQuotient.Quotient, subgroup.has_quotient, Quotient]
  rw [left_rel_eq]
  exact @Trunc.subsingleton G
#align quotient_group.subsingleton_quotient_top QuotientGroup.subsingleton_quotient_top
#align quotient_add_group.subsingleton_quotient_top QuotientAddGroup.subsingleton_quotient_top

/- warning: quotient_group.subgroup_eq_top_of_subsingleton -> QuotientGroup.subgroup_eq_top_of_subsingleton is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (H : Subgroup.{u1} G _inst_1), (Subsingleton.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.Subgroup.hasQuotient.{u1} G _inst_1) H)) -> (Eq.{succ u1} (Subgroup.{u1} G _inst_1) H (Top.top.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.hasTop.{u1} G _inst_1)))
but is expected to have type
  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (H : Subgroup.{u1} G _inst_1), (Subsingleton.{succ u1} (HasQuotient.Quotient.{u1, u1} G (Subgroup.{u1} G _inst_1) (QuotientGroup.instHasQuotientSubgroup.{u1} G _inst_1) H)) -> (Eq.{succ u1} (Subgroup.{u1} G _inst_1) H (Top.top.{u1} (Subgroup.{u1} G _inst_1) (Subgroup.instTopSubgroup.{u1} G _inst_1)))
Case conversion may be inaccurate. Consider using '#align quotient_group.subgroup_eq_top_of_subsingleton QuotientGroup.subgroup_eq_top_of_subsingletonₓ'. -/
/-- If the quotient by a subgroup gives a singleton then the subgroup is the whole group. -/
@[to_additive
      "If the quotient by an additive subgroup gives a singleton then the additive subgroup\nis the whole additive group."]
theorem subgroup_eq_top_of_subsingleton (H : Subgroup G) (h : Subsingleton (G ⧸ H)) : H = ⊤ :=
  top_unique fun x _ =>
    by
    have this : 1⁻¹ * x ∈ H := QuotientGroup.eq.1 (Subsingleton.elim _ _)
    rwa [inv_one, one_mul] at this
#align quotient_group.subgroup_eq_top_of_subsingleton QuotientGroup.subgroup_eq_top_of_subsingleton
#align quotient_add_group.add_subgroup_eq_top_of_subsingleton QuotientAddGroup.addSubgroup_eq_top_of_subsingleton

end trivial

#print QuotientGroup.comap_comap_center /-
@[to_additive]
theorem comap_comap_center {H₁ : Subgroup G} [H₁.Normal] {H₂ : Subgroup (G ⧸ H₁)} [H₂.Normal] :
    ((Subgroup.center ((G ⧸ H₁) ⧸ H₂)).comap (mk' H₂)).comap (mk' H₁) =
      (Subgroup.center (G ⧸ H₂.comap (mk' H₁))).comap (mk' (H₂.comap (mk' H₁))) :=
  by
  ext x
  simp only [mk'_apply, Subgroup.mem_comap, Subgroup.mem_center_iff, forall_coe, ← coe_mul,
    eq_iff_div_mem, coe_div]
#align quotient_group.comap_comap_center QuotientGroup.comap_comap_center
#align quotient_add_group.comap_comap_center QuotientAddGroup.comap_comap_center
-/

end QuotientGroup

namespace Group

open Classical

open QuotientGroup Subgroup

variable {F G H : Type u} [Group F] [Group G] [Group H] [Fintype F] [Fintype H]

variable (f : F →* G) (g : G →* H)

/- warning: group.fintype_of_ker_le_range -> Group.fintypeOfKerLeRange is a dubious translation:
lean 3 declaration is
  forall {F : Type.{u1}} {G : Type.{u1}} {H : Type.{u1}} [_inst_1 : Group.{u1} F] [_inst_2 : Group.{u1} G] [_inst_3 : Group.{u1} H] [_inst_4 : Fintype.{u1} F] [_inst_5 : Fintype.{u1} H] (f : MonoidHom.{u1, u1} F G (Monoid.toMulOneClass.{u1} F (DivInvMonoid.toMonoid.{u1} F (Group.toDivInvMonoid.{u1} F _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)))) (g : MonoidHom.{u1, u1} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2))) (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3)))), (LE.le.{u1} (Subgroup.{u1} G _inst_2) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_2) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_2) (SetLike.partialOrder.{u1, u1} (Subgroup.{u1} G _inst_2) G (Subgroup.setLike.{u1} G _inst_2)))) (MonoidHom.ker.{u1, u1} G _inst_2 H (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3))) g) (MonoidHom.range.{u1, u1} F _inst_1 G _inst_2 f)) -> (Fintype.{u1} G)
but is expected to have type
  forall {F : Type.{u1}} {G : Type.{u1}} {H : Type.{u1}} [_inst_1 : Group.{u1} F] [_inst_2 : Group.{u1} G] [_inst_3 : Group.{u1} H] [_inst_4 : Fintype.{u1} F] [_inst_5 : Fintype.{u1} H] (f : MonoidHom.{u1, u1} F G (Monoid.toMulOneClass.{u1} F (DivInvMonoid.toMonoid.{u1} F (Group.toDivInvMonoid.{u1} F _inst_1))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)))) (g : MonoidHom.{u1, u1} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2))) (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3)))), (LE.le.{u1} (Subgroup.{u1} G _inst_2) (Preorder.toLE.{u1} (Subgroup.{u1} G _inst_2) (PartialOrder.toPreorder.{u1} (Subgroup.{u1} G _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subgroup.{u1} G _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subgroup.{u1} G _inst_2) (Subgroup.instCompleteLatticeSubgroup.{u1} G _inst_2))))) (MonoidHom.ker.{u1, u1} G _inst_2 H (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3))) g) (MonoidHom.range.{u1, u1} F _inst_1 G _inst_2 f)) -> (Fintype.{u1} G)
Case conversion may be inaccurate. Consider using '#align group.fintype_of_ker_le_range Group.fintypeOfKerLeRangeₓ'. -/
/-- If `F` and `H` are finite such that `ker(G →* H) ≤ im(F →* G)`, then `G` is finite. -/
@[to_additive "If `F` and `H` are finite such that `ker(G →+ H) ≤ im(F →+ G)`, then `G` is finite."]
noncomputable def fintypeOfKerLeRange (h : g.ker ≤ f.range) : Fintype G :=
  @Fintype.ofEquiv _ _
    (@Prod.fintype _ _ (Fintype.ofInjective _ <| kerLift_injective g) <|
      Fintype.ofInjective _ <| inclusion_injective h)
    groupEquivQuotientProdSubgroup.symm
#align group.fintype_of_ker_le_range Group.fintypeOfKerLeRange
#align add_group.fintype_of_ker_le_range AddGroup.fintypeOfKerLeRange

#print Group.fintypeOfKerEqRange /-
/-- If `F` and `H` are finite such that `ker(G →* H) = im(F →* G)`, then `G` is finite. -/
@[to_additive "If `F` and `H` are finite such that `ker(G →+ H) = im(F →+ G)`, then `G` is finite."]
noncomputable def fintypeOfKerEqRange (h : g.ker = f.range) : Fintype G :=
  fintypeOfKerLeRange _ _ h.le
#align group.fintype_of_ker_eq_range Group.fintypeOfKerEqRange
#align add_group.fintype_of_ker_eq_range AddGroup.fintypeOfKerEqRange
-/

/- warning: group.fintype_of_ker_of_codom -> Group.fintypeOfKerOfCodom is a dubious translation:
lean 3 declaration is
  forall {G : Type.{u1}} {H : Type.{u1}} [_inst_2 : Group.{u1} G] [_inst_3 : Group.{u1} H] [_inst_5 : Fintype.{u1} H] (g : MonoidHom.{u1, u1} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2))) (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3)))) [_inst_6 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} G _inst_2) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} G _inst_2) G (Subgroup.setLike.{u1} G _inst_2)) (MonoidHom.ker.{u1, u1} G _inst_2 H (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3))) g))], Fintype.{u1} G
but is expected to have type
  forall {G : Type.{u1}} {H : Type.{u1}} [_inst_2 : Group.{u1} G] [_inst_3 : Group.{u1} H] [_inst_5 : Fintype.{u1} H] (g : MonoidHom.{u1, u1} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2))) (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3)))) [_inst_6 : Fintype.{u1} (Subtype.{succ u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Subgroup.{u1} G _inst_2) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} G _inst_2) G (Subgroup.instSetLikeSubgroup.{u1} G _inst_2)) x (MonoidHom.ker.{u1, u1} G _inst_2 H (Monoid.toMulOneClass.{u1} H (DivInvMonoid.toMonoid.{u1} H (Group.toDivInvMonoid.{u1} H _inst_3))) g)))], Fintype.{u1} G
Case conversion may be inaccurate. Consider using '#align group.fintype_of_ker_of_codom Group.fintypeOfKerOfCodomₓ'. -/
/-- If `ker(G →* H)` and `H` are finite, then `G` is finite. -/
@[to_additive "If `ker(G →+ H)` and `H` are finite, then `G` is finite."]
noncomputable def fintypeOfKerOfCodom [Fintype g.ker] : Fintype G :=
  fintypeOfKerLeRange ((topEquiv : _ ≃* G).toMonoidHom.comp <| inclusion le_top) g fun x hx =>
    ⟨⟨x, hx⟩, rfl⟩
#align group.fintype_of_ker_of_codom Group.fintypeOfKerOfCodom
#align add_group.fintype_of_ker_of_codom AddGroup.fintypeOfKerOfCodom

#print Group.fintypeOfDomOfCoker /-
/-- If `F` and `coker(F →* G)` are finite, then `G` is finite. -/
@[to_additive "If `F` and `coker(F →+ G)` are finite, then `G` is finite."]
noncomputable def fintypeOfDomOfCoker [Normal f.range] [Fintype <| G ⧸ f.range] : Fintype G :=
  fintypeOfKerLeRange _ (mk' f.range) fun x => (eq_one_iff x).mp
#align group.fintype_of_dom_of_coker Group.fintypeOfDomOfCoker
#align add_group.fintype_of_dom_of_coker AddGroup.fintypeOfDomOfCoker
-/

end Group