File: Mathlib/Algebra/Group/Invertible/Defs.lean

full_name: Invertible
code: /-- `Invertible a` gives a two-sided multiplicative inverse of `a`. -/
class Invertible [Mul α] [One α] (a : α) : Type u where
  /-- The inverse of an `Invertible` element -/
  invOf : α
  /-- `invOf a` is a left inverse of `a` -/
  invOf_mul_self : invOf * a = 1
  /-- `invOf a` is a right inverse of `a` -/
  mul_invOf_self : a * invOf = 1
goal: Type u

full_name: Invertible.invOf_mul_self
code: /-- `Invertible a` gives a two-sided multiplicative inverse of `a`. -/
class Invertible [Mul α] [One α] (a : α) : Type u where
  /-- The inverse of an `Invertible` element -/
  invOf : α
  /-- `invOf a` is a left inverse of `a` -/
  invOf_mul_self : invOf * a = 1
  /-- `invOf a` is a right inverse of `a` -/
  mul_invOf_self : a * invOf = 1
goal: ⅟a * a = 1

full_name: Invertible.mul_invOf_self
code: /-- `Invertible a` gives a two-sided multiplicative inverse of `a`. -/
class Invertible [Mul α] [One α] (a : α) : Type u where
  /-- The inverse of an `Invertible` element -/
  invOf : α
  /-- `invOf a` is a left inverse of `a` -/
  invOf_mul_self : invOf * a = 1
  /-- `invOf a` is a right inverse of `a` -/
  mul_invOf_self : a * invOf = 1
goal: a * ⅟a = 1

full_name: Invertible.invOf
code: /-- `Invertible a` gives a two-sided multiplicative inverse of `a`. -/
class Invertible [Mul α] [One α] (a : α) : Type u where
  /-- The inverse of an `Invertible` element -/
  invOf : α
  /-- `invOf a` is a left inverse of `a` -/
  invOf_mul_self : invOf * a = 1
  /-- `invOf a` is a right inverse of `a` -/
  mul_invOf_self : a * invOf = 1
goal: α

full_name: _aux_Mathlib_Algebra_Group_Invertible_Defs___unexpand_Invertible_invOf_1
code: /-- The inverse of an `Invertible` element -/
prefix:max
  "⅟" =>-- This notation has the same precedence as `Inv.inv`.
  Invertible.invOf
goal: Lean.PrettyPrinter.Unexpander

full_name: «_aux_Mathlib_Algebra_Group_Invertible_Defs___macroRules_term⅟__1»
code: /-- The inverse of an `Invertible` element -/
prefix:max
  "⅟" =>-- This notation has the same precedence as `Inv.inv`.
  Invertible.invOf
goal: Lean.Macro

full_name: invOf_mul_self'
code: @[simp]
theorem invOf_mul_self' [Mul α] [One α] (a : α) {_ : Invertible a} : ⅟ a * a = 1 
goal: ∀ {x : Invertible a}, ⅟a * a = 1

full_name: invOf_mul_self
code: theorem invOf_mul_self [Mul α] [One α] (a : α) [Invertible a] : ⅟ a * a = 1 
goal: ⅟a * a = 1

full_name: mul_invOf_self'
code: @[simp]
theorem mul_invOf_self' [Mul α] [One α] (a : α) {_ : Invertible a} : a * ⅟ a = 1 
goal: ∀ {x : Invertible a}, a * ⅟a = 1

full_name: mul_invOf_self
code: theorem mul_invOf_self [Mul α] [One α] (a : α) [Invertible a] : a * ⅟ a = 1 
goal: a * ⅟a = 1

full_name: invOf_mul_self_assoc'
code: @[simp]
theorem invOf_mul_self_assoc' [Monoid α] (a b : α) {_ : Invertible a} : ⅟ a * (a * b) = b 
goal: ∀ {x : Invertible a}, ⅟a * (a * b) = b

full_name: invOf_mul_self_assoc
code: theorem invOf_mul_self_assoc [Monoid α] (a b : α) [Invertible a] : ⅟ a * (a * b) = b 
goal: ⅟a * (a * b) = b

full_name: mul_invOf_self_assoc'
code: @[simp]
theorem mul_invOf_self_assoc' [Monoid α] (a b : α) {_ : Invertible a} : a * (⅟ a * b) = b 
goal: ∀ {x : Invertible a}, a * (⅟a * b) = b

full_name: mul_invOf_self_assoc
code: theorem mul_invOf_self_assoc [Monoid α] (a b : α) [Invertible a] : a * (⅟ a * b) = b 
goal: a * (⅟a * b) = b

full_name: mul_invOf_mul_self_cancel'
code: @[simp]
theorem mul_invOf_mul_self_cancel' [Monoid α] (a b : α) {_ : Invertible b} : a * ⅟ b * b = a 
goal: ∀ {x : Invertible b}, a * ⅟b * b = a

full_name: mul_invOf_mul_self_cancel
code: theorem mul_invOf_mul_self_cancel [Monoid α] (a b : α) [Invertible b] : a * ⅟ b * b = a 
goal: a * ⅟b * b = a

full_name: mul_mul_invOf_self_cancel'
code: @[simp]
theorem mul_mul_invOf_self_cancel' [Monoid α] (a b : α) {_ : Invertible b} : a * b * ⅟ b = a 
goal: ∀ {x : Invertible b}, a * b * ⅟b = a

full_name: mul_mul_invOf_self_cancel
code: theorem mul_mul_invOf_self_cancel [Monoid α] (a b : α) [Invertible b] : a * b * ⅟ b = a 
goal: a * b * ⅟b = a

full_name: invOf_eq_right_inv
code: theorem invOf_eq_right_inv [Monoid α] {a b : α} [Invertible a] (hac : a * b = 1) : ⅟ a = b 
goal: ⅟a = b

full_name: invOf_eq_left_inv
code: theorem invOf_eq_left_inv [Monoid α] {a b : α} [Invertible a] (hac : b * a = 1) : ⅟ a = b 
goal: ⅟a = b

full_name: invertible_unique
code: theorem invertible_unique {α : Type u} [Monoid α] (a b : α) [Invertible a] [Invertible b]
    (h : a = b) : ⅟ a = ⅟ b 
goal: ⅟a = ⅟b

full_name: Invertible.subsingleton
code: instance Invertible.subsingleton [Monoid α] (a : α) : Subsingleton (Invertible a) 
goal: Subsingleton (Invertible a)

full_name: Invertible.congr
code: /-- If `a` is invertible and `a = b`, then `⅟a = ⅟b`. -/
@[congr]
theorem Invertible.congr [Monoid α] (a b : α) [Invertible a] [Invertible b] (h : a = b) :
    ⅟a = ⅟b 
goal: ⅟a = ⅟b

full_name: Invertible.copy'
code: /-- If `r` is invertible and `s = r` and `si = ⅟r`, then `s` is invertible with `⅟s = si`. -/
def Invertible.copy' [MulOneClass α] {r : α} (hr : Invertible r) (s : α) (si : α) (hs : s = r)
    (hsi : si = ⅟ r) : Invertible s 
goal: Invertible s

full_name: Invertible.copy
code: /-- If `r` is invertible and `s = r`, then `s` is invertible. -/
abbrev Invertible.copy [MulOneClass α] {r : α} (hr : Invertible r) (s : α) (hs : s = r) :
    Invertible s 
goal: Invertible s

full_name: invertibleOfGroup
code: /-- Each element of a group is invertible. -/
def invertibleOfGroup [Group α] (a : α) : Invertible a 
goal: Invertible a

full_name: invOf_eq_group_inv
code: @[simp]
theorem invOf_eq_group_inv [Group α] (a : α) [Invertible a] : ⅟ a = a⁻¹ 
goal: ⅟a = a⁻¹

full_name: invertibleOne
code: /-- `1` is the inverse of itself -/
def invertibleOne [Monoid α] : Invertible (1 : α) 
goal: Invertible 1

full_name: invOf_one'
code: @[simp]
theorem invOf_one' [Monoid α] {_ : Invertible (1 : α)} : ⅟ (1 : α) = 1 
goal: ∀ {x : Invertible 1}, ⅟1 = 1

full_name: invOf_one
code: theorem invOf_one [Monoid α] [Invertible (1 : α)] : ⅟ (1 : α) = 1 
goal: ⅟1 = 1

full_name: invertibleInvOf
code: /-- `a` is the inverse of `⅟a`. -/
instance invertibleInvOf [One α] [Mul α] {a : α} [Invertible a] : Invertible (⅟ a) 
goal: Invertible ⅟a

full_name: invOf_invOf
code: @[simp]
theorem invOf_invOf [Monoid α] (a : α) [Invertible a] [Invertible (⅟ a)] : ⅟ (⅟ a) = a 
goal: ⅟⅟a = a

full_name: invOf_inj
code: @[simp]
theorem invOf_inj [Monoid α] {a b : α} [Invertible a] [Invertible b] : ⅟ a = ⅟ b ↔ a = b 
goal: ⅟a = ⅟b ↔ a = b

full_name: invertibleMul
code: /-- `⅟b * ⅟a` is the inverse of `a * b` -/
def invertibleMul [Monoid α] (a b : α) [Invertible a] [Invertible b] : Invertible (a * b) 
goal: Invertible (a * b)

full_name: invOf_mul
code: @[simp]
theorem invOf_mul [Monoid α] (a b : α) [Invertible a] [Invertible b] [Invertible (a * b)] :
    ⅟ (a * b) = ⅟ b * ⅟ a 
goal: ⅟(a * b) = ⅟b * ⅟a

full_name: Invertible.mul
code: /-- A copy of `invertibleMul` for dot notation. -/
abbrev Invertible.mul [Monoid α] {a b : α} (_ : Invertible a) (_ : Invertible b) :
    Invertible (a * b) 
goal: Invertible a → Invertible b → Invertible (a * b)

full_name: mul_right_inj_of_invertible
code: theorem mul_right_inj_of_invertible : a * c = b * c ↔ a = b 
goal: a * c = b * c ↔ a = b

full_name: mul_left_inj_of_invertible
code: theorem mul_left_inj_of_invertible : c * a = c * b ↔ a = b 
goal: c * a = c * b ↔ a = b

full_name: invOf_mul_eq_iff_eq_mul_left
code: theorem invOf_mul_eq_iff_eq_mul_left : ⅟c * a = b ↔ a = c * b 
goal: ⅟c * a = b ↔ a = c * b

full_name: mul_left_eq_iff_eq_invOf_mul
code: theorem mul_left_eq_iff_eq_invOf_mul : c * a = b ↔ a = ⅟c * b 
goal: c * a = b ↔ a = ⅟c * b

full_name: mul_invOf_eq_iff_eq_mul_right
code: theorem mul_invOf_eq_iff_eq_mul_right : a * ⅟c = b ↔ a = b * c 
goal: a * ⅟c = b ↔ a = b * c

full_name: mul_right_eq_iff_eq_mul_invOf
code: theorem mul_right_eq_iff_eq_mul_invOf : a * c = b ↔ a = b * ⅟c 
goal: a * c = b ↔ a = b * ⅟c