ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Localization.ndrec_mk
@[to_additive (attr := simp)]
theorem ndrec_mk {p : Localization S → Sort u} (f : ∀ (a : M) (b : S), p (mk a b)) (H) (a : M)
    (b : S) : (rec f H (mk a b) : p (mk a b)) = f a b 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Localization S → Sort u} (f : (a : M) → (b : ↥S) → p (Localization.mk a b)) (H : ∀ {a c : M} {b d : ↥S} (h : (Localization.r S) (a, b) (c, d)), ⋯ ▸ f a b = f c d) (a : M) (b : ↥S)
Goal: Localization.rec f H (Localization.mk a b) = f a b
-- AddLocalization.ndrec_mk
@[to_additive (attr := simp)]
theorem ndrec_mk {p : Localization S → Sort u} (f : ∀ (a : M) (b : S), p (mk a b)) (H) (a : M)
    (b : S) : (rec f H (mk a b) : p (mk a b)) = f a b 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : AddLocalization S → Sort u} (f : (a : M) → (b : ↥S) → p (AddLocalization.mk a b)) (H : ∀ {a c : M} {b d : ↥S} (h : (AddLocalization.r S) (a, b) (c, d)), ⋯ ▸ f a b = f c d) (a : M) (b : ↥S)
Goal: AddLocalization.rec f H (AddLocalization.mk a b) = f a b
-- Localization.liftOn_mk
@[to_additive]
theorem liftOn_mk {p : Sort u} (f : M → S → p) (H) (a : M) (b : S) :
    liftOn (mk a b) f H = f a b 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Sort u} (f : M → ↥S → p) (H : ∀ {a c : M} {b d : ↥S}, (Localization.r S) (a, b) (c, d) → f a b = f c d) (a : M) (b : ↥S)
Goal: (Localization.mk a b).liftOn f H = f a b
-- AddLocalization.liftOn_mk
@[to_additive]
theorem liftOn_mk {p : Sort u} (f : M → S → p) (H) (a : M) (b : S) :
    liftOn (mk a b) f H = f a b 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : Sort u} (f : M → ↥S → p) (H : ∀ {a c : M} {b d : ↥S}, (AddLocalization.r S) (a, b) (c, d) → f a b = f c d) (a : M) (b : ↥S)
Goal: (AddLocalization.mk a b).liftOn f H = f a b
-- Localization.ind
@[to_additive (attr := elab_as_elim, induction_eliminator, cases_eliminator)]
theorem ind {p : Localization S → Prop} (H : ∀ y : M × S, p (mk y.1 y.2)) (x) : p x 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Localization S → Prop} (H : ∀ (y : M × ↥S), p (Localization.mk y.1 y.2)) (x : Localization S)
Goal: p x
-- AddLocalization.ind
@[to_additive (attr := elab_as_elim, induction_eliminator, cases_eliminator)]
theorem ind {p : Localization S → Prop} (H : ∀ y : M × S, p (mk y.1 y.2)) (x) : p x 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : AddLocalization S → Prop} (H : ∀ (y : M × ↥S), p (AddLocalization.mk y.1 y.2)) (x : AddLocalization S)
Goal: p x
-- AddLocalization.induction_on
@[to_additive (attr := elab_as_elim)]
theorem induction_on {p : Localization S → Prop} (x) (H : ∀ y : M × S, p (mk y.1 y.2)) : p x 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : AddLocalization S → Prop} (x : AddLocalization S) (H : ∀ (y : M × ↥S), p (AddLocalization.mk y.1 y.2))
Goal: p x
-- Localization.induction_on
@[to_additive (attr := elab_as_elim)]
theorem induction_on {p : Localization S → Prop} (x) (H : ∀ y : M × S, p (mk y.1 y.2)) : p x 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Localization S → Prop} (x : Localization S) (H : ∀ (y : M × ↥S), p (Localization.mk y.1 y.2))
Goal: p x
-- Localization.liftOn₂_mk
@[to_additive]
theorem liftOn₂_mk {p : Sort*} (f : M → S → M → S → p) (H) (a c : M) (b d : S) :
    liftOn₂ (mk a b) (mk c d) f H = f a b c d 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Sort u_4} (f : M → ↥S → M → ↥S → p) (H :
  ∀ {a a' : M} {b b' : ↥S} {c c' : M} {d d' : ↥S},
    (Localization.r S) (a, b) (a', b') → (Localization.r S) (c, d) (c', d') → f a b c d = f a' b' c' d') (a c : M) (b d : ↥S)
Goal: (Localization.mk a b).liftOn₂ (Localization.mk c d) f H = f a b c d
-- AddLocalization.liftOn₂_mk
@[to_additive]
theorem liftOn₂_mk {p : Sort*} (f : M → S → M → S → p) (H) (a c : M) (b d : S) :
    liftOn₂ (mk a b) (mk c d) f H = f a b c d 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : Sort u_4} (f : M → ↥S → M → ↥S → p) (H :
  ∀ {a a' : M} {b b' : ↥S} {c c' : M} {d d' : ↥S},
    (AddLocalization.r S) (a, b) (a', b') → (AddLocalization.r S) (c, d) (c', d') → f a b c d = f a' b' c' d') (a c : M) (b d : ↥S)
Goal: (AddLocalization.mk a b).liftOn₂ (AddLocalization.mk c d) f H = f a b c d
-- AddLocalization.induction_on₂
@[to_additive (attr := elab_as_elim)]
theorem induction_on₂ {p : Localization S → Localization S → Prop} (x y)
    (H : ∀ x y : M × S, p (mk x.1 x.2) (mk y.1 y.2)) : p x y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : AddLocalization S → AddLocalization S → Prop} (x y : AddLocalization S) (H : ∀ (x y : M × ↥S), p (AddLocalization.mk x.1 x.2) (AddLocalization.mk y.1 y.2))
Goal: p x y
-- Localization.induction_on₂
@[to_additive (attr := elab_as_elim)]
theorem induction_on₂ {p : Localization S → Localization S → Prop} (x y)
    (H : ∀ x y : M × S, p (mk x.1 x.2) (mk y.1 y.2)) : p x y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Localization S → Localization S → Prop} (x y : Localization S) (H : ∀ (x y : M × ↥S), p (Localization.mk x.1 x.2) (Localization.mk y.1 y.2))
Goal: p x y
-- Localization.induction_on₃
@[to_additive (attr := elab_as_elim)]
theorem induction_on₃ {p : Localization S → Localization S → Localization S → Prop} (x y z)
    (H : ∀ x y z : M × S, p (mk x.1 x.2) (mk y.1 y.2) (mk z.1 z.2)) : p x y z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {p : Localization S → Localization S → Localization S → Prop} (x y z : Localization S) (H : ∀ (x y z : M × ↥S), p (Localization.mk x.1 x.2) (Localization.mk y.1 y.2) (Localization.mk z.1 z.2))
Goal: p x y z
-- AddLocalization.induction_on₃
@[to_additive (attr := elab_as_elim)]
theorem induction_on₃ {p : Localization S → Localization S → Localization S → Prop} (x y z)
    (H : ∀ x y z : M × S, p (mk x.1 x.2) (mk y.1 y.2) (mk z.1 z.2)) : p x y z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {p : AddLocalization S → AddLocalization S → AddLocalization S → Prop} (x y z : AddLocalization S) (H : ∀ (x y z : M × ↥S), p (AddLocalization.mk x.1 x.2) (AddLocalization.mk y.1 y.2) (AddLocalization.mk z.1 z.2))
Goal: p x y z
-- Localization.one_rel
@[to_additive]
theorem one_rel (y : S) : r S 1 (y, y) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} (y : ↥S)
Goal: (Localization.r S) 1 (↑y, y)
-- AddLocalization.zero_rel
@[to_additive]
theorem one_rel (y : S) : r S 1 (y, y) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} (y : ↥S)
Goal: (AddLocalization.r S) 0 (↑y, y)
-- Localization.r_of_eq
@[to_additive]
theorem r_of_eq {x y : M × S} (h : ↑y.2 * x.1 = ↑x.2 * y.1) : r S x y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {x y : M × ↥S} (h : ↑y.2 * x.1 = ↑x.2 * y.1)
Goal: (Localization.r S) x y
-- AddLocalization.r_of_eq
@[to_additive]
theorem r_of_eq {x y : M × S} (h : ↑y.2 * x.1 = ↑x.2 * y.1) : r S x y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {x y : M × ↥S} (h : ↑y.2 + x.1 = ↑x.2 + y.1)
Goal: (AddLocalization.r S) x y
-- Localization.mk_self
@[to_additive]
theorem mk_self (a : S) : mk (a : M) a = 1 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} (a : ↥S)
Goal: Localization.mk (↑a) a = 1
-- AddLocalization.mk_self
@[to_additive]
theorem mk_self (a : S) : mk (a : M) a = 1 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} (a : ↥S)
Goal: AddLocalization.mk (↑a) a = 0
-- Localization.smul_mk
theorem smul_mk [SMul R M] [IsScalarTower R M M] (c : R) (a b) :
    c • (mk a b : Localization S) = mk (c • a) b 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {R : Type u_4} [SMul R M] [IsScalarTower R M M] (c : R) (a : M) (b : ↥S)
Goal: c • Localization.mk a b = Localization.mk (c • a) b
-- Submonoid.LocalizationMap.ext
@[to_additive (attr := ext)]
theorem ext {f g : LocalizationMap S N} (h : ∀ x, f.toMap x = g.toMap x) : f = g 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f g : S.LocalizationMap N} (h : ∀ (x : M), f.toMap x = g.toMap x)
Goal: f = g
-- AddSubmonoid.LocalizationMap.ext
@[to_additive (attr := ext)]
theorem ext {f g : LocalizationMap S N} (h : ∀ x, f.toMap x = g.toMap x) : f = g 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f g : S.LocalizationMap N} (h : ∀ (x : M), f.toMap x = g.toMap x)
Goal: f = g
-- AddSubmonoid.LocalizationMap.ext_iff
@[to_additive]
protected theorem ext_iff {f g : LocalizationMap S N} : f = g ↔ ∀ x, f.toMap x = g.toMap x 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f g : S.LocalizationMap N}
Goal: f = g ↔ ∀ (x : M), f.toMap x = g.toMap x
-- Submonoid.LocalizationMap.ext_iff
@[to_additive]
protected theorem ext_iff {f g : LocalizationMap S N} : f = g ↔ ∀ x, f.toMap x = g.toMap x 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f g : S.LocalizationMap N}
Goal: f = g ↔ ∀ (x : M), f.toMap x = g.toMap x
-- AddSubmonoid.LocalizationMap.toMap_injective
@[to_additive]
theorem toMap_injective : Function.Injective (@LocalizationMap.toMap _ _ S N _) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N]
Goal: Function.Injective AddSubmonoid.LocalizationMap.toMap
-- Submonoid.LocalizationMap.toMap_injective
@[to_additive]
theorem toMap_injective : Function.Injective (@LocalizationMap.toMap _ _ S N _) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N]
Goal: Function.Injective Submonoid.LocalizationMap.toMap
-- AddSubmonoid.LocalizationMap.map_addUnits
@[to_additive]
theorem map_units (f : LocalizationMap S N) (y : S) : IsUnit (f.toMap y) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (y : ↥S)
Goal: IsAddUnit (f.toMap ↑y)
-- Submonoid.LocalizationMap.map_units
@[to_additive]
theorem map_units (f : LocalizationMap S N) (y : S) : IsUnit (f.toMap y) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (y : ↥S)
Goal: IsUnit (f.toMap ↑y)
-- AddSubmonoid.LocalizationMap.surj
@[to_additive]
theorem surj (f : LocalizationMap S N) (z : N) : ∃ x : M × S, z * f.toMap x.2 = f.toMap x.1 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (z : N)
Goal: ∃ x, z + f.toMap ↑x.2 = f.toMap x.1
-- Submonoid.LocalizationMap.surj
@[to_additive]
theorem surj (f : LocalizationMap S N) (z : N) : ∃ x : M × S, z * f.toMap x.2 = f.toMap x.1 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (z : N)
Goal: ∃ x, z * f.toMap ↑x.2 = f.toMap x.1
-- AddSubmonoid.LocalizationMap.surj₂
@[to_additive
    "Given a localization map `f : M →+ N`, and `z w : N`, there exist `z' w' : M` and `d : S`
such that `f z' - f d = z` and `f w' - f d = w`."]
theorem surj₂ (f : LocalizationMap S N) (z w : N) : ∃ z' w' : M, ∃ d : S,
    (z * f.toMap d = f.toMap z') ∧  (w * f.toMap d = f.toMap w') 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (z w : N)
Goal: ∃ z' w' d, z + f.toMap ↑d = f.toMap z' ∧ w + f.toMap ↑d = f.toMap w'
-- Submonoid.LocalizationMap.surj₂
@[to_additive
    "Given a localization map `f : M →+ N`, and `z w : N`, there exist `z' w' : M` and `d : S`
such that `f z' - f d = z` and `f w' - f d = w`."]
theorem surj₂ (f : LocalizationMap S N) (z w : N) : ∃ z' w' : M, ∃ d : S,
    (z * f.toMap d = f.toMap z') ∧  (w * f.toMap d = f.toMap w') 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (z w : N)
Goal: ∃ z' w' d, z * f.toMap ↑d = f.toMap z' ∧ w * f.toMap ↑d = f.toMap w'
-- AddSubmonoid.LocalizationMap.eq_iff_exists
@[to_additive]
theorem eq_iff_exists (f : LocalizationMap S N) {x y} :
    f.toMap x = f.toMap y ↔ ∃ c : S, ↑c * x = c * y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) {x y : M}
Goal: f.toMap x = f.toMap y ↔ ∃ c, ↑c + x = ↑c + y
-- Submonoid.LocalizationMap.eq_iff_exists
@[to_additive]
theorem eq_iff_exists (f : LocalizationMap S N) {x y} :
    f.toMap x = f.toMap y ↔ ∃ c : S, ↑c * x = c * y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) {x y : M}
Goal: f.toMap x = f.toMap y ↔ ∃ c, ↑c * x = ↑c * y
-- AddSubmonoid.LocalizationMap.sec_spec
@[to_additive]
theorem sec_spec {f : LocalizationMap S N} (z : N) :
    z * f.toMap (f.sec z).2 = f.toMap (f.sec z).1 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : S.LocalizationMap N} (z : N)
Goal: z + f.toMap ↑(f.sec z).2 = f.toMap (f.sec z).1
-- Submonoid.LocalizationMap.sec_spec
@[to_additive]
theorem sec_spec {f : LocalizationMap S N} (z : N) :
    z * f.toMap (f.sec z).2 = f.toMap (f.sec z).1 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : S.LocalizationMap N} (z : N)
Goal: z * f.toMap ↑(f.sec z).2 = f.toMap (f.sec z).1
-- Submonoid.LocalizationMap.sec_spec'
@[to_additive]
theorem sec_spec' {f : LocalizationMap S N} (z : N) :
    f.toMap (f.sec z).1 = f.toMap (f.sec z).2 * z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : S.LocalizationMap N} (z : N)
Goal: f.toMap (f.sec z).1 = f.toMap ↑(f.sec z).2 * z
-- AddSubmonoid.LocalizationMap.sec_spec'
@[to_additive]
theorem sec_spec' {f : LocalizationMap S N} (z : N) :
    f.toMap (f.sec z).1 = f.toMap (f.sec z).2 * z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : S.LocalizationMap N} (z : N)
Goal: f.toMap (f.sec z).1 = f.toMap ↑(f.sec z).2 + z
-- AddSubmonoid.LocalizationMap.add_neg_left
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `w, z : N` and `y ∈ S`, we have `w - f y = z ↔ w = f y + z`."]
theorem mul_inv_left {f : M →* N} (h : ∀ y : S, IsUnit (f y)) (y : S) (w z : N) :
    w * (IsUnit.liftRight (f.restrict S) h y)⁻¹ = z ↔ w = f y * z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : M →+ N} (h : ∀ (y : ↥S), IsAddUnit (f ↑y)) (y : ↥S) (w z : N)
Goal: w + ↑(-(IsAddUnit.liftRight (f.restrict S) h) y) = z ↔ w = f ↑y + z
-- Submonoid.LocalizationMap.mul_inv_left
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `w, z : N` and `y ∈ S`, we have `w - f y = z ↔ w = f y + z`."]
theorem mul_inv_left {f : M →* N} (h : ∀ y : S, IsUnit (f y)) (y : S) (w z : N) :
    w * (IsUnit.liftRight (f.restrict S) h y)⁻¹ = z ↔ w = f y * z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : M →* N} (h : ∀ (y : ↥S), IsUnit (f ↑y)) (y : ↥S) (w z : N)
Goal: w * ↑((IsUnit.liftRight (f.restrict S) h) y)⁻¹ = z ↔ w = f ↑y * z
-- AddSubmonoid.LocalizationMap.add_neg_right
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `w, z : N` and `y ∈ S`, we have `z = w - f y ↔ z + f y = w`."]
theorem mul_inv_right {f : M →* N} (h : ∀ y : S, IsUnit (f y)) (y : S) (w z : N) :
    z = w * (IsUnit.liftRight (f.restrict S) h y)⁻¹ ↔ z * f y = w 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : M →+ N} (h : ∀ (y : ↥S), IsAddUnit (f ↑y)) (y : ↥S) (w z : N)
Goal: z = w + ↑(-(IsAddUnit.liftRight (f.restrict S) h) y) ↔ z + f ↑y = w
-- Submonoid.LocalizationMap.mul_inv_right
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `w, z : N` and `y ∈ S`, we have `z = w - f y ↔ z + f y = w`."]
theorem mul_inv_right {f : M →* N} (h : ∀ y : S, IsUnit (f y)) (y : S) (w z : N) :
    z = w * (IsUnit.liftRight (f.restrict S) h y)⁻¹ ↔ z * f y = w 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : M →* N} (h : ∀ (y : ↥S), IsUnit (f ↑y)) (y : ↥S) (w z : N)
Goal: z = w * ↑((IsUnit.liftRight (f.restrict S) h) y)⁻¹ ↔ z * f ↑y = w
-- Submonoid.LocalizationMap.mul_inv
@[to_additive (attr := simp)
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `x₁ x₂ : M` and `y₁, y₂ ∈ S`, we have
`f x₁ - f y₁ = f x₂ - f y₂ ↔ f (x₁ + y₂) = f (x₂ + y₁)`."]
theorem mul_inv {f : M →* N} (h : ∀ y : S, IsUnit (f y)) {x₁ x₂} {y₁ y₂ : S} :
    f x₁ * (IsUnit.liftRight (f.restrict S) h y₁)⁻¹ =
        f x₂ * (IsUnit.liftRight (f.restrict S) h y₂)⁻¹ ↔
      f (x₁ * y₂) = f (x₂ * y₁) 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : M →* N} (h : ∀ (y : ↥S), IsUnit (f ↑y)) {x₁ x₂ : M} {y₁ y₂ : ↥S}
Goal: f x₁ * ↑((IsUnit.liftRight (f.restrict S) h) y₁)⁻¹ = f x₂ * ↑((IsUnit.liftRight (f.restrict S) h) y₂)⁻¹ ↔
  f (x₁ * ↑y₂) = f (x₂ * ↑y₁)
-- AddSubmonoid.LocalizationMap.add_neg
@[to_additive (attr := simp)
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `x₁ x₂ : M` and `y₁, y₂ ∈ S`, we have
`f x₁ - f y₁ = f x₂ - f y₂ ↔ f (x₁ + y₂) = f (x₂ + y₁)`."]
theorem mul_inv {f : M →* N} (h : ∀ y : S, IsUnit (f y)) {x₁ x₂} {y₁ y₂ : S} :
    f x₁ * (IsUnit.liftRight (f.restrict S) h y₁)⁻¹ =
        f x₂ * (IsUnit.liftRight (f.restrict S) h y₂)⁻¹ ↔
      f (x₁ * y₂) = f (x₂ * y₁) 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : M →+ N} (h : ∀ (y : ↥S), IsAddUnit (f ↑y)) {x₁ x₂ : M} {y₁ y₂ : ↥S}
Goal: f x₁ + ↑(-(IsAddUnit.liftRight (f.restrict S) h) y₁) = f x₂ + ↑(-(IsAddUnit.liftRight (f.restrict S) h) y₂) ↔
  f (x₁ + ↑y₂) = f (x₂ + ↑y₁)
-- Submonoid.LocalizationMap.inv_inj
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `y, z ∈ S`, we have `- (f y) = - (f z) → f y = f z`."]
theorem inv_inj {f : M →* N} (hf : ∀ y : S, IsUnit (f y)) {y z : S}
    (h : (IsUnit.liftRight (f.restrict S) hf y)⁻¹ = (IsUnit.liftRight (f.restrict S) hf z)⁻¹) :
      f y = f z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : M →* N} (hf : ∀ (y : ↥S), IsUnit (f ↑y)) {y z : ↥S} (h : ((IsUnit.liftRight (f.restrict S) hf) y)⁻¹ = ((IsUnit.liftRight (f.restrict S) hf) z)⁻¹)
Goal: f ↑y = f ↑z
-- AddSubmonoid.LocalizationMap.neg_inj
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `y, z ∈ S`, we have `- (f y) = - (f z) → f y = f z`."]
theorem inv_inj {f : M →* N} (hf : ∀ y : S, IsUnit (f y)) {y z : S}
    (h : (IsUnit.liftRight (f.restrict S) hf y)⁻¹ = (IsUnit.liftRight (f.restrict S) hf z)⁻¹) :
      f y = f z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : M →+ N} (hf : ∀ (y : ↥S), IsAddUnit (f ↑y)) {y z : ↥S} (h : -(IsAddUnit.liftRight (f.restrict S) hf) y = -(IsAddUnit.liftRight (f.restrict S) hf) z)
Goal: f ↑y = f ↑z
-- AddSubmonoid.LocalizationMap.neg_unique
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `y ∈ S`, `- (f y)` is unique."]
theorem inv_unique {f : M →* N} (h : ∀ y : S, IsUnit (f y)) {y : S} {z : N} (H : f y * z = 1) :
    (IsUnit.liftRight (f.restrict S) h y)⁻¹ = z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] {f : M →+ N} (h : ∀ (y : ↥S), IsAddUnit (f ↑y)) {y : ↥S} {z : N} (H : f ↑y + z = 0)
Goal: ↑(-(IsAddUnit.liftRight (f.restrict S) h) y) = z
-- Submonoid.LocalizationMap.inv_unique
@[to_additive
    "Given an AddMonoidHom `f : M →+ N` and Submonoid `S ⊆ M` such that
`f(S) ⊆ AddUnits N`, for all `y ∈ S`, `- (f y)` is unique."]
theorem inv_unique {f : M →* N} (h : ∀ y : S, IsUnit (f y)) {y : S} {z : N} (H : f y * z = 1) :
    (IsUnit.liftRight (f.restrict S) h y)⁻¹ = z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] {f : M →* N} (h : ∀ (y : ↥S), IsUnit (f ↑y)) {y : ↥S} {z : N} (H : f ↑y * z = 1)
Goal: ↑((IsUnit.liftRight (f.restrict S) h) y)⁻¹ = z
-- AddSubmonoid.LocalizationMap.map_right_cancel
@[to_additive]
theorem map_right_cancel {x y} {c : S} (h : f.toMap (c * x) = f.toMap (c * y)) :
    f.toMap x = f.toMap y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) {x y : M} {c : ↥S} (h : f.toMap (↑c + x) = f.toMap (↑c + y))
Goal: f.toMap x = f.toMap y
-- Submonoid.LocalizationMap.map_right_cancel
@[to_additive]
theorem map_right_cancel {x y} {c : S} (h : f.toMap (c * x) = f.toMap (c * y)) :
    f.toMap x = f.toMap y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) {x y : M} {c : ↥S} (h : f.toMap (↑c * x) = f.toMap (↑c * y))
Goal: f.toMap x = f.toMap y
-- AddSubmonoid.LocalizationMap.map_left_cancel
@[to_additive]
theorem map_left_cancel {x y} {c : S} (h : f.toMap (x * c) = f.toMap (y * c)) :
    f.toMap x = f.toMap y 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) {x y : M} {c : ↥S} (h : f.toMap (x + ↑c) = f.toMap (y + ↑c))
Goal: f.toMap x = f.toMap y
-- Submonoid.LocalizationMap.map_left_cancel
@[to_additive]
theorem map_left_cancel {x y} {c : S} (h : f.toMap (x * c) = f.toMap (y * c)) :
    f.toMap x = f.toMap y 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) {x y : M} {c : ↥S} (h : f.toMap (x * ↑c) = f.toMap (y * ↑c))
Goal: f.toMap x = f.toMap y
-- Submonoid.LocalizationMap.mk'_mul
@[to_additive]
theorem mk'_mul (x₁ x₂ : M) (y₁ y₂ : S) : f.mk' (x₁ * x₂) (y₁ * y₂) = f.mk' x₁ y₁ * f.mk' x₂ y₂ 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (x₁ x₂ : M) (y₁ y₂ : ↥S)
Goal: f.mk' (x₁ * x₂) (y₁ * y₂) = f.mk' x₁ y₁ * f.mk' x₂ y₂
-- AddSubmonoid.LocalizationMap.mk'_add
@[to_additive]
theorem mk'_mul (x₁ x₂ : M) (y₁ y₂ : S) : f.mk' (x₁ * x₂) (y₁ * y₂) = f.mk' x₁ y₁ * f.mk' x₂ y₂ 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (x₁ x₂ : M) (y₁ y₂ : ↥S)
Goal: f.mk' (x₁ + x₂) (y₁ + y₂) = f.mk' x₁ y₁ + f.mk' x₂ y₂
-- AddSubmonoid.LocalizationMap.mk'_zero
@[to_additive]
theorem mk'_one (x) : f.mk' x (1 : S) = f.toMap x 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (x : M)
Goal: f.mk' x 0 = f.toMap x
-- Submonoid.LocalizationMap.mk'_one
@[to_additive]
theorem mk'_one (x) : f.mk' x (1 : S) = f.toMap x 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (x : M)
Goal: f.mk' x 1 = f.toMap x
-- AddSubmonoid.LocalizationMap.mk'_sec
@[to_additive (attr := simp)
    "Given a localization map `f : M →+ N` for a Submonoid `S ⊆ M`, for all `z : N`
we have that if `x : M, y ∈ S` are such that `z + f y = f x`, then `f x - f y = z`."]
theorem mk'_sec (z : N) : f.mk' (f.sec z).1 (f.sec z).2 = z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (z : N)
Goal: f.mk' (f.sec z).1 (f.sec z).2 = z
-- Submonoid.LocalizationMap.mk'_sec
@[to_additive (attr := simp)
    "Given a localization map `f : M →+ N` for a Submonoid `S ⊆ M`, for all `z : N`
we have that if `x : M, y ∈ S` are such that `z + f y = f x`, then `f x - f y = z`."]
theorem mk'_sec (z : N) : f.mk' (f.sec z).1 (f.sec z).2 = z 
Arguments: {M : Type u_1} [CommMonoid M] {S : Submonoid M} {N : Type u_2} [CommMonoid N] (f : S.LocalizationMap N) (z : N)
Goal: f.mk' (f.sec z).1 (f.sec z).2 = z
-- AddSubmonoid.LocalizationMap.mk'_surjective
@[to_additive]
theorem mk'_surjective (z : N) : ∃ (x : _) (y : S), f.mk' x y = z 
Arguments: {M : Type u_1} [AddCommMonoid M] {S : AddSubmonoid M} {N : Type u_2} [AddCommMonoid N] (f : S.LocalizationMap N) (z : N)
Goal: ∃ x y, f.mk' x y = z