The motivation is to avoid the problems produced by the "declare as structure and then tag as class idiom" described in the file ring.lean.
384 lines
16 KiB
Text
384 lines
16 KiB
Text
/-
|
||
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Jeremy Avigad, Leonardo de Moura
|
||
-/
|
||
prelude
|
||
import init.algebra.ordered_group init.algebra.ring
|
||
|
||
/- Make sure instances defined in this file have lower priority than the ones
|
||
defined for concrete structures -/
|
||
set_option default_priority 100
|
||
|
||
universe variable u
|
||
|
||
class ordered_semiring (α : Type u)
|
||
extends semiring α, ordered_cancel_comm_monoid α :=
|
||
(mul_le_mul_of_nonneg_left: ∀ a b c : α, a ≤ b → 0 ≤ c → c * a ≤ c * b)
|
||
(mul_le_mul_of_nonneg_right: ∀ a b c : α, a ≤ b → 0 ≤ c → a * c ≤ b * c)
|
||
(mul_lt_mul_of_pos_left: ∀ a b c : α, a < b → 0 < c → c * a < c * b)
|
||
(mul_lt_mul_of_pos_right: ∀ a b c : α, a < b → 0 < c → a * c < b * c)
|
||
|
||
variable {α : Type u}
|
||
|
||
section ordered_semiring
|
||
variable [ordered_semiring α]
|
||
|
||
lemma mul_le_mul_of_nonneg_left {a b c : α} (h₁ : a ≤ b) (h₂ : 0 ≤ c) : c * a ≤ c * b :=
|
||
ordered_semiring.mul_le_mul_of_nonneg_left a b c h₁ h₂
|
||
|
||
lemma mul_le_mul_of_nonneg_right {a b c : α} (h₁ : a ≤ b) (h₂ : 0 ≤ c) : a * c ≤ b * c :=
|
||
ordered_semiring.mul_le_mul_of_nonneg_right a b c h₁ h₂
|
||
|
||
lemma mul_lt_mul_of_pos_left {a b c : α} (h₁ : a < b) (h₂ : 0 < c) : c * a < c * b :=
|
||
ordered_semiring.mul_lt_mul_of_pos_left a b c h₁ h₂
|
||
|
||
lemma mul_lt_mul_of_pos_right {a b c : α} (h₁ : a < b) (h₂ : 0 < c) : a * c < b * c :=
|
||
ordered_semiring.mul_lt_mul_of_pos_right a b c h₁ h₂
|
||
|
||
-- TODO: there are four variations, depending on which variables we assume to be nonneg
|
||
lemma mul_le_mul {a b c d : α} (hac : a ≤ c) (hbd : b ≤ d) (nn_b : 0 ≤ b) (nn_c : 0 ≤ c) : a * b ≤ c * d :=
|
||
calc
|
||
a * b ≤ c * b : mul_le_mul_of_nonneg_right hac nn_b
|
||
... ≤ c * d : mul_le_mul_of_nonneg_left hbd nn_c
|
||
|
||
lemma mul_nonneg {a b : α} (ha : a ≥ 0) (hb : b ≥ 0) : a * b ≥ 0 :=
|
||
have h : 0 * b ≤ a * b, from mul_le_mul_of_nonneg_right ha hb,
|
||
by rwa [zero_mul] at h
|
||
|
||
lemma mul_nonpos_of_nonneg_of_nonpos {a b : α} (ha : a ≥ 0) (hb : b ≤ 0) : a * b ≤ 0 :=
|
||
have h : a * b ≤ a * 0, from mul_le_mul_of_nonneg_left hb ha,
|
||
by rwa mul_zero at h
|
||
|
||
lemma mul_nonpos_of_nonpos_of_nonneg {a b : α} (ha : a ≤ 0) (hb : b ≥ 0) : a * b ≤ 0 :=
|
||
have h : a * b ≤ 0 * b, from mul_le_mul_of_nonneg_right ha hb,
|
||
by rwa zero_mul at h
|
||
|
||
lemma mul_lt_mul {a b c d : α} (hac : a < c) (hbd : b ≤ d) (pos_b : 0 < b) (nn_c : 0 ≤ c) : a * b < c * d :=
|
||
calc
|
||
a * b < c * b : mul_lt_mul_of_pos_right hac pos_b
|
||
... ≤ c * d : mul_le_mul_of_nonneg_left hbd nn_c
|
||
|
||
lemma mul_lt_mul' {a b c d : α} (h1 : a < c) (h2 : b < d) (h3 : b ≥ 0) (h4 : c > 0) :
|
||
a * b < c * d :=
|
||
calc
|
||
a * b ≤ c * b : mul_le_mul_of_nonneg_right (le_of_lt h1) h3
|
||
... < c * d : mul_lt_mul_of_pos_left h2 h4
|
||
|
||
lemma mul_pos {a b : α} (ha : a > 0) (hb : b > 0) : a * b > 0 :=
|
||
have h : 0 * b < a * b, from mul_lt_mul_of_pos_right ha hb,
|
||
by rwa zero_mul at h
|
||
|
||
lemma mul_neg_of_pos_of_neg {a b : α} (ha : a > 0) (hb : b < 0) : a * b < 0 :=
|
||
have h : a * b < a * 0, from mul_lt_mul_of_pos_left hb ha,
|
||
by rwa mul_zero at h
|
||
|
||
lemma mul_neg_of_neg_of_pos {a b : α} (ha : a < 0) (hb : b > 0) : a * b < 0 :=
|
||
have h : a * b < 0 * b, from mul_lt_mul_of_pos_right ha hb,
|
||
by rwa zero_mul at h
|
||
|
||
lemma mul_self_lt_mul_self {a b : α} (h1 : 0 ≤ a) (h2 : a < b) : a * a < b * b :=
|
||
mul_lt_mul' h2 h2 h1 (lt_of_le_of_lt h1 h2)
|
||
end ordered_semiring
|
||
|
||
class linear_ordered_semiring (α : Type u) extends ordered_semiring α, linear_strong_order_pair α :=
|
||
(zero_lt_one : zero < one)
|
||
|
||
section linear_ordered_semiring
|
||
variable [linear_ordered_semiring α]
|
||
|
||
lemma zero_lt_one : 0 < (1:α) :=
|
||
linear_ordered_semiring.zero_lt_one α
|
||
|
||
lemma lt_of_mul_lt_mul_left {a b c : α} (h : c * a < c * b) (hc : c ≥ 0) : a < b :=
|
||
lt_of_not_ge
|
||
(assume h1 : b ≤ a,
|
||
have h2 : c * b ≤ c * a, from mul_le_mul_of_nonneg_left h1 hc,
|
||
not_lt_of_ge h2 h)
|
||
|
||
lemma lt_of_mul_lt_mul_right {a b c : α} (h : a * c < b * c) (hc : c ≥ 0) : a < b :=
|
||
lt_of_not_ge
|
||
(assume h1 : b ≤ a,
|
||
have h2 : b * c ≤ a * c, from mul_le_mul_of_nonneg_right h1 hc,
|
||
not_lt_of_ge h2 h)
|
||
|
||
lemma le_of_mul_le_mul_left {a b c : α} (h : c * a ≤ c * b) (hc : c > 0) : a ≤ b :=
|
||
le_of_not_gt
|
||
(assume h1 : b < a,
|
||
have h2 : c * b < c * a, from mul_lt_mul_of_pos_left h1 hc,
|
||
not_le_of_gt h2 h)
|
||
|
||
lemma le_of_mul_le_mul_right {a b c : α} (h : a * c ≤ b * c) (hc : c > 0) : a ≤ b :=
|
||
le_of_not_gt
|
||
(assume h1 : b < a,
|
||
have h2 : b * c < a * c, from mul_lt_mul_of_pos_right h1 hc,
|
||
not_le_of_gt h2 h)
|
||
|
||
lemma pos_of_mul_pos_left {a b : α} (h : 0 < a * b) (h1 : 0 ≤ a) : 0 < b :=
|
||
lt_of_not_ge
|
||
(assume h2 : b ≤ 0,
|
||
have h3 : a * b ≤ 0, from mul_nonpos_of_nonneg_of_nonpos h1 h2,
|
||
not_lt_of_ge h3 h)
|
||
|
||
lemma pos_of_mul_pos_right {a b : α} (h : 0 < a * b) (h1 : 0 ≤ b) : 0 < a :=
|
||
lt_of_not_ge
|
||
(assume h2 : a ≤ 0,
|
||
have h3 : a * b ≤ 0, from mul_nonpos_of_nonpos_of_nonneg h2 h1,
|
||
not_lt_of_ge h3 h)
|
||
|
||
lemma nonneg_of_mul_nonneg_left {a b : α} (h : 0 ≤ a * b) (h1 : 0 < a) : 0 ≤ b :=
|
||
le_of_not_gt
|
||
(assume h2 : b < 0,
|
||
not_le_of_gt (mul_neg_of_pos_of_neg h1 h2) h)
|
||
|
||
lemma nonneg_of_mul_nonneg_right {a b : α} (h : 0 ≤ a * b) (h1 : 0 < b) : 0 ≤ a :=
|
||
le_of_not_gt
|
||
(assume h2 : a < 0,
|
||
not_le_of_gt (mul_neg_of_neg_of_pos h2 h1) h)
|
||
|
||
lemma neg_of_mul_neg_left {a b : α} (h : a * b < 0) (h1 : 0 ≤ a) : b < 0 :=
|
||
lt_of_not_ge
|
||
(assume h2 : b ≥ 0,
|
||
not_lt_of_ge (mul_nonneg h1 h2) h)
|
||
|
||
lemma neg_of_mul_neg_right {a b : α} (h : a * b < 0) (h1 : 0 ≤ b) : a < 0 :=
|
||
lt_of_not_ge
|
||
(assume h2 : a ≥ 0,
|
||
not_lt_of_ge (mul_nonneg h2 h1) h)
|
||
|
||
lemma nonpos_of_mul_nonpos_left {a b : α} (h : a * b ≤ 0) (h1 : 0 < a) : b ≤ 0 :=
|
||
le_of_not_gt
|
||
(assume h2 : b > 0,
|
||
not_le_of_gt (mul_pos h1 h2) h)
|
||
|
||
lemma nonpos_of_mul_nonpos_right {a b : α} (h : a * b ≤ 0) (h1 : 0 < b) : a ≤ 0 :=
|
||
le_of_not_gt
|
||
(assume h2 : a > 0,
|
||
not_le_of_gt (mul_pos h2 h1) h)
|
||
|
||
end linear_ordered_semiring
|
||
|
||
class decidable_linear_ordered_semiring (α : Type u) extends linear_ordered_semiring α, decidable_linear_order α
|
||
|
||
class ordered_ring (α : Type u) extends ring α, ordered_comm_group α, zero_ne_one_class α :=
|
||
(mul_nonneg : ∀ a b : α, 0 ≤ a → 0 ≤ b → 0 ≤ a * b)
|
||
(mul_pos : ∀ a b : α, 0 < a → 0 < b → 0 < a * b)
|
||
|
||
lemma ordered_ring.mul_le_mul_of_nonneg_left [s : ordered_ring α] {a b c : α}
|
||
(h₁ : a ≤ b) (h₂ : 0 ≤ c) : c * a ≤ c * b :=
|
||
have 0 ≤ b - a, from sub_nonneg_of_le h₁,
|
||
have 0 ≤ c * (b - a), from ordered_ring.mul_nonneg c (b - a) h₂ this,
|
||
begin
|
||
rw mul_sub_left_distrib at this,
|
||
apply le_of_sub_nonneg this
|
||
end
|
||
|
||
lemma ordered_ring.mul_le_mul_of_nonneg_right [s : ordered_ring α] {a b c : α}
|
||
(h₁ : a ≤ b) (h₂ : 0 ≤ c) : a * c ≤ b * c :=
|
||
have 0 ≤ b - a, from sub_nonneg_of_le h₁,
|
||
have 0 ≤ (b - a) * c, from ordered_ring.mul_nonneg (b - a) c this h₂,
|
||
begin
|
||
rw mul_sub_right_distrib at this,
|
||
apply le_of_sub_nonneg this
|
||
end
|
||
|
||
lemma ordered_ring.mul_lt_mul_of_pos_left [s : ordered_ring α] {a b c : α}
|
||
(h₁ : a < b) (h₂ : 0 < c) : c * a < c * b :=
|
||
have 0 < b - a, from sub_pos_of_lt h₁,
|
||
have 0 < c * (b - a), from ordered_ring.mul_pos c (b - a) h₂ this,
|
||
begin
|
||
rw mul_sub_left_distrib at this,
|
||
apply lt_of_sub_pos this
|
||
end
|
||
|
||
lemma ordered_ring.mul_lt_mul_of_pos_right [s : ordered_ring α] {a b c : α}
|
||
(h₁ : a < b) (h₂ : 0 < c) : a * c < b * c :=
|
||
have 0 < b - a, from sub_pos_of_lt h₁,
|
||
have 0 < (b - a) * c, from ordered_ring.mul_pos (b - a) c this h₂,
|
||
begin
|
||
rw mul_sub_right_distrib at this,
|
||
apply lt_of_sub_pos this
|
||
end
|
||
|
||
instance ordered_ring.to_ordered_semiring [s : ordered_ring α] : ordered_semiring α :=
|
||
{ s with
|
||
mul_zero := mul_zero,
|
||
zero_mul := zero_mul,
|
||
add_left_cancel := @add_left_cancel α _,
|
||
add_right_cancel := @add_right_cancel α _,
|
||
le_of_add_le_add_left := @le_of_add_le_add_left α _,
|
||
mul_le_mul_of_nonneg_left := @ordered_ring.mul_le_mul_of_nonneg_left α _,
|
||
mul_le_mul_of_nonneg_right := @ordered_ring.mul_le_mul_of_nonneg_right α _,
|
||
mul_lt_mul_of_pos_left := @ordered_ring.mul_lt_mul_of_pos_left α _,
|
||
mul_lt_mul_of_pos_right := @ordered_ring.mul_lt_mul_of_pos_right α _,
|
||
lt_of_add_lt_add_left := @lt_of_add_lt_add_left α _}
|
||
|
||
section ordered_ring
|
||
variable [ordered_ring α]
|
||
|
||
lemma mul_le_mul_of_nonpos_left {a b c : α} (h : b ≤ a) (hc : c ≤ 0) : c * a ≤ c * b :=
|
||
have -c ≥ 0, from neg_nonneg_of_nonpos hc,
|
||
have -c * b ≤ -c * a, from mul_le_mul_of_nonneg_left h this,
|
||
have -(c * b) ≤ -(c * a), by rwa [-neg_mul_eq_neg_mul, -neg_mul_eq_neg_mul] at this,
|
||
le_of_neg_le_neg this
|
||
|
||
lemma mul_le_mul_of_nonpos_right {a b c : α} (h : b ≤ a) (hc : c ≤ 0) : a * c ≤ b * c :=
|
||
have -c ≥ 0, from neg_nonneg_of_nonpos hc,
|
||
have b * -c ≤ a * -c, from mul_le_mul_of_nonneg_right h this,
|
||
have -(b * c) ≤ -(a * c), by rwa [-neg_mul_eq_mul_neg, -neg_mul_eq_mul_neg] at this,
|
||
le_of_neg_le_neg this
|
||
|
||
lemma mul_nonneg_of_nonpos_of_nonpos {a b : α} (ha : a ≤ 0) (hb : b ≤ 0) : 0 ≤ a * b :=
|
||
have 0 * b ≤ a * b, from mul_le_mul_of_nonpos_right ha hb,
|
||
by rwa zero_mul at this
|
||
|
||
lemma mul_lt_mul_of_neg_left {a b c : α} (h : b < a) (hc : c < 0) : c * a < c * b :=
|
||
have -c > 0, from neg_pos_of_neg hc,
|
||
have -c * b < -c * a, from mul_lt_mul_of_pos_left h this,
|
||
have -(c * b) < -(c * a), by rwa [-neg_mul_eq_neg_mul, -neg_mul_eq_neg_mul] at this,
|
||
lt_of_neg_lt_neg this
|
||
|
||
lemma mul_lt_mul_of_neg_right {a b c : α} (h : b < a) (hc : c < 0) : a * c < b * c :=
|
||
have -c > 0, from neg_pos_of_neg hc,
|
||
have b * -c < a * -c, from mul_lt_mul_of_pos_right h this,
|
||
have -(b * c) < -(a * c), by rwa [-neg_mul_eq_mul_neg, -neg_mul_eq_mul_neg] at this,
|
||
lt_of_neg_lt_neg this
|
||
|
||
lemma mul_pos_of_neg_of_neg {a b : α} (ha : a < 0) (hb : b < 0) : 0 < a * b :=
|
||
have 0 * b < a * b, from mul_lt_mul_of_neg_right ha hb,
|
||
by rwa zero_mul at this
|
||
|
||
end ordered_ring
|
||
|
||
class linear_ordered_ring (α : Type u) extends ordered_ring α, linear_strong_order_pair α :=
|
||
(zero_lt_one : lt zero one)
|
||
|
||
instance linear_ordered_ring.to_linear_ordered_semiring [s : linear_ordered_ring α] : linear_ordered_semiring α :=
|
||
{ s with
|
||
mul_zero := mul_zero,
|
||
zero_mul := zero_mul,
|
||
add_left_cancel := @add_left_cancel α _,
|
||
add_right_cancel := @add_right_cancel α _,
|
||
le_of_add_le_add_left := @le_of_add_le_add_left α _,
|
||
mul_le_mul_of_nonneg_left := @mul_le_mul_of_nonneg_left α _,
|
||
mul_le_mul_of_nonneg_right := @mul_le_mul_of_nonneg_right α _,
|
||
mul_lt_mul_of_pos_left := @mul_lt_mul_of_pos_left α _,
|
||
mul_lt_mul_of_pos_right := @mul_lt_mul_of_pos_right α _,
|
||
le_total := linear_ordered_ring.le_total,
|
||
lt_of_add_lt_add_left := @lt_of_add_lt_add_left α _ }
|
||
|
||
section linear_ordered_ring
|
||
variable [linear_ordered_ring α]
|
||
|
||
lemma mul_self_nonneg (a : α) : a * a ≥ 0 :=
|
||
or.elim (le_total 0 a)
|
||
(assume h : a ≥ 0, mul_nonneg h h)
|
||
(assume h : a ≤ 0, mul_nonneg_of_nonpos_of_nonpos h h)
|
||
|
||
lemma zero_le_one : 0 ≤ (1:α) :=
|
||
have 1 * 1 ≥ (0:α), from mul_self_nonneg (1:α),
|
||
by rwa one_mul at this
|
||
|
||
lemma pos_and_pos_or_neg_and_neg_of_mul_pos {a b : α} (hab : a * b > 0) :
|
||
(a > 0 ∧ b > 0) ∨ (a < 0 ∧ b < 0) :=
|
||
match lt_trichotomy 0 a with
|
||
| or.inl hlt₁ :=
|
||
match lt_trichotomy 0 b with
|
||
| or.inl hlt₂ := or.inl ⟨hlt₁, hlt₂⟩
|
||
| or.inr (or.inl heq₂) := begin rw [-heq₂, mul_zero] at hab, exact absurd hab (lt_irrefl _) end
|
||
| or.inr (or.inr hgt₂) := absurd hab (lt_asymm (mul_neg_of_pos_of_neg hlt₁ hgt₂))
|
||
end
|
||
| or.inr (or.inl heq₁) := begin rw [-heq₁, zero_mul] at hab, exact absurd hab (lt_irrefl _) end
|
||
| or.inr (or.inr hgt₁) :=
|
||
match lt_trichotomy 0 b with
|
||
| or.inl hlt₂ := absurd hab (lt_asymm (mul_neg_of_neg_of_pos hgt₁ hlt₂))
|
||
| or.inr (or.inl heq₂) := begin rw [-heq₂, mul_zero] at hab, exact absurd hab (lt_irrefl _) end
|
||
| or.inr (or.inr hgt₂) := or.inr ⟨hgt₁, hgt₂⟩
|
||
end
|
||
end
|
||
|
||
lemma gt_of_mul_lt_mul_neg_left {a b c : α} (h : c * a < c * b) (hc : c ≤ 0) : a > b :=
|
||
have nhc : -c ≥ 0, from neg_nonneg_of_nonpos hc,
|
||
have h2 : -(c * b) < -(c * a), from neg_lt_neg h,
|
||
have h3 : (-c) * b < (-c) * a, from calc
|
||
(-c) * b = - (c * b) : by rewrite neg_mul_eq_neg_mul
|
||
... < -(c * a) : h2
|
||
... = (-c) * a : by rewrite neg_mul_eq_neg_mul,
|
||
lt_of_mul_lt_mul_left h3 nhc
|
||
|
||
|
||
lemma zero_gt_neg_one : -1 < (0:α) :=
|
||
begin
|
||
note this := neg_lt_neg (@zero_lt_one α _),
|
||
rwa neg_zero at this
|
||
end
|
||
|
||
lemma le_of_mul_le_of_ge_one {a b c : α} (h : a * c ≤ b) (hb : b ≥ 0) (hc : c ≥ 1) : a ≤ b :=
|
||
have h' : a * c ≤ b * c, from calc
|
||
a * c ≤ b : h
|
||
... = b * 1 : by rewrite mul_one
|
||
... ≤ b * c : mul_le_mul_of_nonneg_left hc hb,
|
||
le_of_mul_le_mul_right h' (lt_of_lt_of_le zero_lt_one hc)
|
||
|
||
lemma nonneg_le_nonneg_of_squares_le {a b : α} (ha : a ≥ 0) (hb : b ≥ 0) (h : a * a ≤ b * b) : a ≤ b :=
|
||
begin
|
||
apply le_of_not_gt,
|
||
intro hab,
|
||
note hposa := lt_of_le_of_lt hb hab,
|
||
note h' := calc
|
||
b * b ≤ a * b : mul_le_mul_of_nonneg_right (le_of_lt hab) hb
|
||
... < a * a : mul_lt_mul_of_pos_left hab hposa,
|
||
apply (not_le_of_gt h') h
|
||
end
|
||
|
||
end linear_ordered_ring
|
||
|
||
class linear_ordered_comm_ring (α : Type u) extends linear_ordered_ring α, comm_monoid α
|
||
|
||
lemma linear_ordered_comm_ring.eq_zero_or_eq_zero_of_mul_eq_zero [s : linear_ordered_comm_ring α]
|
||
{a b : α} (h : a * b = 0) : a = 0 ∨ b = 0 :=
|
||
match lt_trichotomy 0 a with
|
||
| or.inl hlt₁ :=
|
||
match lt_trichotomy 0 b with
|
||
| or.inl hlt₂ :=
|
||
have 0 < a * b, from mul_pos hlt₁ hlt₂,
|
||
begin rw h at this, exact absurd this (lt_irrefl _) end
|
||
| or.inr (or.inl heq₂) := or.inr heq₂^.symm
|
||
| or.inr (or.inr hgt₂) :=
|
||
have 0 > a * b, from mul_neg_of_pos_of_neg hlt₁ hgt₂,
|
||
begin rw h at this, exact absurd this (lt_irrefl _) end
|
||
end
|
||
| or.inr (or.inl heq₁) := or.inl heq₁^.symm
|
||
| or.inr (or.inr hgt₁) :=
|
||
match lt_trichotomy 0 b with
|
||
| or.inl hlt₂ :=
|
||
have 0 > a * b, from mul_neg_of_neg_of_pos hgt₁ hlt₂,
|
||
begin rw h at this, exact absurd this (lt_irrefl _) end
|
||
| or.inr (or.inl heq₂) := or.inr heq₂^.symm
|
||
| or.inr (or.inr hgt₂) :=
|
||
have 0 < a * b, from mul_pos_of_neg_of_neg hgt₁ hgt₂,
|
||
begin rw h at this, exact absurd this (lt_irrefl _) end
|
||
end
|
||
end
|
||
|
||
instance linear_ordered_comm_ring.to_integral_domain [s: linear_ordered_comm_ring α] : integral_domain α :=
|
||
{s with
|
||
eq_zero_or_eq_zero_of_mul_eq_zero := @linear_ordered_comm_ring.eq_zero_or_eq_zero_of_mul_eq_zero α s }
|
||
|
||
class decidable_linear_ordered_comm_ring (α : Type u) extends linear_ordered_comm_ring α,
|
||
decidable_linear_ordered_comm_group α
|
||
|
||
instance decidable_linear_ordered_comm_ring.to_decidable_linear_ordered_semiring [d : decidable_linear_ordered_comm_ring α] :
|
||
decidable_linear_ordered_semiring α :=
|
||
let s : linear_ordered_semiring α := @linear_ordered_ring.to_linear_ordered_semiring α _ in
|
||
{d with
|
||
zero_mul := @linear_ordered_semiring.zero_mul α s,
|
||
mul_zero := @linear_ordered_semiring.mul_zero α s,
|
||
add_left_cancel := @linear_ordered_semiring.add_left_cancel α s,
|
||
add_right_cancel := @linear_ordered_semiring.add_right_cancel α s,
|
||
le_of_add_le_add_left := @linear_ordered_semiring.le_of_add_le_add_left α s,
|
||
lt_of_add_lt_add_left := @linear_ordered_semiring.lt_of_add_lt_add_left α s,
|
||
mul_le_mul_of_nonneg_left := @linear_ordered_semiring.mul_le_mul_of_nonneg_left α s,
|
||
mul_le_mul_of_nonneg_right := @linear_ordered_semiring.mul_le_mul_of_nonneg_right α s,
|
||
mul_lt_mul_of_pos_left := @linear_ordered_semiring.mul_lt_mul_of_pos_left α s,
|
||
mul_lt_mul_of_pos_right := @linear_ordered_semiring.mul_lt_mul_of_pos_right α s}
|