ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Traversable.toList_spec
theorem toList_spec (xs : t α) : toList xs = FreeMonoid.toList (foldMap FreeMonoid.of xs) 
Arguments: {α : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (xs : t α)
Goal: Traversable.toList xs = FreeMonoid.toList (Traversable.foldMap FreeMonoid.of xs)
-- Traversable.foldMap_map
theorem foldMap_map [Monoid γ] (f : α → β) (g : β → γ) (xs : t α) :
    foldMap g (f <$> xs) = foldMap (g ∘ f) xs 
Arguments: {α β γ : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] [Monoid γ] (f : α → β) (g : β → γ) (xs : t α)
Goal: Traversable.foldMap g (f <$> xs) = Traversable.foldMap (g ∘ f) xs
-- Traversable.foldl_toList
theorem foldl_toList (f : α → β → α) (xs : t β) (x : α) :
    foldl f x xs = List.foldl f x (toList xs) 
Arguments: {α β : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (f : α → β → α) (xs : t β) (x : α)
Goal: Traversable.foldl f x xs = List.foldl f x (Traversable.toList xs)
-- Traversable.foldr_toList
theorem foldr_toList (f : α → β → β) (xs : t α) (x : β) :
    foldr f x xs = List.foldr f x (toList xs) 
Arguments: {α β : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (f : α → β → β) (xs : t α) (x : β)
Goal: Traversable.foldr f x xs = List.foldr f x (Traversable.toList xs)
-- Traversable.toList_map
theorem toList_map (f : α → β) (xs : t α) : toList (f <$> xs) = f <$> toList xs 
Arguments: {α β : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (f : α → β) (xs : t α)
Goal: Traversable.toList (f <$> xs) = f <$> Traversable.toList xs
-- Traversable.foldl_map
@[simp]
theorem foldl_map (g : β → γ) (f : α → γ → α) (a : α) (l : t β) :
    foldl f a (g <$> l) = foldl (fun x y => f x (g y)) a l 
Arguments: {α β γ : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (g : β → γ) (f : α → γ → α) (a : α) (l : t β)
Goal: Traversable.foldl f a (g <$> l) = Traversable.foldl (fun x y => f x (g y)) a l
-- Traversable.foldr_map
@[simp]
theorem foldr_map (g : β → γ) (f : γ → α → α) (a : α) (l : t β) :
    foldr f a (g <$> l) = foldr (f ∘ g) a l 
Arguments: {α β γ : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] (g : β → γ) (f : γ → α → α) (a : α) (l : t β)
Goal: Traversable.foldr f a (g <$> l) = Traversable.foldr (f ∘ g) a l
-- Traversable.toList_eq_self
@[simp]
theorem toList_eq_self {xs : List α} : toList xs = xs 
Arguments: {α : Type u} {xs : List α}
Goal: Traversable.toList xs = xs
-- Traversable.length_toList
theorem length_toList {xs : t α} : length xs = List.length (toList xs) 
Arguments: {α : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] {xs : t α}
Goal: Traversable.length xs = (Traversable.toList xs).length
-- Traversable.foldlm_toList
theorem foldlm_toList {f : α → β → m α} {x : α} {xs : t β} :
    foldlm f x xs = List.foldlM f x (toList xs) 
Arguments: {α β : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] {m : Type u → Type u} [Monad m] [LawfulMonad m] {f : α → β → m α} {x : α} {xs : t β}
Goal: Traversable.foldlm f x xs = List.foldlM f x (Traversable.toList xs)
-- Traversable.foldrm_toList
theorem foldrm_toList (f : α → β → m β) (x : β) (xs : t α) :
    foldrm f x xs = List.foldrM f x (toList xs) 
Arguments: {α β : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] {m : Type u → Type u} [Monad m] [LawfulMonad m] (f : α → β → m β) (x : β) (xs : t α)
Goal: Traversable.foldrm f x xs = List.foldrM f x (Traversable.toList xs)
-- Traversable.foldlm_map
@[simp]
theorem foldlm_map (g : β → γ) (f : α → γ → m α) (a : α) (l : t β) :
    foldlm f a (g <$> l) = foldlm (fun x y => f x (g y)) a l 
Arguments: {α β γ : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] {m : Type u → Type u} [Monad m] [LawfulMonad m] (g : β → γ) (f : α → γ → m α) (a : α) (l : t β)
Goal: Traversable.foldlm f a (g <$> l) = Traversable.foldlm (fun x y => f x (g y)) a l
-- Traversable.foldrm_map
@[simp]
theorem foldrm_map (g : β → γ) (f : γ → α → m α) (a : α) (l : t β) :
    foldrm f a (g <$> l) = foldrm (f ∘ g) a l 
Arguments: {α β γ : Type u} {t : Type u → Type u} [Traversable t] [LawfulTraversable t] {m : Type u → Type u} [Monad m] [LawfulMonad m] (g : β → γ) (f : γ → α → m α) (a : α) (l : t β)
Goal: Traversable.foldrm f a (g <$> l) = Traversable.foldrm (f ∘ g) a l
-- SemidirectProduct.mul_def
lemma mul_def (a b : SemidirectProduct N G φ) : a * b = ⟨a.1 * φ a.2 b.1, a.2 * b.2⟩ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (a b : N ⋊[φ] G)
Goal: a * b = { left := a.left * (φ a.right) b.left, right := a.right * b.right }
-- SemidirectProduct.mul_left
@[simp]
theorem mul_left (a b : N ⋊[φ] G) : (a * b).left = a.left * φ a.right b.left 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (a b : N ⋊[φ] G)
Goal: (a * b).left = a.left * (φ a.right) b.left
-- SemidirectProduct.mul_right
@[simp]
theorem mul_right (a b : N ⋊[φ] G) : (a * b).right = a.right * b.right 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (a b : N ⋊[φ] G)
Goal: (a * b).right = a.right * b.right
-- SemidirectProduct.one_left
@[simp]
theorem one_left : (1 : N ⋊[φ] G).left = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: SemidirectProduct.left 1 = 1
-- SemidirectProduct.one_right
@[simp]
theorem one_right : (1 : N ⋊[φ] G).right = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: SemidirectProduct.right 1 = 1
-- SemidirectProduct.inv_left
@[simp]
theorem inv_left (a : N ⋊[φ] G) : a⁻¹.left = φ a.right⁻¹ a.left⁻¹ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (a : N ⋊[φ] G)
Goal: a⁻¹.left = (φ a.right⁻¹) a.left⁻¹
-- SemidirectProduct.inv_right
@[simp]
theorem inv_right (a : N ⋊[φ] G) : a⁻¹.right = a.right⁻¹ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (a : N ⋊[φ] G)
Goal: a⁻¹.right = a.right⁻¹
-- SemidirectProduct.left_inl
@[simp]
theorem left_inl (n : N) : (inl n : N ⋊[φ] G).left = n 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (n : N)
Goal: (SemidirectProduct.inl n).left = n
-- SemidirectProduct.right_inl
@[simp]
theorem right_inl (n : N) : (inl n : N ⋊[φ] G).right = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (n : N)
Goal: (SemidirectProduct.inl n).right = 1
-- SemidirectProduct.inl_injective
theorem inl_injective : Function.Injective (inl : N → N ⋊[φ] G) 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: Function.Injective ⇑SemidirectProduct.inl
-- SemidirectProduct.inl_inj
@[simp]
theorem inl_inj {n₁ n₂ : N} : (inl n₁ : N ⋊[φ] G) = inl n₂ ↔ n₁ = n₂ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {n₁ n₂ : N}
Goal: SemidirectProduct.inl n₁ = SemidirectProduct.inl n₂ ↔ n₁ = n₂
-- SemidirectProduct.left_inr
@[simp]
theorem left_inr (g : G) : (inr g : N ⋊[φ] G).left = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G)
Goal: (SemidirectProduct.inr g).left = 1
-- SemidirectProduct.right_inr
@[simp]
theorem right_inr (g : G) : (inr g : N ⋊[φ] G).right = g 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G)
Goal: (SemidirectProduct.inr g).right = g
-- SemidirectProduct.inr_injective
theorem inr_injective : Function.Injective (inr : G → N ⋊[φ] G) 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: Function.Injective ⇑SemidirectProduct.inr
-- SemidirectProduct.inr_inj
@[simp]
theorem inr_inj {g₁ g₂ : G} : (inr g₁ : N ⋊[φ] G) = inr g₂ ↔ g₁ = g₂ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {g₁ g₂ : G}
Goal: SemidirectProduct.inr g₁ = SemidirectProduct.inr g₂ ↔ g₁ = g₂
-- SemidirectProduct.inl_aut
theorem inl_aut (g : G) (n : N) : (inl (φ g n) : N ⋊[φ] G) = inr g * inl n * inr g⁻¹ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G) (n : N)
Goal: SemidirectProduct.inl ((φ g) n) = SemidirectProduct.inr g * SemidirectProduct.inl n * SemidirectProduct.inr g⁻¹
-- SemidirectProduct.inl_aut_inv
theorem inl_aut_inv (g : G) (n : N) : (inl ((φ g)⁻¹ n) : N ⋊[φ] G) = inr g⁻¹ * inl n * inr g 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G) (n : N)
Goal: SemidirectProduct.inl ((φ g)⁻¹ n) = SemidirectProduct.inr g⁻¹ * SemidirectProduct.inl n * SemidirectProduct.inr g
-- SemidirectProduct.mk_eq_inl_mul_inr
@[simp]
theorem mk_eq_inl_mul_inr (g : G) (n : N) : (⟨n, g⟩ : N ⋊[φ] G) = inl n * inr g 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G) (n : N)
Goal: { left := n, right := g } = SemidirectProduct.inl n * SemidirectProduct.inr g
-- SemidirectProduct.inl_left_mul_inr_right
@[simp]
theorem inl_left_mul_inr_right (x : N ⋊[φ] G) : inl x.left * inr x.right = x 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (x : N ⋊[φ] G)
Goal: SemidirectProduct.inl x.left * SemidirectProduct.inr x.right = x
-- SemidirectProduct.rightHom_eq_right
@[simp]
theorem rightHom_eq_right : (rightHom : N ⋊[φ] G → G) = right 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: ⇑SemidirectProduct.rightHom = SemidirectProduct.right
-- SemidirectProduct.rightHom_comp_inl
@[simp]
theorem rightHom_comp_inl : (rightHom : N ⋊[φ] G →* G).comp inl = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: SemidirectProduct.rightHom.comp SemidirectProduct.inl = 1
-- SemidirectProduct.rightHom_comp_inr
@[simp]
theorem rightHom_comp_inr : (rightHom : N ⋊[φ] G →* G).comp inr = MonoidHom.id _ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: SemidirectProduct.rightHom.comp SemidirectProduct.inr = MonoidHom.id G
-- SemidirectProduct.rightHom_inl
@[simp]
theorem rightHom_inl (n : N) : rightHom (inl n : N ⋊[φ] G) = 1 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (n : N)
Goal: SemidirectProduct.rightHom (SemidirectProduct.inl n) = 1
-- SemidirectProduct.rightHom_inr
@[simp]
theorem rightHom_inr (g : G) : rightHom (inr g : N ⋊[φ] G) = g 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} (g : G)
Goal: SemidirectProduct.rightHom (SemidirectProduct.inr g) = g
-- SemidirectProduct.rightHom_surjective
theorem rightHom_surjective : Function.Surjective (rightHom : N ⋊[φ] G → G) 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: Function.Surjective ⇑SemidirectProduct.rightHom
-- SemidirectProduct.range_inl_eq_ker_rightHom
theorem range_inl_eq_ker_rightHom : (inl : N →* N ⋊[φ] G).range = rightHom.ker 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N}
Goal: SemidirectProduct.inl.range = SemidirectProduct.rightHom.ker
-- SemidirectProduct.lift_inl
@[simp]
theorem lift_inl (n : N) : lift f₁ f₂ h (inl n) = f₁ n 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (MulAut.conj (f₂ g))).comp f₁) (n : N)
Goal: (SemidirectProduct.lift f₁ f₂ h) (SemidirectProduct.inl n) = f₁ n
-- SemidirectProduct.lift_comp_inl
@[simp]
theorem lift_comp_inl : (lift f₁ f₂ h).comp inl = f₁ 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (MulAut.conj (f₂ g))).comp f₁)
Goal: (SemidirectProduct.lift f₁ f₂ h).comp SemidirectProduct.inl = f₁
-- SemidirectProduct.lift_inr
@[simp]
theorem lift_inr (g : G) : lift f₁ f₂ h (inr g) = f₂ g 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (MulAut.conj (f₂ g))).comp f₁) (g : G)
Goal: (SemidirectProduct.lift f₁ f₂ h) (SemidirectProduct.inr g) = f₂ g
-- SemidirectProduct.lift_comp_inr
@[simp]
theorem lift_comp_inr : (lift f₁ f₂ h).comp inr = f₂ 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} (f₁ : N →* H) (f₂ : G →* H) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (MulAut.conj (f₂ g))).comp f₁)
Goal: (SemidirectProduct.lift f₁ f₂ h).comp SemidirectProduct.inr = f₂
-- SemidirectProduct.lift_unique
theorem lift_unique (F : N ⋊[φ] G →* H) :
    F = lift (F.comp inl) (F.comp inr) fun _ ↦ by ext; simp [inl_aut] 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} (F : N ⋊[φ] G →* H)
Goal: F = SemidirectProduct.lift (F.comp SemidirectProduct.inl) (F.comp SemidirectProduct.inr) ⋯
-- SemidirectProduct.hom_ext
theorem hom_ext {f g : N ⋊[φ] G →* H} (hl : f.comp inl = g.comp inl)
    (hr : f.comp inr = g.comp inr) : f = g 
Arguments: {N : Type u_1} {G : Type u_2} {H : Type u_3} [Group N] [Group G] [Group H] {φ : G →* MulAut N} {f g : N ⋊[φ] G →* H} (hl : f.comp SemidirectProduct.inl = g.comp SemidirectProduct.inl) (hr : f.comp SemidirectProduct.inr = g.comp SemidirectProduct.inr)
Goal: f = g
-- SemidirectProduct.map_left
@[simp]
theorem map_left (g : N ⋊[φ] G) : (map f₁ f₂ h g).left = f₁ g.left 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁) (g : N ⋊[φ] G)
Goal: ((SemidirectProduct.map f₁ f₂ h) g).left = f₁ g.left
-- SemidirectProduct.map_right
@[simp]
theorem map_right (g : N ⋊[φ] G) : (map f₁ f₂ h g).right = f₂ g.right 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁) (g : N ⋊[φ] G)
Goal: ((SemidirectProduct.map f₁ f₂ h) g).right = f₂ g.right
-- SemidirectProduct.rightHom_comp_map
@[simp]
theorem rightHom_comp_map : rightHom.comp (map f₁ f₂ h) = f₂.comp rightHom 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁)
Goal: SemidirectProduct.rightHom.comp (SemidirectProduct.map f₁ f₂ h) = f₂.comp SemidirectProduct.rightHom
-- SemidirectProduct.map_inl
@[simp]
theorem map_inl (n : N) : map f₁ f₂ h (inl n) = inl (f₁ n) 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁) (n : N)
Goal: (SemidirectProduct.map f₁ f₂ h) (SemidirectProduct.inl n) = SemidirectProduct.inl (f₁ n)
-- SemidirectProduct.map_comp_inl
@[simp]
theorem map_comp_inl : (map f₁ f₂ h).comp inl = inl.comp f₁ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁)
Goal: (SemidirectProduct.map f₁ f₂ h).comp SemidirectProduct.inl = SemidirectProduct.inl.comp f₁
-- SemidirectProduct.map_inr
@[simp]
theorem map_inr (g : G) : map f₁ f₂ h (inr g) = inr (f₂ g) 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁) (g : G)
Goal: (SemidirectProduct.map f₁ f₂ h) (SemidirectProduct.inr g) = SemidirectProduct.inr (f₂ g)
-- SemidirectProduct.map_comp_inr
@[simp]
theorem map_comp_inr : (map f₁ f₂ h).comp inr = inr.comp f₂ 
Arguments: {N : Type u_1} {G : Type u_2} [Group N] [Group G] {φ : G →* MulAut N} {N₁ : Type u_4} {G₁ : Type u_5} [Group N₁] [Group G₁] {φ₁ : G₁ →* MulAut N₁} (f₁ : N →* N₁) (f₂ : G →* G₁) (h : ∀ (g : G), f₁.comp (MulEquiv.toMonoidHom (φ g)) = (MulEquiv.toMonoidHom (φ₁ (f₂ g))).comp f₁)
Goal: (SemidirectProduct.map f₁ f₂ h).comp SemidirectProduct.inr = SemidirectProduct.inr.comp f₂
-- AddSubmonoid.LocalizationMap.map_add_units'
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends AddMonoidHom M N where
  map_add_units' : ∀ y : S, IsAddUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z + toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c + x = ↑c + y
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (self : S.LocalizationMap N) (y : ↥S)
Goal: IsAddUnit ((↑self.toAddMonoidHom).toFun ↑y)
-- AddSubmonoid.LocalizationMap.surj'
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends AddMonoidHom M N where
  map_add_units' : ∀ y : S, IsAddUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z + toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c + x = ↑c + y
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (self : S.LocalizationMap N) (z : N)
Goal: ∃ x, z + (↑self.toAddMonoidHom).toFun ↑x.2 = (↑self.toAddMonoidHom).toFun x.1
-- AddSubmonoid.LocalizationMap.exists_of_eq
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends AddMonoidHom M N where
  map_add_units' : ∀ y : S, IsAddUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z + toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c + x = ↑c + y
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (self : S.LocalizationMap N) (x y : M)
Goal: (↑self.toAddMonoidHom).toFun x = (↑self.toAddMonoidHom).toFun y → ∃ c, ↑c + x = ↑c + y
-- Submonoid.LocalizationMap.map_units'
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends MonoidHom M N where
  map_units' : ∀ y : S, IsUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z * toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c * x = c * y
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (self : S.LocalizationMap N) (y : ↥S)
Goal: IsUnit ((↑self.toMonoidHom).toFun ↑y)
-- Submonoid.LocalizationMap.exists_of_eq
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends MonoidHom M N where
  map_units' : ∀ y : S, IsUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z * toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c * x = c * y
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (self : S.LocalizationMap N) (x y : M)
Goal: (↑self.toMonoidHom).toFun x = (↑self.toMonoidHom).toFun y → ∃ c, ↑c * x = ↑c * y
-- Submonoid.LocalizationMap.surj'
-- Porting note(#5171): this linter isn't ported yet.
-- @[nolint has_nonempty_instance]
structure LocalizationMap extends MonoidHom M N where
  map_units' : ∀ y : S, IsUnit (toFun y)
  surj' : ∀ z : N, ∃ x : M × S, z * toFun x.2 = toFun x.1
  exists_of_eq : ∀ x y, toFun x = toFun y → ∃ c : S, ↑c * x = c * y
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (self : S.LocalizationMap N) (z : N)
Goal: ∃ x, z * (↑self.toMonoidHom).toFun ↑x.2 = (↑self.toMonoidHom).toFun x.1
-- AddLocalization.r_eq_r'
@[to_additive AddLocalization.r_eq_r'
    "The additive congruence relation used to localize an `AddCommMonoid` at a submonoid can be
expressed equivalently as an infimum (see `AddLocalization.r`) or explicitly
(see `AddLocalization.r'`)."]
theorem r_eq_r' : r S = r' S 
Arguments: {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M)
Goal: AddLocalization.r S = AddLocalization.r' S
-- Localization.r_eq_r'
@[to_additive AddLocalization.r_eq_r'
    "The additive congruence relation used to localize an `AddCommMonoid` at a submonoid can be
expressed equivalently as an infimum (see `AddLocalization.r`) or explicitly
(see `AddLocalization.r'`)."]
theorem r_eq_r' : r S = r' S 
Arguments: {M : Type u_1} [CommMonoid M] (S : Submonoid M)
Goal: Localization.r S = Localization.r' S
-- Localization.r_iff_exists
@[to_additive AddLocalization.r_iff_exists]
theorem r_iff_exists {x y : M × S} : r S x y ↔ ∃ c : S, ↑c * (↑y.2 * x.1) = c * (x.2 * y.1) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {x y : M × ↥S}
Goal: (Localization.r S) x y ↔ ∃ c, ↑c * (↑y.2 * x.1) = ↑c * (↑x.2 * y.1)
-- AddLocalization.r_iff_exists
@[to_additive AddLocalization.r_iff_exists]
theorem r_iff_exists {x y : M × S} : r S x y ↔ ∃ c : S, ↑c * (↑y.2 * x.1) = c * (x.2 * y.1) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {x y : M × ↥S}
Goal: (AddLocalization.r S) x y ↔ ∃ c, ↑c + (↑y.2 + x.1) = ↑c + (↑x.2 + y.1)
-- AddLocalization.r_iff_oreEqv_r
@[to_additive AddLocalization.r_iff_oreEqv_r]
theorem r_iff_oreEqv_r {x y : M × S} : r S x y ↔ (OreLocalization.oreEqv S M).r x y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {x y : M × ↥S}
Goal: (AddLocalization.r S) x y ↔ Setoid.r x y
-- Localization.r_iff_oreEqv_r
@[to_additive AddLocalization.r_iff_oreEqv_r]
theorem r_iff_oreEqv_r {x y : M × S} : r S x y ↔ (OreLocalization.oreEqv S M).r x y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {x y : M × ↥S}
Goal: (Localization.r S) x y ↔ Setoid.r x y
-- AddLocalization.mk_eq_mk_iff
@[to_additive]
theorem mk_eq_mk_iff {a c : M} {b d : S} : mk a b = mk c d ↔ r S ⟨a, b⟩ ⟨c, d⟩ 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {a c : M} {b d : ↥S}
Goal: AddLocalization.mk a b = AddLocalization.mk c d ↔ (AddLocalization.r S) (a, b) (c, d)
-- Localization.mk_eq_mk_iff
@[to_additive]
theorem mk_eq_mk_iff {a c : M} {b d : S} : mk a b = mk c d ↔ r S ⟨a, b⟩ ⟨c, d⟩ 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {a c : M} {b d : ↥S}
Goal: Localization.mk a b = Localization.mk c d ↔ (Localization.r S) (a, b) (c, d)
-- AddLocalization.mk_add
@[to_additive]
theorem mk_mul (a c : M) (b d : S) : mk a b * mk c d = mk (a * c) (b * d) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} (a c : M) (b d : ↥S)
Goal: AddLocalization.mk a b + AddLocalization.mk c d = AddLocalization.mk (a + c) (b + d)
-- Localization.mk_mul
@[to_additive]
theorem mk_mul (a c : M) (b d : S) : mk a b * mk c d = mk (a * c) (b * d) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} (a c : M) (b d : ↥S)
Goal: Localization.mk a b * Localization.mk c d = Localization.mk (a * c) (b * d)
-- Localization.mk_one
@[to_additive]
theorem mk_one : mk 1 (1 : S) = 1 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M}
Goal: Localization.mk 1 1 = 1
-- AddLocalization.mk_zero
@[to_additive]
theorem mk_one : mk 1 (1 : S) = 1 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M}
Goal: AddLocalization.mk 0 0 = 0
-- AddLocalization.mk_nsmul
@[to_additive]
theorem mk_pow (n : ℕ) (a : M) (b : S) : mk a b ^ n = mk (a ^ n) (b ^ n) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} (n : ℕ) (a : M) (b : ↥S)
Goal: n • AddLocalization.mk a b = AddLocalization.mk (n • a) (n • b)
-- Localization.mk_pow
@[to_additive]
theorem mk_pow (n : ℕ) (a : M) (b : S) : mk a b ^ n = mk (a ^ n) (b ^ n) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} (n : ℕ) (a : M) (b : ↥S)
Goal: Localization.mk a b ^ n = Localization.mk (a ^ n) (b ^ n)