Module docstring
{"# Ordered monoids
This file develops some additional material on ordered monoids. "}
{"# Ordered monoids
This file develops some additional material on ordered monoids. "}
Function.Injective.isOrderedMonoid
      theorem
     [IsOrderedMonoid α] [One β] [Mul β] [Pow β ℕ] (f : β → α) (hf : Function.Injective f) (one : f 1 = 1)
  (mul : ∀ x y, f (x * y) = f x * f y) (npow : ∀ (x) (n : ℕ), f (x ^ n) = f x ^ n) :
  let _ : CommMonoid β := hf.commMonoid f one mul npow
  let _ : PartialOrder β := PartialOrder.lift f hf
  IsOrderedMonoid β
        /-- Pullback an `IsOrderedMonoid` under an injective map. -/
@[to_additive "Pullback an `IsOrderedAddMonoid` under an injective map."]
lemma Function.Injective.isOrderedMonoid [IsOrderedMonoid α] [One β] [Mul β]
    [Pow β ℕ] (f : β → α) (hf : Function.Injective f) (one : f 1 = 1)
    (mul : ∀ x y, f (x * y) = f x * f y) (npow : ∀ (x) (n : ℕ), f (x ^ n) = f x ^ n) :
    let _ : CommMonoid β := hf.commMonoid f one mul npow
    let _ : PartialOrder β := PartialOrder.lift f hf
    IsOrderedMonoid β :=
  let _ : CommMonoid β := hf.commMonoid f one mul npow
  let _ : PartialOrder β := PartialOrder.lift f hf
  { mul_le_mul_left a b ab c := show f (c * a) ≤ f (c * b) by
      rw [mul, mul]; apply mul_le_mul_left'; exact ab }
        Function.Injective.isOrderedCancelMonoid
      theorem
     [IsOrderedCancelMonoid α] [One β] [Mul β] [Pow β ℕ] (f : β → α) (hf : Injective f) (one : f 1 = 1)
  (mul : ∀ x y, f (x * y) = f x * f y) (npow : ∀ (x) (n : ℕ), f (x ^ n) = f x ^ n) :
  let _ : CommMonoid β := hf.commMonoid f one mul npow
  let _ : PartialOrder β := PartialOrder.lift f hf
  IsOrderedCancelMonoid β
        /-- Pullback an `IsOrderedCancelMonoid` under an injective map. -/
@[to_additive Function.Injective.isOrderedCancelAddMonoid
    "Pullback an `IsOrderedCancelAddMonoid` under an injective map."]
lemma Function.Injective.isOrderedCancelMonoid [IsOrderedCancelMonoid α] [One β] [Mul β]
    [Pow β ℕ] (f : β → α) (hf : Injective f) (one : f 1 = 1) (mul : ∀ x y, f (x * y) = f x * f y)
    (npow : ∀ (x) (n : ℕ), f (x ^ n) = f x ^ n) :
    let _ : CommMonoid β := hf.commMonoid f one mul npow
    let _ : PartialOrder β := PartialOrder.lift f hf
    IsOrderedCancelMonoid β :=
  let _ : CommMonoid β := hf.commMonoid f one mul npow
  let _ : PartialOrder β := PartialOrder.lift f hf
  { __ := hf.isOrderedMonoid f one mul npow
    le_of_mul_le_mul_left a b c (bc : f (a * b) ≤ f (a * c)) :=
      (mul_le_mul_iff_left (f a)).1 (by rwa [← mul, ← mul]) }
        OrderEmbedding.mulLeft
      definition
     {α : Type*} [Mul α] [LinearOrder α] [MulLeftStrictMono α] (m : α) : α ↪o α
        /-- The order embedding sending `b` to `a * b`, for some fixed `a`.
See also `OrderIso.mulLeft` when working in an ordered group. -/
@[to_additive (attr := simps!)
      "The order embedding sending `b` to `a + b`, for some fixed `a`.
       See also `OrderIso.addLeft` when working in an additive ordered group."]
def OrderEmbedding.mulLeft {α : Type*} [Mul α] [LinearOrder α]
    [MulLeftStrictMono α] (m : α) : α ↪o α :=
  OrderEmbedding.ofStrictMono (fun n => m * n) fun _ _ w => mul_lt_mul_left' w m
        OrderEmbedding.mulRight
      definition
     {α : Type*} [Mul α] [LinearOrder α] [MulRightStrictMono α] (m : α) : α ↪o α
        /-- The order embedding sending `b` to `b * a`, for some fixed `a`.
See also `OrderIso.mulRight` when working in an ordered group. -/
@[to_additive (attr := simps!)
      "The order embedding sending `b` to `b + a`, for some fixed `a`.
       See also `OrderIso.addRight` when working in an additive ordered group."]
def OrderEmbedding.mulRight {α : Type*} [Mul α] [LinearOrder α]
    [MulRightStrictMono α] (m : α) : α ↪o α :=
  OrderEmbedding.ofStrictMono (fun n => n * m) fun _ _ w => mul_lt_mul_right' w m