/-
Copyright (c) 2021 Joseph Myers. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Myers

! This file was ported from Lean 3 source module linear_algebra.ray
! leanprover-community/mathlib commit ee05e9ce1322178f0c12004eb93c00d2c8c00ed2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.GroupTheory.Subgroup.Actions
import Mathbin.LinearAlgebra.LinearIndependent

/-!
# Rays in modules

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

This file defines rays in modules.

## Main definitions

* `same_ray`: two vectors belong to the same ray if they are proportional with a nonnegative
  coefficient.

* `module.ray` is a type for the equivalence class of nonzero vectors in a module with some
common positive multiple.
-/

noncomputable section

open BigOperators

section StrictOrderedCommSemiring

variable (R : Type _) [StrictOrderedCommSemiring R]

variable {M : Type _} [AddCommMonoid M] [Module R M]

variable {N : Type _} [AddCommMonoid N] [Module R N]

variable (ι : Type _) [DecidableEq ι]

#print SameRay /-
/-- Two vectors are in the same ray if either one of them is zero or some positive multiples of them
are equal (in the typical case over a field, this means one of them is a nonnegative multiple of
the other). -/
def SameRay (v₁ v₂ : M) : Prop :=
  v₁ = 0 ∨ v₂ = 0 ∨ ∃ r₁ r₂ : R, 0 < r₁ ∧ 0 < r₂ ∧ r₁ • v₁ = r₂ • v₂
#align same_ray SameRay
-/

variable {R}

namespace SameRay

variable {x y z : M}

/- warning: same_ray.zero_left -> SameRay.zero_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (y : M), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))))) y
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (y : M), SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)))) y
Case conversion may be inaccurate. Consider using '#align same_ray.zero_left SameRay.zero_leftₓ'. -/
@[simp]
theorem zero_left (y : M) : SameRay R 0 y :=
  Or.inl rfl
#align same_ray.zero_left SameRay.zero_left

/- warning: same_ray.zero_right -> SameRay.zero_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (x : M), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (x : M), SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))
Case conversion may be inaccurate. Consider using '#align same_ray.zero_right SameRay.zero_rightₓ'. -/
@[simp]
theorem zero_right (x : M) : SameRay R x 0 :=
  Or.inr <| Or.inl rfl
#align same_ray.zero_right SameRay.zero_right

#print SameRay.of_subsingleton /-
@[nontriviality]
theorem of_subsingleton [Subsingleton M] (x y : M) : SameRay R x y :=
  by
  rw [Subsingleton.elim x 0]
  exact zero_left _
#align same_ray.of_subsingleton SameRay.of_subsingleton
-/

/- warning: same_ray.of_subsingleton' -> SameRay.of_subsingleton' is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] [_inst_7 : Subsingleton.{succ u1} R] (x : M) (y : M), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] [_inst_7 : Subsingleton.{succ u2} R] (x : M) (y : M), SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y
Case conversion may be inaccurate. Consider using '#align same_ray.of_subsingleton' SameRay.of_subsingleton'ₓ'. -/
@[nontriviality]
theorem of_subsingleton' [Subsingleton R] (x y : M) : SameRay R x y :=
  haveI := Module.subsingleton R M
  of_subsingleton x y
#align same_ray.of_subsingleton' SameRay.of_subsingleton'

/- warning: same_ray.refl -> SameRay.refl is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (x : M), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x x
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (x : M), SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x x
Case conversion may be inaccurate. Consider using '#align same_ray.refl SameRay.reflₓ'. -/
/-- `same_ray` is reflexive. -/
@[refl]
theorem refl (x : M) : SameRay R x x := by
  nontriviality R
  exact Or.inr (Or.inr <| ⟨1, 1, zero_lt_one, zero_lt_one, rfl⟩)
#align same_ray.refl SameRay.refl

/- warning: same_ray.rfl -> SameRay.rfl is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M}, SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x x
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M}, SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x x
Case conversion may be inaccurate. Consider using '#align same_ray.rfl SameRay.rflₓ'. -/
protected theorem rfl : SameRay R x x :=
  refl _
#align same_ray.rfl SameRay.rfl

/- warning: same_ray.symm -> SameRay.symm is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 y x)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 y x)
Case conversion may be inaccurate. Consider using '#align same_ray.symm SameRay.symmₓ'. -/
/-- `same_ray` is symmetric. -/
@[symm]
theorem symm (h : SameRay R x y) : SameRay R y x :=
  (or_left_comm.1 h).imp_right <| Or.imp_right fun ⟨r₁, r₂, h₁, h₂, h⟩ => ⟨r₂, r₁, h₂, h₁, h.symm⟩
#align same_ray.symm SameRay.symm

/- warning: same_ray.exists_pos -> SameRay.exists_pos is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) -> (Exists.{succ u1} R (fun (r₁ : R) => Exists.{succ u1} R (fun (r₂ : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r₁) (And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r₂) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r₁ x) (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r₂ y))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) -> (Ne.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) -> (Exists.{succ u2} R (fun (r₁ : R) => Exists.{succ u2} R (fun (r₂ : R) => And (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r₁) (And (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r₂) (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r₁ x) (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r₂ y))))))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_pos SameRay.exists_posₓ'. -/
/-- If `x` and `y` are nonzero vectors on the same ray, then there exist positive numbers `r₁ r₂`
such that `r₁ • x = r₂ • y`. -/
theorem exists_pos (h : SameRay R x y) (hx : x ≠ 0) (hy : y ≠ 0) :
    ∃ r₁ r₂ : R, 0 < r₁ ∧ 0 < r₂ ∧ r₁ • x = r₂ • y :=
  (h.resolve_left hx).resolve_left hy
#align same_ray.exists_pos SameRay.exists_pos

/- warning: same_ray_comm -> SameRay.sameRay_comm is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M}, Iff (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 y x)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M}, Iff (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 y x)
Case conversion may be inaccurate. Consider using '#align same_ray_comm SameRay.sameRay_commₓ'. -/
theorem SameRay.sameRay_comm : SameRay R x y ↔ SameRay R y x :=
  ⟨SameRay.symm, SameRay.symm⟩
#align same_ray_comm SameRay.sameRay_comm

/- warning: same_ray.trans -> SameRay.trans is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 y z) -> ((Eq.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) -> (Or (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) (Eq.{succ u2} M z (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))))) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x z)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 y z) -> ((Eq.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) -> (Or (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) (Eq.{succ u1} M z (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))))) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x z)
Case conversion may be inaccurate. Consider using '#align same_ray.trans SameRay.transₓ'. -/
/-- `same_ray` is transitive unless the vector in the middle is zero and both other vectors are
nonzero. -/
theorem trans (hxy : SameRay R x y) (hyz : SameRay R y z) (hy : y = 0 → x = 0 ∨ z = 0) :
    SameRay R x z := by
  rcases eq_or_ne x 0 with (rfl | hx); · exact zero_left z
  rcases eq_or_ne z 0 with (rfl | hz); · exact zero_right x
  rcases eq_or_ne y 0 with (rfl | hy);
  · exact (hy rfl).elim (fun h => (hx h).elim) fun h => (hz h).elim
  rcases hxy.exists_pos hx hy with ⟨r₁, r₂, hr₁, hr₂, h₁⟩
  rcases hyz.exists_pos hy hz with ⟨r₃, r₄, hr₃, hr₄, h₂⟩
  refine' Or.inr (Or.inr <| ⟨r₃ * r₁, r₂ * r₄, mul_pos hr₃ hr₁, mul_pos hr₂ hr₄, _⟩)
  rw [mul_smul, mul_smul, h₁, ← h₂, smul_comm]
#align same_ray.trans SameRay.trans

/- warning: same_ray_nonneg_smul_right -> SameRay.sameRay_nonneg_smul_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M) {r : R}, (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 v (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (v : M) {r : R}, (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 v (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r v))
Case conversion may be inaccurate. Consider using '#align same_ray_nonneg_smul_right SameRay.sameRay_nonneg_smul_rightₓ'. -/
/-- A vector is in the same ray as a nonnegative multiple of itself. -/
theorem SameRay.sameRay_nonneg_smul_right (v : M) {r : R} (h : 0 ≤ r) : SameRay R v (r • v) :=
  Or.inr <|
    h.eq_or_lt.imp (fun h => h ▸ zero_smul R v) fun h =>
      ⟨r, 1, h, by
        nontriviality R
        exact zero_lt_one, (one_smul _ _).symm⟩
#align same_ray_nonneg_smul_right SameRay.sameRay_nonneg_smul_right

/- warning: same_ray_pos_smul_right -> SameRay.sameRay_pos_smul_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M) {r : R}, (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 v (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (v : M) {r : R}, (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 v (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r v))
Case conversion may be inaccurate. Consider using '#align same_ray_pos_smul_right SameRay.sameRay_pos_smul_rightₓ'. -/
/-- A vector is in the same ray as a positive multiple of itself. -/
theorem SameRay.sameRay_pos_smul_right (v : M) {r : R} (h : 0 < r) : SameRay R v (r • v) :=
  SameRay.sameRay_nonneg_smul_right v h.le
#align same_ray_pos_smul_right SameRay.sameRay_pos_smul_right

/- warning: same_ray.nonneg_smul_right -> SameRay.nonneg_smul_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r y))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r y))
Case conversion may be inaccurate. Consider using '#align same_ray.nonneg_smul_right SameRay.nonneg_smul_rightₓ'. -/
/-- A vector is in the same ray as a nonnegative multiple of one it is in the same ray as. -/
theorem nonneg_smul_right {r : R} (h : SameRay R x y) (hr : 0 ≤ r) : SameRay R x (r • y) :=
  h.trans (SameRay.sameRay_nonneg_smul_right y hr) fun hy => Or.inr <| by rw [hy, smul_zero]
#align same_ray.nonneg_smul_right SameRay.nonneg_smul_right

/- warning: same_ray.pos_smul_right -> SameRay.pos_smul_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r y))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r y))
Case conversion may be inaccurate. Consider using '#align same_ray.pos_smul_right SameRay.pos_smul_rightₓ'. -/
/-- A vector is in the same ray as a positive multiple of one it is in the same ray as. -/
theorem pos_smul_right {r : R} (h : SameRay R x y) (hr : 0 < r) : SameRay R x (r • y) :=
  h.nonneg_smul_right hr.le
#align same_ray.pos_smul_right SameRay.pos_smul_right

/- warning: same_ray_nonneg_smul_left -> SameRay.sameRay_nonneg_smul_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M) {r : R}, (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v) v)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (v : M) {r : R}, (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r v) v)
Case conversion may be inaccurate. Consider using '#align same_ray_nonneg_smul_left SameRay.sameRay_nonneg_smul_leftₓ'. -/
/-- A nonnegative multiple of a vector is in the same ray as that vector. -/
theorem SameRay.sameRay_nonneg_smul_left (v : M) {r : R} (h : 0 ≤ r) : SameRay R (r • v) v :=
  (SameRay.sameRay_nonneg_smul_right v h).symm
#align same_ray_nonneg_smul_left SameRay.sameRay_nonneg_smul_left

/- warning: same_ray_pos_smul_left -> SameRay.sameRay_pos_smul_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M) {r : R}, (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v) v)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (v : M) {r : R}, (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r v) v)
Case conversion may be inaccurate. Consider using '#align same_ray_pos_smul_left SameRay.sameRay_pos_smul_leftₓ'. -/
/-- A positive multiple of a vector is in the same ray as that vector. -/
theorem SameRay.sameRay_pos_smul_left (v : M) {r : R} (h : 0 < r) : SameRay R (r • v) v :=
  SameRay.sameRay_nonneg_smul_left v h.le
#align same_ray_pos_smul_left SameRay.sameRay_pos_smul_left

/- warning: same_ray.nonneg_smul_left -> SameRay.nonneg_smul_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r x) y)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r x) y)
Case conversion may be inaccurate. Consider using '#align same_ray.nonneg_smul_left SameRay.nonneg_smul_leftₓ'. -/
/-- A nonnegative multiple of a vector is in the same ray as one it is in the same ray as. -/
theorem nonneg_smul_left {r : R} (h : SameRay R x y) (hr : 0 ≤ r) : SameRay R (r • x) y :=
  (h.symm.nonneg_smul_right hr).symm
#align same_ray.nonneg_smul_left SameRay.nonneg_smul_left

/- warning: same_ray.pos_smul_left -> SameRay.pos_smul_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r x) y)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {r : R}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) r) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))) r x) y)
Case conversion may be inaccurate. Consider using '#align same_ray.pos_smul_left SameRay.pos_smul_leftₓ'. -/
/-- A positive multiple of a vector is in the same ray as one it is in the same ray as. -/
theorem pos_smul_left {r : R} (h : SameRay R x y) (hr : 0 < r) : SameRay R (r • x) y :=
  h.nonneg_smul_left hr.le
#align same_ray.pos_smul_left SameRay.pos_smul_left

/- warning: same_ray.map -> SameRay.map is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4] {x : M} {y : M} (f : LinearMap.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5), (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u1, u3} R _inst_1 N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) f x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) f y))
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommSemiring.{u3} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2] {N : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4] {x : M} {y : M} (f : LinearMap.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5), (SameRay.{u3, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u3, u1} R _inst_1 ((fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) x) _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))))) f y))
Case conversion may be inaccurate. Consider using '#align same_ray.map SameRay.mapₓ'. -/
/-- If two vectors are on the same ray then they remain so after applying a linear map. -/
theorem map (f : M →ₗ[R] N) (h : SameRay R x y) : SameRay R (f x) (f y) :=
  (h.imp fun hx => by rw [hx, map_zero]) <|
    Or.imp (fun hy => by rw [hy, map_zero]) fun ⟨r₁, r₂, hr₁, hr₂, h⟩ =>
      ⟨r₁, r₂, hr₁, hr₂, by rw [← f.map_smul, ← f.map_smul, h]⟩
#align same_ray.map SameRay.map

/- warning: function.injective.same_ray_map_iff -> Function.Injective.sameRay_map_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4] {x : M} {y : M} {F : Type.{u4}} [_inst_7 : LinearMapClass.{u4, u1, u2, u3} F R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5] {f : F}, (Function.Injective.{succ u2, succ u3} M N (coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M (fun (_x : M) => N) (SMulHomClass.toFunLike.{u4, u1, u2, u3} F R M N (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u1, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u3} R N (AddZeroClass.toHasZero.{u3} N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4))) (DistribSMul.toSmulZeroClass.{u1, u3} R N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4)) (DistribMulAction.toDistribSMul.{u1, u3} R N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSmulHomClass.{u4, u1, u2, u3} F R M N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u1, u2, u3, u4} R M N F (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7)))) f)) -> (Iff (SameRay.{u1, u3} R _inst_1 N _inst_4 _inst_5 (coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M (fun (_x : M) => N) (SMulHomClass.toFunLike.{u4, u1, u2, u3} F R M N (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u1, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u3} R N (AddZeroClass.toHasZero.{u3} N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4))) (DistribSMul.toSmulZeroClass.{u1, u3} R N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4)) (DistribMulAction.toDistribSMul.{u1, u3} R N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSmulHomClass.{u4, u1, u2, u3} F R M N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u1, u2, u3, u4} R M N F (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7)))) f x) (coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M (fun (_x : M) => N) (SMulHomClass.toFunLike.{u4, u1, u2, u3} F R M N (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u1, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u3} R N (AddZeroClass.toHasZero.{u3} N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4))) (DistribSMul.toSmulZeroClass.{u1, u3} R N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4)) (DistribMulAction.toDistribSMul.{u1, u3} R N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSmulHomClass.{u4, u1, u2, u3} F R M N (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u3} N _inst_4) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u1, u2, u3, u4} R M N F (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7)))) f y)) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y))
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommSemiring.{u3} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2] {N : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4] {x : M} {y : M} {F : Type.{u4}} [_inst_7 : LinearMapClass.{u4, u3, u2, u1} F R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5] {f : F}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u4, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{u4, u3, u2, u1} F R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{u4, u3, u2, u1} F R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, u4} R M N F (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7))) f)) -> (Iff (SameRay.{u3, u1} R _inst_1 ((fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) x) _inst_4 _inst_5 (FunLike.coe.{succ u4, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{u4, u3, u2, u1} F R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{u4, u3, u2, u1} F R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, u4} R M N F (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7))) f x) (FunLike.coe.{succ u4, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{u4, u3, u2, u1} F R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{u4, u3, u2, u1} F R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, u4} R M N F (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 _inst_7))) f y)) (SameRay.{u3, u2} R _inst_1 M _inst_2 _inst_3 x y))
Case conversion may be inaccurate. Consider using '#align function.injective.same_ray_map_iff Function.Injective.sameRay_map_iffₓ'. -/
/-- The images of two vectors under an injective linear map are on the same ray if and only if the
original vectors are on the same ray. -/
theorem Function.Injective.sameRay_map_iff {F : Type _} [LinearMapClass F R M N] {f : F}
    (hf : Function.Injective f) : SameRay R (f x) (f y) ↔ SameRay R x y := by
  simp only [SameRay, map_zero, ← hf.eq_iff, map_smul]
#align function.injective.same_ray_map_iff Function.Injective.sameRay_map_iff

/- warning: same_ray_map_iff -> SameRay.sameRay_map_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4] {x : M} {y : M} (e : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5), Iff (SameRay.{u1, u3} R _inst_1 N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearEquiv.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) e x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearEquiv.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) e y)) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y)
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommSemiring.{u3} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2] {N : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4] {x : M} {y : M} (e : LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5), Iff (SameRay.{u3, u1} R _inst_1 ((fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) x) _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, max u2 u1} R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (SemilinearEquivClass.instSemilinearMapClass.{u3, u3, u2, u1, max u2 u1} R R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (LinearEquiv.instSemilinearEquivClassLinearEquiv.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))))))) e x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, max u2 u1} R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (SemilinearEquivClass.instSemilinearMapClass.{u3, u3, u2, u1, max u2 u1} R R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (LinearEquiv.instSemilinearEquivClassLinearEquiv.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))))))) e y)) (SameRay.{u3, u2} R _inst_1 M _inst_2 _inst_3 x y)
Case conversion may be inaccurate. Consider using '#align same_ray_map_iff SameRay.sameRay_map_iffₓ'. -/
/-- The images of two vectors under a linear equivalence are on the same ray if and only if the
original vectors are on the same ray. -/
@[simp]
theorem SameRay.sameRay_map_iff (e : M ≃ₗ[R] N) : SameRay R (e x) (e y) ↔ SameRay R x y :=
  Function.Injective.sameRay_map_iff (EquivLike.injective e)
#align same_ray_map_iff SameRay.sameRay_map_iff

/- warning: same_ray.smul -> SameRay.smul is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {S : Type.{u3}} [_inst_7 : Monoid.{u3} S] [_inst_8 : DistribMulAction.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2)] [_inst_9 : SMulCommClass.{u1, u3, u2} R S M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u3, u2} S M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8)))], (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (forall (s : S), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u3, u2} S M (SMulZeroClass.toHasSmul.{u3, u2} S M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8))) s x) (SMul.smul.{u3, u2} S M (SMulZeroClass.toHasSmul.{u3, u2} S M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8))) s y))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {S : Type.{u3}} [_inst_7 : Monoid.{u3} S] [_inst_8 : DistribMulAction.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2)] [_inst_9 : SMulCommClass.{u1, u3, u2} R S M (SMulZeroClass.toSMul.{u1, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u2} S M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8)))], (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (forall (s : S), SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u3, u2, u2} S M M (instHSMul.{u3, u2} S M (SMulZeroClass.toSMul.{u3, u2} S M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8)))) s x) (HSMul.hSMul.{u3, u2, u2} S M M (instHSMul.{u3, u2} S M (SMulZeroClass.toSMul.{u3, u2} S M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} S M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} S M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8)))) s y))
Case conversion may be inaccurate. Consider using '#align same_ray.smul SameRay.smulₓ'. -/
/-- If two vectors are on the same ray then both scaled by the same action are also on the same
ray. -/
theorem smul {S : Type _} [Monoid S] [DistribMulAction S M] [SMulCommClass R S M]
    (h : SameRay R x y) (s : S) : SameRay R (s • x) (s • y) :=
  h.map (s • (LinearMap.id : M →ₗ[R] M))
#align same_ray.smul SameRay.smul

/- warning: same_ray.add_left -> SameRay.add_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x z) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 y z) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 (HAdd.hAdd.{u2, u2, u2} M M M (instHAdd.{u2} M (AddZeroClass.toHasAdd.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) x y) z)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x z) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 y z) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (HAdd.hAdd.{u1, u1, u1} M M M (instHAdd.{u1} M (AddZeroClass.toAdd.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)))) x y) z)
Case conversion may be inaccurate. Consider using '#align same_ray.add_left SameRay.add_leftₓ'. -/
/-- If `x` and `y` are on the same ray as `z`, then so is `x + y`. -/
theorem add_left (hx : SameRay R x z) (hy : SameRay R y z) : SameRay R (x + y) z :=
  by
  rcases eq_or_ne x 0 with (rfl | hx₀); · rwa [zero_add]
  rcases eq_or_ne y 0 with (rfl | hy₀); · rwa [add_zero]
  rcases eq_or_ne z 0 with (rfl | hz₀); · apply zero_right
  rcases hx.exists_pos hx₀ hz₀ with ⟨rx, rz₁, hrx, hrz₁, Hx⟩
  rcases hy.exists_pos hy₀ hz₀ with ⟨ry, rz₂, hry, hrz₂, Hy⟩
  refine' Or.inr (Or.inr ⟨rx * ry, ry * rz₁ + rx * rz₂, mul_pos hrx hry, _, _⟩)
  · apply_rules [add_pos, mul_pos]
  · simp only [mul_smul, smul_add, add_smul, ← Hx, ← Hy]
    rw [smul_comm]
#align same_ray.add_left SameRay.add_left

/- warning: same_ray.add_right -> SameRay.add_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x z) -> (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 x (HAdd.hAdd.{u2, u2, u2} M M M (instHAdd.{u2} M (AddZeroClass.toHasAdd.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) y z))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {x : M} {y : M} {z : M}, (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x y) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x z) -> (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 x (HAdd.hAdd.{u1, u1, u1} M M M (instHAdd.{u1} M (AddZeroClass.toAdd.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)))) y z))
Case conversion may be inaccurate. Consider using '#align same_ray.add_right SameRay.add_rightₓ'. -/
/-- If `y` and `z` are on the same ray as `x`, then so is `y + z`. -/
theorem add_right (hy : SameRay R x y) (hz : SameRay R x z) : SameRay R x (y + z) :=
  (hy.symm.add_left hz.symm).symm
#align same_ray.add_right SameRay.add_right

end SameRay

#print RayVector /-
/-- Nonzero vectors, as used to define rays. This type depends on an unused argument `R` so that
`ray_vector.setoid` can be an instance. -/
@[nolint unused_arguments has_nonempty_instance]
def RayVector (R M : Type _) [Zero M] :=
  { v : M // v ≠ 0 }
#align ray_vector RayVector
-/

/- warning: ray_vector.has_coe -> RayVector.coe is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} {M : Type.{u2}} [_inst_7 : Zero.{u2} M], Coe.{succ u2, succ u2} (RayVector.{u1, u2} R M _inst_7) M
but is expected to have type
  forall {R : Type.{u1}} {M : Type.{u2}} {_inst_7 : Zero.{u2} M}, CoeOut.{succ u2, succ u2} (RayVector.{u1, u2} R M _inst_7) M
Case conversion may be inaccurate. Consider using '#align ray_vector.has_coe RayVector.coeₓ'. -/
instance RayVector.coe {R M : Type _} [Zero M] : Coe (RayVector R M) M :=
  coeSubtype
#align ray_vector.has_coe RayVector.coe

instance {R M : Type _} [Zero M] [Nontrivial M] : Nonempty (RayVector R M) :=
  let ⟨x, hx⟩ := exists_ne (0 : M)
  ⟨⟨x, hx⟩⟩

variable (R M)

/-- The setoid of the `same_ray` relation for the subtype of nonzero vectors. -/
instance : Setoid (RayVector R M)
    where
  R x y := SameRay R (x : M) y
  iseqv :=
    ⟨fun x => SameRay.refl _, fun x y h => h.symm, fun x y z hxy hyz =>
      hxy.trans hyz fun hy => (y.2 hy).elim⟩

#print Module.Ray /-
/-- A ray (equivalence class of nonzero vectors with common positive multiples) in a module. -/
@[nolint has_nonempty_instance]
def Module.Ray :=
  Quotient (RayVector.setoid R M)
#align module.ray Module.Ray
-/

variable {R M}

/- warning: equiv_iff_same_ray -> equiv_iff_sameRay is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {v₁ : RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))} {v₂ : RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))}, Iff (HasEquivₓ.Equiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) (setoidHasEquiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) (RayVector.setoid.{u1, u2} R _inst_1 M _inst_2 _inst_3)) v₁ v₂) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (HasLiftT.mk.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (CoeTCₓ.coe.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (coeBase.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (RayVector.coe.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) v₁) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (HasLiftT.mk.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (CoeTCₓ.coe.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (coeBase.{succ u2, succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) M (RayVector.coe.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) v₂))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {v₁ : RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))} {v₂ : RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))}, Iff (HasEquiv.Equiv.{succ u1, 0} (RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))) (instHasEquiv.{succ u1} (RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))) (RayVector.Setoid.{u2, u1} R _inst_1 M _inst_2 _inst_3)) v₁ v₂) (SameRay.{u2, u1} R _inst_1 M _inst_2 _inst_3 (Subtype.val.{succ u1} M (fun (v : M) => Ne.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) v₁) (Subtype.val.{succ u1} M (fun (v : M) => Ne.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))) v₂))
Case conversion may be inaccurate. Consider using '#align equiv_iff_same_ray equiv_iff_sameRayₓ'. -/
/-- Equivalence of nonzero vectors, in terms of same_ray. -/
theorem equiv_iff_sameRay {v₁ v₂ : RayVector R M} : v₁ ≈ v₂ ↔ SameRay R (v₁ : M) v₂ :=
  Iff.rfl
#align equiv_iff_same_ray equiv_iff_sameRay

variable (R)

/- warning: ray_of_ne_zero -> rayOfNeZero is a dubious translation:
lean 3 declaration is
  forall (R : Type.{u1}) [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M), (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) -> (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)
but is expected to have type
  forall (R : Type.{u1}) [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (v : M), (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))) -> (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)
Case conversion may be inaccurate. Consider using '#align ray_of_ne_zero rayOfNeZeroₓ'. -/
/-- The ray given by a nonzero vector. -/
protected def rayOfNeZero (v : M) (h : v ≠ 0) : Module.Ray R M :=
  ⟦⟨v, h⟩⟧
#align ray_of_ne_zero rayOfNeZero

/- warning: module.ray.ind -> Module.Ray.ind is a dubious translation:
lean 3 declaration is
  forall (R : Type.{u1}) [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {C : (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) -> Prop}, (forall (v : M) (hv : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))), C (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v hv)) -> (forall (x : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), C x)
but is expected to have type
  forall (R : Type.{u2}) [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {C : (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) -> Prop}, (forall (v : M) (hv : Ne.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))), C (rayOfNeZero.{u2, u1} R _inst_1 M _inst_2 _inst_3 v hv)) -> (forall (x : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), C x)
Case conversion may be inaccurate. Consider using '#align module.ray.ind Module.Ray.indₓ'. -/
/-- An induction principle for `module.ray`, used as `induction x using module.ray.ind`. -/
theorem Module.Ray.ind {C : Module.Ray R M → Prop} (h : ∀ (v) (hv : v ≠ 0), C (rayOfNeZero R v hv))
    (x : Module.Ray R M) : C x :=
  Quotient.ind (Subtype.rec <| h) x
#align module.ray.ind Module.Ray.ind

variable {R}

instance [Nontrivial M] : Nonempty (Module.Ray R M) :=
  Nonempty.map Quotient.mk' inferInstance

/- warning: ray_eq_iff -> ray_eq_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {v₁ : M} {v₂ : M} (hv₁ : Ne.{succ u2} M v₁ (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) (hv₂ : Ne.{succ u2} M v₂ (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))), Iff (Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₁ hv₁) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₂ hv₂)) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₁ v₂)
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {v₁ : M} {v₂ : M} (hv₁ : Ne.{succ u2} M v₁ (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))) (hv₂ : Ne.{succ u2} M v₂ (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))), Iff (Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₁ hv₁) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₂ hv₂)) (SameRay.{u1, u2} R _inst_1 M _inst_2 _inst_3 v₁ v₂)
Case conversion may be inaccurate. Consider using '#align ray_eq_iff ray_eq_iffₓ'. -/
/-- The rays given by two nonzero vectors are equal if and only if those vectors
satisfy `same_ray`. -/
theorem ray_eq_iff {v₁ v₂ : M} (hv₁ : v₁ ≠ 0) (hv₂ : v₂ ≠ 0) :
    rayOfNeZero R _ hv₁ = rayOfNeZero R _ hv₂ ↔ SameRay R v₁ v₂ :=
  Quotient.eq'
#align ray_eq_iff ray_eq_iff

/- warning: ray_pos_smul -> ray_pos_smul is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {v : M} (h : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) {r : R}, (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) r) -> (forall (hrv : Ne.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) r v) hrv) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v h))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {v : M} (h : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))) {r : R}, (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedSemiring.toPartialOrder.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R _inst_1))))) r) -> (forall (hrv : Ne.{succ u2} M (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3))))) r v) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3))))) r v) hrv) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v h))
Case conversion may be inaccurate. Consider using '#align ray_pos_smul ray_pos_smulₓ'. -/
/-- The ray given by a positive multiple of a nonzero vector. -/
@[simp]
theorem ray_pos_smul {v : M} (h : v ≠ 0) {r : R} (hr : 0 < r) (hrv : r • v ≠ 0) :
    rayOfNeZero R (r • v) hrv = rayOfNeZero R v h :=
  (ray_eq_iff _ _).2 <| SameRay.sameRay_pos_smul_left v hr
#align ray_pos_smul ray_pos_smul

/- warning: ray_vector.map_linear_equiv -> RayVector.mapLinearEquiv is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RayVector.mapLinearEquiv._proof_1.{u1} R _inst_1) (RayVector.mapLinearEquiv._proof_2.{u1} R _inst_1) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Equiv.{succ u2, succ u3} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) (RayVector.{u1, u3} R N (AddZeroClass.toHasZero.{u3} N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4)))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Equiv.{succ u2, succ u3} (RayVector.{u1, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (RayVector.{u1, u3} R N (AddMonoid.toZero.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4))))
Case conversion may be inaccurate. Consider using '#align ray_vector.map_linear_equiv RayVector.mapLinearEquivₓ'. -/
/-- An equivalence between modules implies an equivalence between ray vectors. -/
def RayVector.mapLinearEquiv (e : M ≃ₗ[R] N) : RayVector R M ≃ RayVector R N :=
  Equiv.subtypeEquiv e.toEquiv fun _ => e.map_ne_zero_iff.symm
#align ray_vector.map_linear_equiv RayVector.mapLinearEquiv

#print Module.Ray.map /-
/-- An equivalence between modules implies an equivalence between rays. -/
def Module.Ray.map (e : M ≃ₗ[R] N) : Module.Ray R M ≃ Module.Ray R N :=
  Quotient.congr (RayVector.mapLinearEquiv e) fun ⟨a, ha⟩ ⟨b, hb⟩ =>
    (SameRay.sameRay_map_iff _).symm
#align module.ray.map Module.Ray.map
-/

/- warning: module.ray.map_apply -> Module.Ray.map_apply is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4] (e : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (v : M) (hv : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))), Eq.{succ u3} (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5) (coeFn.{max 1 (max (succ u2) (succ u3)) (succ u3) (succ u2), max (succ u2) (succ u3)} (Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5)) (fun (_x : Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5)) => (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) -> (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5)) (Equiv.hasCoeToFun.{succ u2, succ u3} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5)) (Module.Ray.map.{u1, u2, u3} R _inst_1 M _inst_2 _inst_3 N _inst_4 _inst_5 e) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v hv)) (rayOfNeZero.{u1, u3} R _inst_1 N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearEquiv.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) e v) (Iff.mpr (Ne.{succ u3} N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearEquiv.hasCoeToFun.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) e v) (OfNat.ofNat.{u3} N 0 (OfNat.mk.{u3} N 0 (Zero.zero.{u3} N (AddZeroClass.toHasZero.{u3} N (AddMonoid.toAddZeroClass.{u3} N (AddCommMonoid.toAddMonoid.{u3} N _inst_4))))))) (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) (LinearEquiv.map_ne_zero_iff.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) e v) hv))
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommSemiring.{u3} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2] {N : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4] (e : LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (v : M) (hv : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) => Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5) (rayOfNeZero.{u3, u2} R _inst_1 M _inst_2 _inst_3 v hv)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5)) (Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) (fun (_x : Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) => Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5)) (Module.Ray.map.{u3, u2, u1} R _inst_1 M _inst_2 _inst_3 N _inst_4 _inst_5 e) (rayOfNeZero.{u3, u2} R _inst_1 M _inst_2 _inst_3 v hv)) (rayOfNeZero.{u3, u1} R _inst_1 ((fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) v) _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : M) => N) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (SMulZeroClass.toSMul.{u3, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribSMul.toSMulZeroClass.{u3, u2} R M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} R M (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u3, u1} R N (AddMonoid.toZero.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribSMul.toSMulZeroClass.{u3, u1} R N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4)) (DistribMulAction.toDistribSMul.{u3, u1} R N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5)))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R M N (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (AddCommMonoid.toAddMonoid.{u1} N _inst_4) (Module.toDistribMulAction.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_3) (Module.toDistribMulAction.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4 _inst_5) (SemilinearMapClass.distribMulActionHomClass.{u3, u2, u1, max u2 u1} R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (SemilinearEquivClass.instSemilinearMapClass.{u3, u3, u2, u1, max u2 u1} R R M N (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (LinearEquiv.instSemilinearEquivClassLinearEquiv.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))))))) e v) (Iff.mpr (Ne.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) v) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M N (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M N (AddEquivClass.toEquivLike.{max u2 u1, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) M N (AddZeroClass.toAdd.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (AddZeroClass.toAdd.{u1} N (AddMonoid.toAddZeroClass.{u1} N (AddCommMonoid.toAddMonoid.{u1} N _inst_4))) (SemilinearEquivClass.toAddEquivClass.{max u2 u1, u3, u3, u2, u1} (LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5) R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5 (LinearEquiv.instSemilinearEquivClassLinearEquiv.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))))))) e v) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) v) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) v) (AddMonoid.toZero.{u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) v) (AddCommMonoid.toAddMonoid.{u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) v) _inst_4))))) (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))) (LinearEquiv.map_ne_zero_iff.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) e v) hv))
Case conversion may be inaccurate. Consider using '#align module.ray.map_apply Module.Ray.map_applyₓ'. -/
@[simp]
theorem Module.Ray.map_apply (e : M ≃ₗ[R] N) (v : M) (hv : v ≠ 0) :
    Module.Ray.map e (rayOfNeZero _ v hv) = rayOfNeZero _ (e v) (e.map_ne_zero_iff.2 hv) :=
  rfl
#align module.ray.map_apply Module.Ray.map_apply

#print Module.Ray.map_refl /-
@[simp]
theorem Module.Ray.map_refl : (Module.Ray.map <| LinearEquiv.refl R M) = Equiv.refl _ :=
  Equiv.ext <| Module.Ray.ind R fun _ _ => rfl
#align module.ray.map_refl Module.Ray.map_refl
-/

/- warning: module.ray.map_symm -> Module.Ray.map_symm is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {N : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_4] (e : LinearEquiv.{u1, u1, u2, u3} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5), Eq.{max 1 (max (succ u3) (succ u2)) (succ u2) (succ u3)} (Equiv.{succ u3, succ u2} (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)) (Equiv.symm.{succ u2, succ u3} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u3} R _inst_1 N _inst_4 _inst_5) (Module.Ray.map.{u1, u2, u3} R _inst_1 M _inst_2 _inst_3 N _inst_4 _inst_5 e)) (Module.Ray.map.{u1, u3, u2} R _inst_1 N _inst_4 _inst_5 M _inst_2 _inst_3 (LinearEquiv.symm.{u1, u1, u2, u3} R R M N (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) e))
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommSemiring.{u3} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2] {N : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_4] (e : LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) M N _inst_2 _inst_4 _inst_3 _inst_5), Eq.{max (succ u2) (succ u1)} (Equiv.{succ u1, succ u2} (Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5) (Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3)) (Equiv.symm.{succ u2, succ u1} (Module.Ray.{u3, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u3, u1} R _inst_1 N _inst_4 _inst_5) (Module.Ray.map.{u3, u2, u1} R _inst_1 M _inst_2 _inst_3 N _inst_4 _inst_5 e)) (Module.Ray.map.{u3, u1, u2} R _inst_1 N _inst_4 _inst_5 M _inst_2 _inst_3 (LinearEquiv.symm.{u3, u3, u2, u1} R R M N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)) _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R _inst_1))) e))
Case conversion may be inaccurate. Consider using '#align module.ray.map_symm Module.Ray.map_symmₓ'. -/
@[simp]
theorem Module.Ray.map_symm (e : M ≃ₗ[R] N) : (Module.Ray.map e).symm = Module.Ray.map e.symm :=
  rfl
#align module.ray.map_symm Module.Ray.map_symm

section Action

variable {G : Type _} [Group G] [DistribMulAction G M]

/-- Any invertible action preserves the non-zeroness of ray vectors. This is primarily of interest
when `G = Rˣ` -/
instance {R : Type _} : MulAction G (RayVector R M)
    where
  smul r := Subtype.map ((· • ·) r) fun a => (smul_ne_zero_iff_ne _).2
  mul_smul a b m := Subtype.ext <| mul_smul a b _
  one_smul m := Subtype.ext <| one_smul _ _

variable [SMulCommClass R G M]

/-- Any invertible action preserves the non-zeroness of rays. This is primarily of interest when
`G = Rˣ` -/
instance : MulAction G (Module.Ray R M)
    where
  smul r := Quotient.map ((· • ·) r) fun a b h => h.smul _
  mul_smul a b := Quotient.ind fun m => congr_arg Quotient.mk' <| mul_smul a b _
  one_smul := Quotient.ind fun m => congr_arg Quotient.mk' <| one_smul _ _

/- warning: module.ray.linear_equiv_smul_eq_map -> Module.Ray.linearEquiv_smul_eq_map is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (e : LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (v : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (SMul.smul.{u2, u2} (LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (MulAction.toHasSmul.{u2, u2} (LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u2} (LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Group.toDivInvMonoid.{u2} (LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (LinearEquiv.automorphismGroup.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3))) (Module.Ray.mulAction.{u1, u2, u2} R _inst_1 M _inst_2 _inst_3 (LinearEquiv.{u1, u1, u2, u2} R R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (RingHomInvPair.ids.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (LinearEquiv.automorphismGroup.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3) (LinearEquiv.applyDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3) (LinearEquiv.apply_smulCommClass.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3))) e v) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)) (fun (_x : Equiv.{succ u2, succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)) => (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) -> (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)) (Equiv.hasCoeToFun.{succ u2, succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3)) (Module.Ray.map.{u1, u2, u2} R _inst_1 M _inst_2 _inst_3 M _inst_2 _inst_3 e) v)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (e : LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (v : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), Eq.{succ u1} (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (HSMul.hSMul.{u1, u1, u1} (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (instHSMul.{u1, u1} (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (MulAction.toSMul.{u1, u1} (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u1} (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (Group.toDivInvMonoid.{u1} (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (LinearEquiv.automorphismGroup.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u1} R _inst_1 M _inst_2 _inst_3 (LinearEquiv.{u2, u2, u1, u1} R R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (RingHomInvPair.ids.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) M M _inst_2 _inst_2 _inst_3 _inst_3) (LinearEquiv.automorphismGroup.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3) (LinearEquiv.applyDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3) (LinearEquiv.apply_smulCommClass.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3)))) e v) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3)) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (fun (_x : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) => Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3)) (Module.Ray.map.{u2, u1, u1} R _inst_1 M _inst_2 _inst_3 M _inst_2 _inst_3 e) v)
Case conversion may be inaccurate. Consider using '#align module.ray.linear_equiv_smul_eq_map Module.Ray.linearEquiv_smul_eq_mapₓ'. -/
/-- The action via `linear_equiv.apply_distrib_mul_action` corresponds to `module.ray.map`. -/
@[simp]
theorem Module.Ray.linearEquiv_smul_eq_map (e : M ≃ₗ[R] M) (v : Module.Ray R M) :
    e • v = Module.Ray.map e v :=
  rfl
#align module.ray.linear_equiv_smul_eq_map Module.Ray.linearEquiv_smul_eq_map

/- warning: smul_ray_of_ne_zero -> smul_rayOfNeZero is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] {G : Type.{u3}} [_inst_7 : Group.{u3} G] [_inst_8 : DistribMulAction.{u3, u2} G M (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_7)) (AddCommMonoid.toAddMonoid.{u2} M _inst_2)] [_inst_9 : SMulCommClass.{u1, u3, u2} R G M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u3, u2} G M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} G M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} G M (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_7)) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8)))] (g : G) (v : M) (hv : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (SMul.smul.{u3, u2} G (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (MulAction.toHasSmul.{u3, u2} G (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_7)) (Module.Ray.mulAction.{u1, u2, u3} R _inst_1 M _inst_2 _inst_3 G _inst_7 _inst_8 _inst_9)) g (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 v hv)) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 (SMul.smul.{u3, u2} G M (SMulZeroClass.toHasSmul.{u3, u2} G M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} G M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} G M (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_7)) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8))) g v) (Iff.mpr (Ne.{succ u2} M (SMul.smul.{u3, u2} G M (SMulZeroClass.toHasSmul.{u3, u2} G M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (DistribSMul.toSmulZeroClass.{u3, u2} G M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)) (DistribMulAction.toDistribSMul.{u3, u2} G M (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_7)) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8))) g v) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))) (smul_ne_zero_iff_ne.{u3, u2} G M _inst_7 (AddCommMonoid.toAddMonoid.{u2} M _inst_2) _inst_8 g v) hv))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} M] [_inst_3 : Module.{u2, u3} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] {G : Type.{u1}} [_inst_7 : Group.{u1} G] [_inst_8 : DistribMulAction.{u1, u3} G M (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_7)) (AddCommMonoid.toAddMonoid.{u3} M _inst_2)] [_inst_9 : SMulCommClass.{u2, u1, u3} R G M (SMulZeroClass.toSMul.{u2, u3} R M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u3} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u3} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (Module.toMulActionWithZero.{u2, u3} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u1, u3} G M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribSMul.toSMulZeroClass.{u1, u3} G M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u3} G M (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_7)) (AddCommMonoid.toAddMonoid.{u3} M _inst_2) _inst_8)))] (g : G) (v : M) (hv : Ne.{succ u3} M v (OfNat.ofNat.{u3} M 0 (Zero.toOfNat0.{u3} M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2))))), Eq.{succ u3} (Module.Ray.{u2, u3} R _inst_1 M _inst_2 _inst_3) (HSMul.hSMul.{u1, u3, u3} G (Module.Ray.{u2, u3} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u2, u3} R _inst_1 M _inst_2 _inst_3) (instHSMul.{u1, u3} G (Module.Ray.{u2, u3} R _inst_1 M _inst_2 _inst_3) (MulAction.toSMul.{u1, u3} G (Module.Ray.{u2, u3} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_7)) (instMulActionRayToMonoidToDivInvMonoid.{u2, u3, u1} R _inst_1 M _inst_2 _inst_3 G _inst_7 _inst_8 _inst_9))) g (rayOfNeZero.{u2, u3} R _inst_1 M _inst_2 _inst_3 v hv)) (rayOfNeZero.{u2, u3} R _inst_1 M _inst_2 _inst_3 (HSMul.hSMul.{u1, u3, u3} G M M (instHSMul.{u1, u3} G M (SMulZeroClass.toSMul.{u1, u3} G M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribSMul.toSMulZeroClass.{u1, u3} G M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u3} G M (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_7)) (AddCommMonoid.toAddMonoid.{u3} M _inst_2) _inst_8)))) g v) (Iff.mpr (Ne.{succ u3} M (HSMul.hSMul.{u1, u3, u3} G M M (instHSMul.{u1, u3} G M (SMulZeroClass.toSMul.{u1, u3} G M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribSMul.toSMulZeroClass.{u1, u3} G M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2)) (DistribMulAction.toDistribSMul.{u1, u3} G M (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_7)) (AddCommMonoid.toAddMonoid.{u3} M _inst_2) _inst_8)))) g v) (OfNat.ofNat.{u3} M 0 (Zero.toOfNat0.{u3} M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2))))) (Ne.{succ u3} M v (OfNat.ofNat.{u3} M 0 (Zero.toOfNat0.{u3} M (AddMonoid.toZero.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_2))))) (smul_ne_zero_iff_ne.{u1, u3} G M _inst_7 (AddCommMonoid.toAddMonoid.{u3} M _inst_2) _inst_8 g v) hv))
Case conversion may be inaccurate. Consider using '#align smul_ray_of_ne_zero smul_rayOfNeZeroₓ'. -/
@[simp]
theorem smul_rayOfNeZero (g : G) (v : M) (hv) :
    g • rayOfNeZero R v hv = rayOfNeZero R (g • v) ((smul_ne_zero_iff_ne _).2 hv) :=
  rfl
#align smul_ray_of_ne_zero smul_rayOfNeZero

end Action

namespace Module.Ray

/- warning: module.ray.units_smul_of_pos -> Module.Ray.units_smul_of_pos is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (u : Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))), (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedCancelAddCommMonoid.toPartialOrder.{u1} R (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) R (HasLiftT.mk.{succ u1, succ u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) R (CoeTCₓ.coe.{succ u1, succ u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) R (coeBase.{succ u1, succ u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) R (Units.hasCoe.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))))) u)) -> (forall (v : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (SMul.smul.{u1, u2} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))))) (Module.Ray.mulAction.{u1, u2, u1} R _inst_1 M _inst_2 _inst_3 (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))))) (Units.distribMulAction.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M _inst_2) (Module.toDistribMulAction.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)) (Units.smulCommClass_right.{u1, u1, u2} R R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))) (smulCommClass_self.{u1, u2} R M (CommSemiring.toCommMonoid.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R _inst_1)) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2 _inst_3)))))) u v) v)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))), (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedSemiring.toPartialOrder.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) u)) -> (forall (v : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), Eq.{succ u1} (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R _inst_1 M _inst_2 _inst_3 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} M _inst_2) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} M _inst_2) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3)))) (smulCommClass_self.{u2, u1} R M (CommSemiring.toCommMonoid.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R _inst_1)) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2)) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2 _inst_3))))))) u v) v)
Case conversion may be inaccurate. Consider using '#align module.ray.units_smul_of_pos Module.Ray.units_smul_of_posₓ'. -/
/-- Scaling by a positive unit is a no-op. -/
theorem units_smul_of_pos (u : Rˣ) (hu : 0 < (u : R)) (v : Module.Ray R M) : u • v = v :=
  by
  induction v using Module.Ray.ind
  rw [smul_rayOfNeZero, ray_eq_iff]
  exact SameRay.sameRay_pos_smul_left _ hu
#align module.ray.units_smul_of_pos Module.Ray.units_smul_of_pos

/- warning: module.ray.some_ray_vector -> Module.Ray.someRayVector is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2], (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) -> (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2], (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) -> (RayVector.{u1, u2} R M (AddMonoid.toZero.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))
Case conversion may be inaccurate. Consider using '#align module.ray.some_ray_vector Module.Ray.someRayVectorₓ'. -/
/-- An arbitrary `ray_vector` giving a ray. -/
def someRayVector (x : Module.Ray R M) : RayVector R M :=
  Quotient.out x
#align module.ray.some_ray_vector Module.Ray.someRayVector

/- warning: module.ray.some_ray_vector_ray -> Module.Ray.someRayVector_ray is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (x : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), Eq.{succ u2} (Quotient.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) (RayVector.setoid.{u1, u2} R _inst_1 M _inst_2 _inst_3)) (Quotient.mk'.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2)))) (RayVector.setoid.{u1, u2} R _inst_1 M _inst_2 _inst_3) (Module.Ray.someRayVector.{u1, u2} R _inst_1 M _inst_2 _inst_3 x)) x
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (x : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), Eq.{succ u1} (Quotient.{succ u1} (RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))) (RayVector.Setoid.{u2, u1} R _inst_1 M _inst_2 _inst_3)) (Quotient.mk.{succ u1} (RayVector.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))) (RayVector.Setoid.{u2, u1} R _inst_1 M _inst_2 _inst_3) (Module.Ray.someRayVector.{u2, u1} R _inst_1 M _inst_2 _inst_3 x)) x
Case conversion may be inaccurate. Consider using '#align module.ray.some_ray_vector_ray Module.Ray.someRayVector_rayₓ'. -/
/-- The ray of `some_ray_vector`. -/
@[simp]
theorem someRayVector_ray (x : Module.Ray R M) : (⟦x.someRayVector⟧ : Module.Ray R M) = x :=
  Quotient.out_eq _
#align module.ray.some_ray_vector_ray Module.Ray.someRayVector_ray

#print Module.Ray.someVector /-
/-- An arbitrary nonzero vector giving a ray. -/
def someVector (x : Module.Ray R M) : M :=
  x.someRayVector
#align module.ray.some_vector Module.Ray.someVector
-/

/- warning: module.ray.some_vector_ne_zero -> Module.Ray.someVector_ne_zero is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (x : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), Ne.{succ u2} M (Module.Ray.someVector.{u1, u2} R _inst_1 M _inst_2 _inst_3 x) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M _inst_2))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (x : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), Ne.{succ u1} M (Module.Ray.someVector.{u2, u1} R _inst_1 M _inst_2 _inst_3 x) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_2))))
Case conversion may be inaccurate. Consider using '#align module.ray.some_vector_ne_zero Module.Ray.someVector_ne_zeroₓ'. -/
/-- `some_vector` is nonzero. -/
@[simp]
theorem someVector_ne_zero (x : Module.Ray R M) : x.someVector ≠ 0 :=
  x.someRayVector.property
#align module.ray.some_vector_ne_zero Module.Ray.someVector_ne_zero

/- warning: module.ray.some_vector_ray -> Module.Ray.someVector_ray is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommSemiring.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R _inst_1)) _inst_2] (x : Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3), Eq.{succ u2} (Module.Ray.{u1, u2} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u1, u2} R _inst_1 M _inst_2 _inst_3 (Module.Ray.someVector.{u1, u2} R _inst_1 M _inst_2 _inst_3 x) (Module.Ray.someVector_ne_zero.{u1, u2} R _inst_1 M _inst_2 _inst_3 x)) x
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommSemiring.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R _inst_1)) _inst_2] (x : Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3), Eq.{succ u1} (Module.Ray.{u2, u1} R _inst_1 M _inst_2 _inst_3) (rayOfNeZero.{u2, u1} R _inst_1 M _inst_2 _inst_3 (Module.Ray.someVector.{u2, u1} R _inst_1 M _inst_2 _inst_3 x) (Module.Ray.someVector_ne_zero.{u1, u2} R _inst_1 M _inst_2 _inst_3 x)) x
Case conversion may be inaccurate. Consider using '#align module.ray.some_vector_ray Module.Ray.someVector_rayₓ'. -/
/-- The ray of `some_vector`. -/
@[simp]
theorem someVector_ray (x : Module.Ray R M) : rayOfNeZero R _ x.someVector_ne_zero = x :=
  (congr_arg _ (Subtype.coe_eta _ _) : _).trans x.out_eq
#align module.ray.some_vector_ray Module.Ray.someVector_ray

end Module.Ray

end StrictOrderedCommSemiring

section StrictOrderedCommRing

variable {R : Type _} [StrictOrderedCommRing R]

variable {M N : Type _} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {x y : M}

/- warning: same_ray_neg_iff -> sameRay_neg_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) x) (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y)) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x y)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, Iff (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) x) (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y)) (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x y)
Case conversion may be inaccurate. Consider using '#align same_ray_neg_iff sameRay_neg_iffₓ'. -/
/-- `same_ray.neg` as an `iff`. -/
@[simp]
theorem sameRay_neg_iff : SameRay R (-x) (-y) ↔ SameRay R x y := by
  simp only [SameRay, neg_eq_zero, smul_neg, neg_inj]
#align same_ray_neg_iff sameRay_neg_iff

/- warning: same_ray.of_neg -> SameRay.of_neg is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) x) (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y)) -> (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x y)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) x) (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y)) -> (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x y)
Case conversion may be inaccurate. Consider using '#align same_ray.of_neg SameRay.of_negₓ'. -/
/- warning: same_ray.neg -> SameRay.neg is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x y) -> (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) x) (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x y) -> (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) x) (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y))
Case conversion may be inaccurate. Consider using '#align same_ray.neg SameRay.negₓ'. -/
alias sameRay_neg_iff ↔ SameRay.of_neg SameRay.neg
#align same_ray.of_neg SameRay.of_neg
#align same_ray.neg SameRay.neg

/- warning: same_ray_neg_swap -> sameRay_neg_swap is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) x) y) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, Iff (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) x) y) (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y))
Case conversion may be inaccurate. Consider using '#align same_ray_neg_swap sameRay_neg_swapₓ'. -/
theorem sameRay_neg_swap : SameRay R (-x) y ↔ SameRay R x (-y) := by rw [← sameRay_neg_iff, neg_neg]
#align same_ray_neg_swap sameRay_neg_swap

/- warning: eq_zero_of_same_ray_neg_smul_right -> eq_zero_of_sameRay_neg_smul_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} [_inst_6 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4))))] {r : R}, (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))) r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))))))) -> (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) r x)) -> (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} [_inst_6 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))] {r : R}, (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (StrictOrderedCommRing.toStrictOrderedRing.{u2} R _inst_1)))) r (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))))) -> (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))) r x)) -> (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))))))
Case conversion may be inaccurate. Consider using '#align eq_zero_of_same_ray_neg_smul_right eq_zero_of_sameRay_neg_smul_rightₓ'. -/
theorem eq_zero_of_sameRay_neg_smul_right [NoZeroSMulDivisors R M] {r : R} (hr : r < 0)
    (h : SameRay R x (r • x)) : x = 0 :=
  by
  rcases h with (rfl | h₀ | ⟨r₁, r₂, hr₁, hr₂, h⟩)
  · rfl
  · simpa [hr.ne] using h₀
  · rw [← sub_eq_zero, smul_smul, ← sub_smul, smul_eq_zero] at h
    refine' h.resolve_left (ne_of_gt <| sub_pos.2 _)
    exact (mul_neg_of_pos_of_neg hr₂ hr).trans hr₁
#align eq_zero_of_same_ray_neg_smul_right eq_zero_of_sameRay_neg_smul_right

/- warning: eq_zero_of_same_ray_self_neg -> eq_zero_of_sameRay_self_neg is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} [_inst_6 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4))))], (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 x (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) x)) -> (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} [_inst_6 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))], (SameRay.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 x (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) x)) -> (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))))))
Case conversion may be inaccurate. Consider using '#align eq_zero_of_same_ray_self_neg eq_zero_of_sameRay_self_negₓ'. -/
/-- If a vector is in the same ray as its negation, that vector is zero. -/
theorem eq_zero_of_sameRay_self_neg [NoZeroSMulDivisors R M] (h : SameRay R x (-x)) : x = 0 :=
  by
  nontriviality M; haveI : Nontrivial R := Module.nontrivial R M
  refine' eq_zero_of_sameRay_neg_smul_right (neg_lt_zero.2 (zero_lt_one' R)) _
  rwa [neg_one_smul]
#align eq_zero_of_same_ray_self_neg eq_zero_of_sameRay_self_neg

namespace RayVector

/-- Negating a nonzero vector. -/
instance {R : Type _} : Neg (RayVector R M) :=
  ⟨fun v => ⟨-v, neg_ne_zero.2 v.Prop⟩⟩

/- warning: ray_vector.coe_neg -> RayVector.coe_neg is a dubious translation:
lean 3 declaration is
  forall {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] {R : Type.{u2}} (v : RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))), Eq.{succ u1} M ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (HasLiftT.mk.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (CoeTCₓ.coe.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (coeBase.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (RayVector.coe.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2))))))))) (Neg.neg.{u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) (RayVector.hasNeg.{u1, u2} M _inst_2 R) v)) (Neg.neg.{u1} M (SubNegMonoid.toHasNeg.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (HasLiftT.mk.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (CoeTCₓ.coe.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (coeBase.{succ u1, succ u1} (RayVector.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) M (RayVector.coe.{u2, u1} R M (AddZeroClass.toHasZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2))))))))) v))
but is expected to have type
  forall {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] {R : Type.{u2}} (v : RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))), Eq.{succ u1} M (Subtype.val.{succ u1} M (fun (v : M) => Ne.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) (Neg.neg.{u1} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (RayVector.instNegRayVectorToZeroToNegZeroClassToSubNegZeroMonoidToSubtractionMonoidToDivisionAddCommMonoid.{u1, u2} M _inst_2 R) v)) (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Subtype.val.{succ u1} M (fun (v : M) => Ne.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) v))
Case conversion may be inaccurate. Consider using '#align ray_vector.coe_neg RayVector.coe_negₓ'. -/
/-- Negating a nonzero vector commutes with coercion to the underlying module. -/
@[simp, norm_cast]
theorem coe_neg {R : Type _} (v : RayVector R M) : ↑(-v) = -(v : M) :=
  rfl
#align ray_vector.coe_neg RayVector.coe_neg

/-- Negating a nonzero vector twice produces the original vector. -/
instance {R : Type _} : InvolutiveNeg (RayVector R M)
    where
  neg := Neg.neg
  neg_neg v := by rw [Subtype.ext_iff, coe_neg, coe_neg, neg_neg]

/- warning: ray_vector.equiv_neg_iff -> RayVector.equiv_neg_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {v₁ : RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))} {v₂ : RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))}, Iff (HasEquivₓ.Equiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (setoidHasEquiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (RayVector.setoid.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)) (Neg.neg.{u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (RayVector.hasNeg.{u2, u1} M _inst_2 R) v₁) (Neg.neg.{u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (RayVector.hasNeg.{u2, u1} M _inst_2 R) v₂)) (HasEquivₓ.Equiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (setoidHasEquiv.{succ u2} (RayVector.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) (RayVector.setoid.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)) v₁ v₂)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {v₁ : RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))} {v₂ : RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))}, Iff (HasEquiv.Equiv.{succ u1, 0} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (instHasEquiv.{succ u1} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (RayVector.Setoid.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)) (Neg.neg.{u1} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (RayVector.instNegRayVectorToZeroToNegZeroClassToSubNegZeroMonoidToSubtractionMonoidToDivisionAddCommMonoid.{u1, u2} M _inst_2 R) v₁) (Neg.neg.{u1} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (RayVector.instNegRayVectorToZeroToNegZeroClassToSubNegZeroMonoidToSubtractionMonoidToDivisionAddCommMonoid.{u1, u2} M _inst_2 R) v₂)) (HasEquiv.Equiv.{succ u1, 0} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (instHasEquiv.{succ u1} (RayVector.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))) (RayVector.Setoid.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)) v₁ v₂)
Case conversion may be inaccurate. Consider using '#align ray_vector.equiv_neg_iff RayVector.equiv_neg_iffₓ'. -/
/-- If two nonzero vectors are equivalent, so are their negations. -/
@[simp]
theorem equiv_neg_iff {v₁ v₂ : RayVector R M} : -v₁ ≈ -v₂ ↔ v₁ ≈ v₂ :=
  sameRay_neg_iff
#align ray_vector.equiv_neg_iff RayVector.equiv_neg_iff

end RayVector

variable (R)

/-- Negating a ray. -/
instance : Neg (Module.Ray R M) :=
  ⟨Quotient.map (fun v => -v) fun v₁ v₂ => RayVector.equiv_neg_iff.2⟩

/- warning: neg_ray_of_ne_zero -> neg_rayOfNeZero is a dubious translation:
lean 3 declaration is
  forall (R : Type.{u1}) [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] (v : M) (h : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))), Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.hasNeg.{u1, u2} R _inst_1 M _inst_2 _inst_4) (rayOfNeZero.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 v h)) (rayOfNeZero.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) v) (Iff.mpr (Ne.{succ u2} M (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (SubtractionMonoid.toSubNegMonoid.{u2} M (AddGroup.toSubtractionMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))) v) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (SubtractionMonoid.toSubNegMonoid.{u2} M (AddGroup.toSubtractionMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))) (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (SubtractionMonoid.toSubNegMonoid.{u2} M (AddGroup.toSubtractionMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))) (neg_ne_zero.{u2} M (AddGroup.toSubtractionMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)) v) h))
but is expected to have type
  forall (R : Type.{u1}) [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] (v : M) (h : Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))), Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u1, u2} R _inst_1 M _inst_2 _inst_4) (rayOfNeZero.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 v h)) (rayOfNeZero.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Neg.neg.{u2} M (NegZeroClass.toNeg.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) v) (Iff.mpr (Ne.{succ u2} M (Neg.neg.{u2} M (NegZeroClass.toNeg.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) v) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) (neg_ne_zero.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)) v) h))
Case conversion may be inaccurate. Consider using '#align neg_ray_of_ne_zero neg_rayOfNeZeroₓ'. -/
/-- The ray given by the negation of a nonzero vector. -/
@[simp]
theorem neg_rayOfNeZero (v : M) (h : v ≠ 0) :
    -rayOfNeZero R _ h = rayOfNeZero R (-v) (neg_ne_zero.2 h) :=
  rfl
#align neg_ray_of_ne_zero neg_rayOfNeZero

namespace Module.Ray

variable {R}

/-- Negating a ray twice produces the original ray. -/
instance : InvolutiveNeg (Module.Ray R M)
    where
  neg := Neg.neg
  neg_neg x := Quotient.ind (fun a => congr_arg Quotient.mk' <| neg_neg _) x

variable {R M}

/- warning: module.ray.ne_neg_self -> Module.Ray.ne_neg_self is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_6 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4))))] (x : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4), Ne.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) x (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.hasNeg.{u1, u2} R _inst_1 M _inst_2 _inst_4) x)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_6 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))] (x : Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4), Ne.{succ u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) x (Neg.neg.{u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u2, u1} R _inst_1 M _inst_2 _inst_4) x)
Case conversion may be inaccurate. Consider using '#align module.ray.ne_neg_self Module.Ray.ne_neg_selfₓ'. -/
/-- A ray does not equal its own negation. -/
theorem ne_neg_self [NoZeroSMulDivisors R M] (x : Module.Ray R M) : x ≠ -x :=
  by
  induction' x using Module.Ray.ind with x hx
  rw [neg_rayOfNeZero, Ne.def, ray_eq_iff]
  exact mt eq_zero_of_sameRay_self_neg hx
#align module.ray.ne_neg_self Module.Ray.ne_neg_self

/- warning: module.ray.neg_units_smul -> Module.Ray.neg_units_smul is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] (u : Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4), Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (smulCommClass_self.{u1, u2} R M (CommRing.toCommMonoid.{u1} R (StrictOrderedCommRing.toCommRing.{u1} R _inst_1)) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))))) (Neg.neg.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.hasNeg.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (NonUnitalNonAssocRing.toHasDistribNeg.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))))) u) v) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.hasNeg.{u1, u2} R _inst_1 M _inst_2 _inst_4) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (smulCommClass_self.{u1, u2} R M (CommRing.toCommMonoid.{u1} R (StrictOrderedCommRing.toCommRing.{u1} R _inst_1)) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))))) u v))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (v : Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4), Eq.{succ u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (smulCommClass_self.{u2, u1} R M (CommRing.toCommMonoid.{u2} R (StrictOrderedCommRing.toCommRing.{u2} R _inst_1)) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))))) (Neg.neg.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instNegUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (NonUnitalNonAssocRing.toHasDistribNeg.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (StrictOrderedRing.toRing.{u2} R (StrictOrderedCommRing.toStrictOrderedRing.{u2} R _inst_1)))))) u) v) (Neg.neg.{u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u2, u1} R _inst_1 M _inst_2 _inst_4) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (smulCommClass_self.{u2, u1} R M (CommRing.toCommMonoid.{u2} R (StrictOrderedCommRing.toCommRing.{u2} R _inst_1)) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))))) u v))
Case conversion may be inaccurate. Consider using '#align module.ray.neg_units_smul Module.Ray.neg_units_smulₓ'. -/
theorem neg_units_smul (u : Rˣ) (v : Module.Ray R M) : -u • v = -(u • v) :=
  by
  induction v using Module.Ray.ind
  simp only [smul_rayOfNeZero, Units.smul_def, Units.val_neg, neg_smul, neg_rayOfNeZero]
#align module.ray.neg_units_smul Module.Ray.neg_units_smul

/- warning: module.ray.units_smul_of_neg -> Module.Ray.units_smul_of_neg is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] (u : Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))), (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) R (HasLiftT.mk.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) R (CoeTCₓ.coe.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) R (coeBase.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) R (Units.hasCoe.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) u) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))))))) -> (forall (v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4), Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))) (smulCommClass_self.{u1, u2} R M (CommRing.toCommMonoid.{u1} R (StrictOrderedCommRing.toCommRing.{u1} R _inst_1)) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4)))))) u v) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.hasNeg.{u1, u2} R _inst_1 M _inst_2 _inst_4) v))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : StrictOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_4 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))), (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (StrictOrderedCommRing.toStrictOrderedRing.{u2} R _inst_1)))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) u) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))))) -> (forall (v : Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4), Eq.{succ u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4)))) (smulCommClass_self.{u2, u1} R M (CommRing.toCommMonoid.{u2} R (StrictOrderedCommRing.toCommRing.{u2} R _inst_1)) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1)))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4))))))) u v) (Neg.neg.{u1} (Module.Ray.{u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u2} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u2, u1} R _inst_1 M _inst_2 _inst_4) v))
Case conversion may be inaccurate. Consider using '#align module.ray.units_smul_of_neg Module.Ray.units_smul_of_negₓ'. -/
/-- Scaling by a negative unit is negation. -/
theorem units_smul_of_neg (u : Rˣ) (hu : (u : R) < 0) (v : Module.Ray R M) : u • v = -v :=
  by
  rw [← neg_inj, neg_neg, ← neg_units_smul, units_smul_of_pos]
  rwa [Units.val_neg, Right.neg_pos_iff]
#align module.ray.units_smul_of_neg Module.Ray.units_smul_of_neg

/- warning: module.ray.map_neg -> Module.Ray.map_neg is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : StrictOrderedCommRing.{u1} R] {M : Type.{u2}} {N : Type.{u3}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : AddCommGroup.{u3} N] [_inst_4 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_5 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u3} N _inst_3)] (f : LinearEquiv.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1))))) (RingHomInvPair.ids.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) (RingHomInvPair.ids.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (StrictOrderedCommRing.toStrictOrderedRing.{u1} R _inst_1)))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_4 _inst_5) (v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4), Eq.{succ u3} (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5) (coeFn.{max 1 (max (succ u2) (succ u3)) (succ u3) (succ u2), max (succ u2) (succ u3)} (Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (fun (_x : Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) => (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) -> (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (Equiv.hasCoeToFun.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (Module.Ray.map.{u1, u2, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5 f) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.hasNeg.{u1, u2} R _inst_1 M _inst_2 _inst_4) v)) (Neg.neg.{u3} (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5) (Module.Ray.hasNeg.{u1, u3} R _inst_1 N _inst_3 _inst_5) (coeFn.{max 1 (max (succ u2) (succ u3)) (succ u3) (succ u2), max (succ u2) (succ u3)} (Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (fun (_x : Equiv.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) => (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) -> (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (Equiv.hasCoeToFun.{succ u2, succ u3} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u1, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5)) (Module.Ray.map.{u1, u2, u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 N (AddCommGroup.toAddCommMonoid.{u3} N _inst_3) _inst_5 f) v))
but is expected to have type
  forall {R : Type.{u3}} [_inst_1 : StrictOrderedCommRing.{u3} R] {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : AddCommGroup.{u1} N] [_inst_4 : Module.{u3, u2} R M (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_5 : Module.{u3, u1} R N (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))) (AddCommGroup.toAddCommMonoid.{u1} N _inst_3)] (f : LinearEquiv.{u3, u3, u2, u1} R R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))) (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))))) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1))))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1)))) (RingHomInvPair.ids.{u3} R (StrictOrderedSemiring.toSemiring.{u3} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u3} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1)))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_4 _inst_5) (v : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5) (Neg.neg.{u2} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u3, u2} R _inst_1 M _inst_2 _inst_4) v)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5)) (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (fun (_x : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5)) (Module.Ray.map.{u3, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5 f) (Neg.neg.{u2} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u3, u2} R _inst_1 M _inst_2 _inst_4) v)) (Neg.neg.{u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5) v) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u3, u1} R _inst_1 N _inst_3 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5)) (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (fun (_x : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) => Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} (Module.Ray.{u3, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4) (Module.Ray.{u3, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5)) (Module.Ray.map.{u3, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u3} R _inst_1) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_4 N (AddCommGroup.toAddCommMonoid.{u1} N _inst_3) _inst_5 f) v))
Case conversion may be inaccurate. Consider using '#align module.ray.map_neg Module.Ray.map_negₓ'. -/
@[simp]
protected theorem map_neg (f : M ≃ₗ[R] N) (v : Module.Ray R M) : map f (-v) = -map f v :=
  by
  induction' v using Module.Ray.ind with g hg
  simp
#align module.ray.map_neg Module.Ray.map_neg

end Module.Ray

end StrictOrderedCommRing

section LinearOrderedCommRing

variable {R : Type _} [LinearOrderedCommRing R]

variable {M : Type _} [AddCommGroup M] [Module R M]

/- warning: same_ray_of_mem_orbit -> sameRay_of_mem_orbit is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {v₁ : M} {v₂ : M}, (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) v₁ (MulAction.orbit.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Subgroup.setLike.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))) (Units.posSubgroup.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) M (DivInvMonoid.toMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Subgroup.setLike.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))) (Units.posSubgroup.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (Group.toDivInvMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Subgroup.setLike.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))) (Units.posSubgroup.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (Subgroup.toGroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.posSubgroup.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (Subgroup.mulAction.{u1, u2} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Units.group.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) M (Units.mulAction.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))) (Units.posSubgroup.{u1} R (LinearOrderedRing.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) v₂)) -> (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v₁ v₂)
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {v₁ : M} {v₂ : M}, (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) v₁ (MulAction.orbit.{u1, u2} (Subtype.{succ u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (fun (x : Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) => Membership.mem.{u1, u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))))))) (SetLike.instMembership.{u1, u1} (Subgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))))))) (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Subgroup.instSetLikeSubgroup.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))))) x (Units.posSubgroup.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) M (Submonoid.toMonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))))) (Subgroup.toSubmonoid.{u1} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.posSubgroup.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (Subgroup.instMulActionSubtypeMemSubgroupInstMembershipInstSetLikeSubgroupToMonoidToMonoidToDivInvMonoidToSubmonoid.{u1, u2} (Units.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) (Units.instGroupUnits.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))))) M (Units.instMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u1, u2} R M (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))))) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))) (Units.posSubgroup.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) v₂)) -> (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v₁ v₂)
Case conversion may be inaccurate. Consider using '#align same_ray_of_mem_orbit sameRay_of_mem_orbitₓ'. -/
/-- `same_ray` follows from membership of `mul_action.orbit` for the `units.pos_subgroup`. -/
theorem sameRay_of_mem_orbit {v₁ v₂ : M} (h : v₁ ∈ MulAction.orbit (Units.posSubgroup R) v₂) :
    SameRay R v₁ v₂ :=
  by
  rcases h with ⟨⟨r, hr : 0 < (r : R)⟩, rfl : r • v₂ = v₁⟩
  exact SameRay.sameRay_pos_smul_left _ hr
#align same_ray_of_mem_orbit sameRay_of_mem_orbit

/- warning: units_inv_smul -> units_inv_smul is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] (u : Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3), Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (smulCommClass_self.{u1, u2} R M (LinearOrderedCommRing.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))))) (Inv.inv.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.hasInv.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) u) v) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (smulCommClass_self.{u1, u2} R M (LinearOrderedCommRing.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))))) u v)
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (v : Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3), Eq.{succ u1} (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (smulCommClass_self.{u2, u1} R M (LinearOrderedCommRing.toCommMonoid.{u2} R _inst_1) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))))) (Inv.inv.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instInvUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) u) v) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (smulCommClass_self.{u2, u1} R M (LinearOrderedCommRing.toCommMonoid.{u2} R _inst_1) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))))) u v)
Case conversion may be inaccurate. Consider using '#align units_inv_smul units_inv_smulₓ'. -/
/-- Scaling by an inverse unit is the same as scaling by itself. -/
@[simp]
theorem units_inv_smul (u : Rˣ) (v : Module.Ray R M) : u⁻¹ • v = u • v :=
  calc
    u⁻¹ • v = (u * u) • u⁻¹ • v :=
      Eq.symm <| (u⁻¹ • v).units_smul_of_pos _ <| mul_self_pos.2 u.NeZero
    _ = u • v := by rw [mul_smul, smul_inv_smul]

#align units_inv_smul units_inv_smul

section

variable [NoZeroSMulDivisors R M]

/- warning: same_ray_smul_right_iff -> sameRay_smul_right_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v)) (Or (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 v (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r v)) (Or (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))))) r) (Eq.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_smul_right_iff sameRay_smul_right_iffₓ'. -/
@[simp]
theorem sameRay_smul_right_iff {v : M} {r : R} : SameRay R v (r • v) ↔ 0 ≤ r ∨ v = 0 :=
  ⟨fun hrv => or_iff_not_imp_left.2 fun hr => eq_zero_of_sameRay_neg_smul_right (not_le.1 hr) hrv,
    or_imp.2 ⟨SameRay.sameRay_nonneg_smul_right v, fun h => h.symm ▸ SameRay.zero_left _⟩⟩
#align same_ray_smul_right_iff sameRay_smul_right_iff

/- warning: same_ray_smul_right_iff_of_ne -> sameRay_smul_right_iff_of_ne is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (forall {r : R}, (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) -> (Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))) r)))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (forall {r : R}, (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) -> (Iff (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) r)))
Case conversion may be inaccurate. Consider using '#align same_ray_smul_right_iff_of_ne sameRay_smul_right_iff_of_neₓ'. -/
/-- A nonzero vector is in the same ray as a multiple of itself if and only if that multiple
is positive. -/
theorem sameRay_smul_right_iff_of_ne {v : M} (hv : v ≠ 0) {r : R} (hr : r ≠ 0) :
    SameRay R v (r • v) ↔ 0 < r := by
  simp only [sameRay_smul_right_iff, hv, or_false_iff, hr.symm.le_iff_lt]
#align same_ray_smul_right_iff_of_ne sameRay_smul_right_iff_of_ne

/- warning: same_ray_smul_left_iff -> sameRay_smul_left_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v) v) (Or (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r v) v) (Or (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))))) r) (Eq.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_smul_left_iff sameRay_smul_left_iffₓ'. -/
@[simp]
theorem sameRay_smul_left_iff {v : M} {r : R} : SameRay R (r • v) v ↔ 0 ≤ r ∨ v = 0 :=
  SameRay.sameRay_comm.trans sameRay_smul_right_iff
#align same_ray_smul_left_iff sameRay_smul_left_iff

/- warning: same_ray_smul_left_iff_of_ne -> sameRay_smul_left_iff_of_ne is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (forall {r : R}, (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) -> (Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v) v) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))) r)))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (forall {r : R}, (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) -> (Iff (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r v) v) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) r)))
Case conversion may be inaccurate. Consider using '#align same_ray_smul_left_iff_of_ne sameRay_smul_left_iff_of_neₓ'. -/
/-- A multiple of a nonzero vector is in the same ray as that vector if and only if that multiple
is positive. -/
theorem sameRay_smul_left_iff_of_ne {v : M} (hv : v ≠ 0) {r : R} (hr : r ≠ 0) :
    SameRay R (r • v) v ↔ 0 < r :=
  SameRay.sameRay_comm.trans (sameRay_smul_right_iff_of_ne hv hr)
#align same_ray_smul_left_iff_of_ne sameRay_smul_left_iff_of_ne

/- warning: same_ray_neg_smul_right_iff -> sameRay_neg_smul_right_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) v) (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v)) (Or (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) (Eq.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) v) (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r v)) (Or (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) r (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1)))))))) (Eq.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_neg_smul_right_iff sameRay_neg_smul_right_iffₓ'. -/
@[simp]
theorem sameRay_neg_smul_right_iff {v : M} {r : R} : SameRay R (-v) (r • v) ↔ r ≤ 0 ∨ v = 0 := by
  rw [← sameRay_neg_iff, neg_neg, ← neg_smul, sameRay_smul_right_iff, neg_nonneg]
#align same_ray_neg_smul_right_iff sameRay_neg_smul_right_iff

/- warning: same_ray_neg_smul_right_iff_of_ne -> sameRay_neg_smul_right_iff_of_ne is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) -> (Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) v) (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) -> (Iff (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Neg.neg.{u2} M (NegZeroClass.toNeg.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) v) (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_neg_smul_right_iff_of_ne sameRay_neg_smul_right_iff_of_neₓ'. -/
theorem sameRay_neg_smul_right_iff_of_ne {v : M} {r : R} (hv : v ≠ 0) (hr : r ≠ 0) :
    SameRay R (-v) (r • v) ↔ r < 0 := by
  simp only [sameRay_neg_smul_right_iff, hv, or_false_iff, hr.le_iff_lt]
#align same_ray_neg_smul_right_iff_of_ne sameRay_neg_smul_right_iff_of_ne

/- warning: same_ray_neg_smul_left_iff -> sameRay_neg_smul_left_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v) (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) v)) (Or (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) (Eq.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {v : M} {r : R}, Iff (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r v) (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) v)) (Or (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) r (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1)))))))) (Eq.{succ u1} M v (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_neg_smul_left_iff sameRay_neg_smul_left_iffₓ'. -/
@[simp]
theorem sameRay_neg_smul_left_iff {v : M} {r : R} : SameRay R (r • v) (-v) ↔ r ≤ 0 ∨ v = 0 :=
  SameRay.sameRay_comm.trans sameRay_neg_smul_right_iff
#align same_ray_neg_smul_left_iff sameRay_neg_smul_left_iff

/- warning: same_ray_neg_smul_left_iff_of_ne -> sameRay_neg_smul_left_iff_of_ne is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))) -> (Iff (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r v) (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) r (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {v : M} {r : R}, (Ne.{succ u2} M v (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Ne.{succ u1} R r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) -> (Iff (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r v) (Neg.neg.{u2} M (NegZeroClass.toNeg.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) r (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} R (IsDomain.toCancelCommMonoidWithZero.{u1} R (StrictOrderedCommSemiring.toCommSemiring.{u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u1} R _inst_1))) (LinearOrderedRing.isDomain.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray_neg_smul_left_iff_of_ne sameRay_neg_smul_left_iff_of_neₓ'. -/
theorem sameRay_neg_smul_left_iff_of_ne {v : M} {r : R} (hv : v ≠ 0) (hr : r ≠ 0) :
    SameRay R (r • v) (-v) ↔ r < 0 :=
  SameRay.sameRay_comm.trans <| sameRay_neg_smul_right_iff_of_ne hv hr
#align same_ray_neg_smul_left_iff_of_ne sameRay_neg_smul_left_iff_of_ne

/- warning: units_smul_eq_self_iff -> units_smul_eq_self_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {u : Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))} {v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3}, Iff (Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (smulCommClass_self.{u1, u2} R M (LinearOrderedCommRing.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))))) u v) v) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (HasLiftT.mk.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (CoeTCₓ.coe.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (coeBase.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (Units.hasCoe.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) u))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))} {v : Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3}, Iff (Eq.{succ u1} (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (smulCommClass_self.{u2, u1} R M (LinearOrderedCommRing.toCommMonoid.{u2} R _inst_1) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))))) u v) v) (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) u))
Case conversion may be inaccurate. Consider using '#align units_smul_eq_self_iff units_smul_eq_self_iffₓ'. -/
@[simp]
theorem units_smul_eq_self_iff {u : Rˣ} {v : Module.Ray R M} : u • v = v ↔ (0 : R) < u :=
  by
  induction' v using Module.Ray.ind with v hv
  simp only [smul_rayOfNeZero, ray_eq_iff, Units.smul_def, sameRay_smul_left_iff_of_ne hv u.ne_zero]
#align units_smul_eq_self_iff units_smul_eq_self_iff

/- warning: units_smul_eq_neg_iff -> units_smul_eq_neg_iff is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {u : Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))} {v : Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3}, Iff (Eq.{succ u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (SMul.smul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (MulAction.toHasSmul.{u1, u2} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Group.toDivInvMonoid.{u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))) (Module.Ray.mulAction.{u1, u2, u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.group.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (Units.distribMulAction.{u1, u2} R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)) (Module.toDistribMulAction.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u1, u1, u2} R R M (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (StrictOrderedSemiring.toSemiring.{u1} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u1} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) (smulCommClass_self.{u1, u2} R M (LinearOrderedCommRing.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))))) u v) (Neg.neg.{u2} (Module.Ray.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3) (Module.Ray.hasNeg.{u1, u2} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1) M _inst_2 _inst_3) v)) (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (HasLiftT.mk.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (CoeTCₓ.coe.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (coeBase.{succ u1, succ u1} (Units.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) R (Units.hasCoe.{u1} R (Ring.toMonoid.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) u) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))} {v : Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3}, Iff (Eq.{succ u1} (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (HSMul.hSMul.{u2, u1, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (instHSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (MulAction.toSMul.{u2, u1} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (DivInvMonoid.toMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Group.toDivInvMonoid.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))))) (instMulActionRayToMonoidToDivInvMonoid.{u2, u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instGroupUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))))) (Units.instDistribMulActionUnitsToMonoidToDivInvMonoidInstGroupUnits.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)) (Units.smulCommClass_right.{u2, u2, u1} R R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (SMulZeroClass.toSMul.{u2, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (StrictOrderedCommSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (SMulZeroClass.toSMul.{u2, u1} R M (AddZeroClass.toZero.{u1} M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)))) (DistribSMul.toSMulZeroClass.{u2, u1} R M (AddMonoid.toAddZeroClass.{u1} M (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2))) (DistribMulAction.toDistribSMul.{u2, u1} R M (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) (AddCommMonoid.toAddMonoid.{u1} M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)) (Module.toDistribMulAction.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3)))) (smulCommClass_self.{u2, u1} R M (LinearOrderedCommRing.toCommMonoid.{u2} R _inst_1) (MulActionWithZero.toMulAction.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))))) u v) (Neg.neg.{u1} (Module.Ray.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3) (instNegRayToStrictOrderedCommSemiringToAddCommMonoid.{u2, u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u2} R _inst_1) M _inst_2 _inst_3) v)) (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))))) u) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align units_smul_eq_neg_iff units_smul_eq_neg_iffₓ'. -/
@[simp]
theorem units_smul_eq_neg_iff {u : Rˣ} {v : Module.Ray R M} : u • v = -v ↔ ↑u < (0 : R) := by
  rw [← neg_inj, neg_neg, ← Module.Ray.neg_units_smul, units_smul_eq_self_iff, Units.val_neg,
    neg_pos]
#align units_smul_eq_neg_iff units_smul_eq_neg_iff

/- warning: same_ray_or_same_ray_neg_iff_not_linear_independent -> sameRay_or_sameRay_neg_iff_not_linearIndependent is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {x : M} {y : M}, Iff (Or (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y))) (Not (LinearIndependent.{0, u1, u2} (Fin (Nat.succ (Nat.succ (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))))) R M (Matrix.vecCons.{u2} M (Nat.succ (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) x (Matrix.vecCons.{u2} M (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) y (Matrix.vecEmpty.{u2} M))) (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {x : M} {y : M}, Iff (Or (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y))) (Not (LinearIndependent.{0, u2, u1} (Fin (Nat.succ (Nat.succ (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) R M (Matrix.vecCons.{u1} M (Nat.succ (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) x (Matrix.vecCons.{u1} M (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) y (Matrix.vecEmpty.{u1} M))) (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))
Case conversion may be inaccurate. Consider using '#align same_ray_or_same_ray_neg_iff_not_linear_independent sameRay_or_sameRay_neg_iff_not_linearIndependentₓ'. -/
/-- Two vectors are in the same ray, or the first is in the same ray as the negation of the
second, if and only if they are not linearly independent. -/
theorem sameRay_or_sameRay_neg_iff_not_linearIndependent {x y : M} :
    SameRay R x y ∨ SameRay R x (-y) ↔ ¬LinearIndependent R ![x, y] :=
  by
  by_cases hx : x = 0; · simp [hx, fun h : LinearIndependent R ![0, y] => h.NeZero 0 rfl]
  by_cases hy : y = 0; · simp [hy, fun h : LinearIndependent R ![x, 0] => h.NeZero 1 rfl]
  simp_rw [Fintype.not_linearIndependent_iff, Fin.sum_univ_two, Fin.exists_fin_two]
  refine' ⟨fun h => _, fun h => _⟩
  · rcases h with ((hx0 | hy0 | ⟨r₁, r₂, hr₁, hr₂, h⟩) | (hx0 | hy0 | ⟨r₁, r₂, hr₁, hr₂, h⟩))
    · exact False.elim (hx hx0)
    · exact False.elim (hy hy0)
    · refine' ⟨![r₁, -r₂], _⟩
      simp [h, hr₁.ne.symm]
    · exact False.elim (hx hx0)
    · exact False.elim (hy (neg_eq_zero.1 hy0))
    · refine' ⟨![r₁, r₂], _⟩
      simp [h, hr₁.ne.symm]
  · rcases h with ⟨m, hm, hmne⟩
    change m 0 • x + m 1 • y = 0 at hm
    rw [add_eq_zero_iff_eq_neg] at hm
    rcases lt_trichotomy (m 0) 0 with (hm0 | hm0 | hm0) <;>
      rcases lt_trichotomy (m 1) 0 with (hm1 | hm1 | hm1)
    · refine'
        Or.inr (Or.inr (Or.inr ⟨-m 0, -m 1, Left.neg_pos_iff.2 hm0, Left.neg_pos_iff.2 hm1, _⟩))
      simp [hm]
    · exfalso
      simpa [hm1, hx, hm0.ne] using hm
    · refine' Or.inl (Or.inr (Or.inr ⟨-m 0, m 1, Left.neg_pos_iff.2 hm0, hm1, _⟩))
      simp [hm]
    · exfalso
      simpa [hm0, hy, hm1.ne] using hm
    · refine' False.elim (not_and_or.2 hmne ⟨hm0, hm1⟩)
    · exfalso
      simpa [hm0, hy, hm1.ne.symm] using hm
    · refine' Or.inl (Or.inr (Or.inr ⟨m 0, -m 1, hm0, Left.neg_pos_iff.2 hm1, _⟩))
      simp [hm]
    · exfalso
      simpa [hm1, hx, hm0.ne.symm] using hm
    · refine' Or.inr (Or.inr (Or.inr ⟨m 0, m 1, hm0, hm1, _⟩))
      simp [hm]
#align same_ray_or_same_ray_neg_iff_not_linear_independent sameRay_or_sameRay_neg_iff_not_linearIndependent

/- warning: same_ray_or_ne_zero_and_same_ray_neg_iff_not_linear_independent -> sameRay_or_ne_zero_and_sameRay_neg_iff_not_linearIndependent is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedCommRing.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))) (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))] {x : M} {y : M}, Iff (Or (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (And (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) (And (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x (Neg.neg.{u2} M (SubNegMonoid.toHasNeg.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))) y))))) (Not (LinearIndependent.{0, u1, u2} (Fin (Nat.succ (Nat.succ (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))))) R M (Matrix.vecCons.{u2} M (Nat.succ (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) x (Matrix.vecCons.{u2} M (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) y (Matrix.vecEmpty.{u2} M))) (Ring.toSemiring.{u1} R (StrictOrderedRing.toRing.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedCommRing.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] [_inst_4 : NoZeroSMulDivisors.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CancelCommMonoidWithZero.toCommMonoidWithZero.{u2} R (IsDomain.toCancelCommMonoidWithZero.{u2} R (StrictOrderedCommSemiring.toCommSemiring.{u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))) (LinearOrderedRing.isDomain.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))] {x : M} {y : M}, Iff (Or (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) (And (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) (And (Ne.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x (Neg.neg.{u1} M (NegZeroClass.toNeg.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) y))))) (Not (LinearIndependent.{0, u2, u1} (Fin (Nat.succ (Nat.succ (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) R M (Matrix.vecCons.{u1} M (Nat.succ (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) x (Matrix.vecCons.{u1} M (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) y (Matrix.vecEmpty.{u1} M))) (StrictOrderedSemiring.toSemiring.{u2} R (LinearOrderedSemiring.toStrictOrderedSemiring.{u2} R (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u2} R (LinearOrderedCommRing.toLinearOrderedCommSemiring.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))
Case conversion may be inaccurate. Consider using '#align same_ray_or_ne_zero_and_same_ray_neg_iff_not_linear_independent sameRay_or_ne_zero_and_sameRay_neg_iff_not_linearIndependentₓ'. -/
/-- Two vectors are in the same ray, or they are nonzero and the first is in the same ray as the
negation of the second, if and only if they are not linearly independent. -/
theorem sameRay_or_ne_zero_and_sameRay_neg_iff_not_linearIndependent {x y : M} :
    SameRay R x y ∨ x ≠ 0 ∧ y ≠ 0 ∧ SameRay R x (-y) ↔ ¬LinearIndependent R ![x, y] :=
  by
  rw [← sameRay_or_sameRay_neg_iff_not_linearIndependent]
  by_cases hx : x = 0; · simp [hx]
  by_cases hy : y = 0 <;> simp [hx, hy]
#align same_ray_or_ne_zero_and_same_ray_neg_iff_not_linear_independent sameRay_or_ne_zero_and_sameRay_neg_iff_not_linearIndependent

end

end LinearOrderedCommRing

namespace SameRay

variable {R : Type _} [LinearOrderedField R]

variable {M : Type _} [AddCommGroup M] [Module R M] {x y v₁ v₂ : M}

/- warning: same_ray.exists_pos_left -> SameRay.exists_pos_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) -> (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r x) y)))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) -> (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Ne.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Exists.{succ u2} R (fun (r : R) => And (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) r) (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r x) y)))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_pos_left SameRay.exists_pos_leftₓ'. -/
theorem exists_pos_left (h : SameRay R x y) (hx : x ≠ 0) (hy : y ≠ 0) :
    ∃ r : R, 0 < r ∧ r • x = y :=
  let ⟨r₁, r₂, hr₁, hr₂, h⟩ := h.exists_pos hx hy
  ⟨r₂⁻¹ * r₁, mul_pos (inv_pos.2 hr₂) hr₁, by rw [mul_smul, h, inv_smul_smul₀ hr₂.ne']⟩
#align same_ray.exists_pos_left SameRay.exists_pos_left

/- warning: same_ray.exists_pos_right -> SameRay.exists_pos_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) -> (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r y))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) -> (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Ne.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Exists.{succ u2} R (fun (r : R) => And (LT.lt.{u2} R (Preorder.toLT.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) r) (Eq.{succ u1} M x (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r y))))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_pos_right SameRay.exists_pos_rightₓ'. -/
theorem exists_pos_right (h : SameRay R x y) (hx : x ≠ 0) (hy : y ≠ 0) :
    ∃ r : R, 0 < r ∧ x = r • y :=
  (h.symm.exists_pos_left hy hx).imp fun _ => And.imp_right Eq.symm
#align same_ray.exists_pos_right SameRay.exists_pos_right

/- warning: same_ray.exists_nonneg_left -> SameRay.exists_nonneg_left is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) -> (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r x) y)))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) -> (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Exists.{succ u2} R (fun (r : R) => And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) r) (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r x) y)))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_nonneg_left SameRay.exists_nonneg_leftₓ'. -/
/-- If a vector `v₂` is on the same ray as a nonzero vector `v₁`, then it is equal to `c • v₁` for
some nonnegative `c`. -/
theorem exists_nonneg_left (h : SameRay R x y) (hx : x ≠ 0) : ∃ r : R, 0 ≤ r ∧ r • x = y :=
  by
  obtain rfl | hy := eq_or_ne y 0
  · exact ⟨0, le_rfl, zero_smul _ _⟩
  · exact (h.exists_pos_left hx hy).imp fun _ => And.imp_left le_of_lt
#align same_ray.exists_nonneg_left SameRay.exists_nonneg_left

/- warning: same_ray.exists_nonneg_right -> SameRay.exists_nonneg_right is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r y))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {x : M} {y : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 x y) -> (Ne.{succ u1} M y (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2)))))))) -> (Exists.{succ u2} R (fun (r : R) => And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) r) (Eq.{succ u1} M x (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) r y))))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_nonneg_right SameRay.exists_nonneg_rightₓ'. -/
/-- If a vector `v₁` is on the same ray as a nonzero vector `v₂`, then it is equal to `c • v₂` for
some nonnegative `c`. -/
theorem exists_nonneg_right (h : SameRay R x y) (hy : y ≠ 0) : ∃ r : R, 0 ≤ r ∧ x = r • y :=
  (h.symm.exists_nonneg_left hy).imp fun _ => And.imp_right Eq.symm
#align same_ray.exists_nonneg_right SameRay.exists_nonneg_right

/- warning: same_ray.exists_eq_smul_add -> SameRay.exists_eq_smul_add is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {v₁ : M} {v₂ : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v₁ v₂) -> (Exists.{succ u1} R (fun (a : R) => Exists.{succ u1} R (fun (b : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) a) (And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) b) (And (Eq.{succ u1} R (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))) a b) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) (And (Eq.{succ u2} M v₁ (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) a (HAdd.hAdd.{u2, u2, u2} M M M (instHAdd.{u2} M (AddZeroClass.toHasAdd.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) v₁ v₂))) (Eq.{succ u2} M v₂ (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) b (HAdd.hAdd.{u2, u2, u2} M M M (instHAdd.{u2} M (AddZeroClass.toHasAdd.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))) v₁ v₂)))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {v₁ : M} {v₂ : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 v₁ v₂) -> (Exists.{succ u2} R (fun (a : R) => Exists.{succ u2} R (fun (b : R) => And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) a) (And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) b) (And (Eq.{succ u2} R (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (DivisionRing.toRing.{u2} R (Field.toDivisionRing.{u2} R (LinearOrderedField.toField.{u2} R _inst_1))))))))) a b) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (DivisionRing.toRing.{u2} R (Field.toDivisionRing.{u2} R (LinearOrderedField.toField.{u2} R _inst_1)))))))) (And (Eq.{succ u1} M v₁ (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) a (HAdd.hAdd.{u1, u1, u1} M M M (instHAdd.{u1} M (AddZeroClass.toAdd.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) v₁ v₂))) (Eq.{succ u1} M v₂ (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) b (HAdd.hAdd.{u1, u1, u1} M M M (instHAdd.{u1} M (AddZeroClass.toAdd.{u1} M (AddMonoid.toAddZeroClass.{u1} M (SubNegMonoid.toAddMonoid.{u1} M (AddGroup.toSubNegMonoid.{u1} M (AddCommGroup.toAddGroup.{u1} M _inst_2)))))) v₁ v₂)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_eq_smul_add SameRay.exists_eq_smul_addₓ'. -/
/-- If vectors `v₁` and `v₂` are on the same ray, then for some nonnegative `a b`, `a + b = 1`, we
have `v₁ = a • (v₁ + v₂)` and `v₂ = b • (v₁ + v₂)`. -/
theorem exists_eq_smul_add (h : SameRay R v₁ v₂) :
    ∃ a b : R, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ v₁ = a • (v₁ + v₂) ∧ v₂ = b • (v₁ + v₂) :=
  by
  rcases h with (rfl | rfl | ⟨r₁, r₂, h₁, h₂, H⟩)
  · use 0, 1
    simp
  · use 1, 0
    simp
  · have h₁₂ : 0 < r₁ + r₂ := add_pos h₁ h₂
    refine'
      ⟨r₂ / (r₁ + r₂), r₁ / (r₁ + r₂), div_nonneg h₂.le h₁₂.le, div_nonneg h₁.le h₁₂.le, _, _, _⟩
    · rw [← add_div, add_comm, div_self h₁₂.ne']
    · rw [div_eq_inv_mul, mul_smul, smul_add, ← H, ← add_smul, add_comm r₂, inv_smul_smul₀ h₁₂.ne']
    · rw [div_eq_inv_mul, mul_smul, smul_add, H, ← add_smul, add_comm r₂, inv_smul_smul₀ h₁₂.ne']
#align same_ray.exists_eq_smul_add SameRay.exists_eq_smul_add

/- warning: same_ray.exists_eq_smul -> SameRay.exists_eq_smul is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {v₁ : M} {v₂ : M}, (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 v₁ v₂) -> (Exists.{succ u2} M (fun (u : M) => Exists.{succ u1} R (fun (a : R) => Exists.{succ u1} R (fun (b : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) a) (And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) b) (And (Eq.{succ u1} R (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (Ring.toDistrib.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))) a b) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) (And (Eq.{succ u2} M v₁ (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) a u)) (Eq.{succ u2} M v₂ (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) b u)))))))))
but is expected to have type
  forall {R : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} R] {M : Type.{u1}} [_inst_2 : AddCommGroup.{u1} M] [_inst_3 : Module.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2)] {v₁ : M} {v₂ : M}, (SameRay.{u2, u1} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u2} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3 v₁ v₂) -> (Exists.{succ u1} M (fun (u : M) => Exists.{succ u2} R (fun (a : R) => Exists.{succ u2} R (fun (b : R) => And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) a) (And (LE.le.{u2} R (Preorder.toLE.{u2} R (PartialOrder.toPreorder.{u2} R (StrictOrderedRing.toPartialOrder.{u2} R (LinearOrderedRing.toStrictOrderedRing.{u2} R (LinearOrderedCommRing.toLinearOrderedRing.{u2} R (LinearOrderedField.toLinearOrderedCommRing.{u2} R _inst_1)))))) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))))) b) (And (Eq.{succ u2} R (HAdd.hAdd.{u2, u2, u2} R R R (instHAdd.{u2} R (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (DivisionRing.toRing.{u2} R (Field.toDivisionRing.{u2} R (LinearOrderedField.toField.{u2} R _inst_1))))))))) a b) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (DivisionRing.toRing.{u2} R (Field.toDivisionRing.{u2} R (LinearOrderedField.toField.{u2} R _inst_1)))))))) (And (Eq.{succ u1} M v₁ (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) a u)) (Eq.{succ u1} M v₂ (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommGroupWithZero.toCommMonoidWithZero.{u2} R (Semifield.toCommGroupWithZero.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1))))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_2))))) (Module.toMulActionWithZero.{u2, u1} R M (DivisionSemiring.toSemiring.{u2} R (Semifield.toDivisionSemiring.{u2} R (LinearOrderedSemifield.toSemifield.{u2} R (LinearOrderedField.toLinearOrderedSemifield.{u2} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u1} M _inst_2) _inst_3))))) b u)))))))))
Case conversion may be inaccurate. Consider using '#align same_ray.exists_eq_smul SameRay.exists_eq_smulₓ'. -/
/-- If vectors `v₁` and `v₂` are on the same ray, then they are nonnegative multiples of the same
vector. Actually, this vector can be assumed to be `v₁ + v₂`, see `same_ray.exists_eq_smul_add`. -/
theorem exists_eq_smul (h : SameRay R v₁ v₂) :
    ∃ (u : M)(a b : R), 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ v₁ = a • u ∧ v₂ = b • u :=
  ⟨v₁ + v₂, h.exists_eq_smul_add⟩
#align same_ray.exists_eq_smul SameRay.exists_eq_smul

end SameRay

section LinearOrderedField

variable {R : Type _} [LinearOrderedField R]

variable {M : Type _} [AddCommGroup M] [Module R M] {x y : M}

/- warning: exists_pos_left_iff_same_ray -> exists_pos_left_iff_sameRay is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r x) y))) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r x) y))) (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
Case conversion may be inaccurate. Consider using '#align exists_pos_left_iff_same_ray exists_pos_left_iff_sameRayₓ'. -/
theorem exists_pos_left_iff_sameRay (hx : x ≠ 0) (hy : y ≠ 0) :
    (∃ r : R, 0 < r ∧ r • x = y) ↔ SameRay R x y :=
  by
  refine' ⟨fun h => _, fun h => h.exists_pos_left hx hy⟩
  rcases h with ⟨r, hr, rfl⟩
  exact SameRay.sameRay_pos_smul_right x hr
#align exists_pos_left_iff_same_ray exists_pos_left_iff_sameRay

/- warning: exists_pos_left_iff_same_ray_and_ne_zero -> exists_pos_left_iff_sameRay_and_ne_zero is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r x) y))) (And (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r x) y))) (And (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))))))))
Case conversion may be inaccurate. Consider using '#align exists_pos_left_iff_same_ray_and_ne_zero exists_pos_left_iff_sameRay_and_ne_zeroₓ'. -/
theorem exists_pos_left_iff_sameRay_and_ne_zero (hx : x ≠ 0) :
    (∃ r : R, 0 < r ∧ r • x = y) ↔ SameRay R x y ∧ y ≠ 0 :=
  by
  constructor
  · rintro ⟨r, hr, rfl⟩
    simp [hx, hr.le, hr.ne']
  · rintro ⟨hxy, hy⟩
    exact (exists_pos_left_iff_sameRay hx hy).2 hxy
#align exists_pos_left_iff_same_ray_and_ne_zero exists_pos_left_iff_sameRay_and_ne_zero

/- warning: exists_nonneg_left_iff_same_ray -> exists_nonneg_left_iff_sameRay is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r x) y))) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r x) y))) (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
Case conversion may be inaccurate. Consider using '#align exists_nonneg_left_iff_same_ray exists_nonneg_left_iff_sameRayₓ'. -/
theorem exists_nonneg_left_iff_sameRay (hx : x ≠ 0) :
    (∃ r : R, 0 ≤ r ∧ r • x = y) ↔ SameRay R x y :=
  by
  refine' ⟨fun h => _, fun h => h.exists_nonneg_left hx⟩
  rcases h with ⟨r, hr, rfl⟩
  exact SameRay.sameRay_nonneg_smul_right x hr
#align exists_nonneg_left_iff_same_ray exists_nonneg_left_iff_sameRay

/- warning: exists_pos_right_iff_same_ray -> exists_pos_right_iff_sameRay is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r y)))) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M x (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r y)))) (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
Case conversion may be inaccurate. Consider using '#align exists_pos_right_iff_same_ray exists_pos_right_iff_sameRayₓ'. -/
theorem exists_pos_right_iff_sameRay (hx : x ≠ 0) (hy : y ≠ 0) :
    (∃ r : R, 0 < r ∧ x = r • y) ↔ SameRay R x y := by
  simpa only [SameRay.sameRay_comm, eq_comm] using exists_pos_left_iff_sameRay hy hx
#align exists_pos_right_iff_same_ray exists_pos_right_iff_sameRay

/- warning: exists_pos_right_iff_same_ray_and_ne_zero -> exists_pos_right_iff_sameRay_and_ne_zero is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r y)))) (And (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2)))))))))))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LT.lt.{u1} R (Preorder.toLT.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M x (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r y)))) (And (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y) (Ne.{succ u2} M x (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))))))))
Case conversion may be inaccurate. Consider using '#align exists_pos_right_iff_same_ray_and_ne_zero exists_pos_right_iff_sameRay_and_ne_zeroₓ'. -/
theorem exists_pos_right_iff_sameRay_and_ne_zero (hy : y ≠ 0) :
    (∃ r : R, 0 < r ∧ x = r • y) ↔ SameRay R x y ∧ x ≠ 0 := by
  simpa only [SameRay.sameRay_comm, eq_comm] using exists_pos_left_iff_sameRay_and_ne_zero hy
#align exists_pos_right_iff_same_ray_and_ne_zero exists_pos_right_iff_sameRay_and_ne_zero

/- warning: exists_nonneg_right_iff_same_ray -> exists_nonneg_right_iff_sameRay is a dubious translation:
lean 3 declaration is
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_2))))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (OrderedAddCommGroup.toPartialOrder.{u1} R (StrictOrderedRing.toOrderedAddCommGroup.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))))))) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))))))))) r) (Eq.{succ u2} M x (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (DivisionRing.toRing.{u1} R (Field.toDivisionRing.{u1} R (LinearOrderedField.toField.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3)))) r y)))) (SameRay.{u1, u2} R (StrictOrderedCommRing.toStrictOrderedCommSemiring.{u1} R (LinearOrderedCommRing.toStrictOrderedCommRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
but is expected to have type
  forall {R : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} R] {M : Type.{u2}} [_inst_2 : AddCommGroup.{u2} M] [_inst_3 : Module.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2)] {x : M} {y : M}, (Ne.{succ u2} M y (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2)))))))) -> (Iff (Exists.{succ u1} R (fun (r : R) => And (LE.le.{u1} R (Preorder.toLE.{u1} R (PartialOrder.toPreorder.{u1} R (StrictOrderedRing.toPartialOrder.{u1} R (LinearOrderedRing.toStrictOrderedRing.{u1} R (LinearOrderedCommRing.toLinearOrderedRing.{u1} R (LinearOrderedField.toLinearOrderedCommRing.{u1} R _inst_1)))))) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))))) r) (Eq.{succ u2} M x (HSMul.hSMul.{u1, u2, u2} R M M (instHSMul.{u1, u2} R M (SMulZeroClass.toSMul.{u1, u2} R M (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} R M (CommMonoidWithZero.toZero.{u1} R (CommGroupWithZero.toCommMonoidWithZero.{u1} R (Semifield.toCommGroupWithZero.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))))) (NegZeroClass.toZero.{u2} M (SubNegZeroMonoid.toNegZeroClass.{u2} M (SubtractionMonoid.toSubNegZeroMonoid.{u2} M (SubtractionCommMonoid.toSubtractionMonoid.{u2} M (AddCommGroup.toDivisionAddCommMonoid.{u2} M _inst_2))))) (Module.toMulActionWithZero.{u1, u2} R M (DivisionSemiring.toSemiring.{u1} R (Semifield.toDivisionSemiring.{u1} R (LinearOrderedSemifield.toSemifield.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1)))) (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3))))) r y)))) (SameRay.{u1, u2} R (LinearOrderedCommSemiring.toStrictOrderedCommSemiring.{u1} R (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} R (LinearOrderedField.toLinearOrderedSemifield.{u1} R _inst_1))) M (AddCommGroup.toAddCommMonoid.{u2} M _inst_2) _inst_3 x y))
Case conversion may be inaccurate. Consider using '#align exists_nonneg_right_iff_same_ray exists_nonneg_right_iff_sameRayₓ'. -/
theorem exists_nonneg_right_iff_sameRay (hy : y ≠ 0) :
    (∃ r : R, 0 ≤ r ∧ x = r • y) ↔ SameRay R x y := by
  simpa only [SameRay.sameRay_comm, eq_comm] using exists_nonneg_left_iff_sameRay hy
#align exists_nonneg_right_iff_same_ray exists_nonneg_right_iff_sameRay

end LinearOrderedField