Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2014 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Leonardo de Moura, Floris van Doorn, Yury Kudryashov, Neil Strickland

! This file was ported from Lean 3 source module algebra.ring.units
! leanprover-community/mathlib commit 2ed7e4aec72395b6a7c3ac4ac7873a7a43ead17c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Ring.InjSurj
import Mathlib.Algebra.Group.Units

/-!
# Units in semirings and rings

-/


universe u v w x

variable {
α: Type u
α
:
Type u: Type (u+1)
Type u
} {
β: Type v
β
:
Type v: Type (v+1)
Type v
} {
γ: Type w
γ
:
Type w: Type (w+1)
Type w
} {
R: Type x
R
:
Type x: Type (x+1)
Type x
} open Function namespace Units section HasDistribNeg variable [
Monoid: Type ?u.18 → Type ?u.18
Monoid
α: Type u
α
] [
HasDistribNeg: (α : Type ?u.1880) → [inst : Mul α] → Type ?u.1880
HasDistribNeg
α: Type u
α
] {
a: α
a
b: α
b
:
α: Type u
α
} /-- Each element of the group of units of a ring has an additive inverse. -/
instance: {α : Type u} → [inst : Monoid α] → [inst_1 : HasDistribNeg α] → Neg αˣ
instance
:
Neg: Type ?u.422 → Type ?u.422
Neg
α: Type u
α
ˣ := ⟨fun
u: ?m.440
u
=> ⟨-↑
u: ?m.440
u
, -↑
u: ?m.440
u
⁻¹,

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝¹: Monoid α

inst✝: HasDistribNeg α

a, b: α

u: αˣ


-u * -u⁻¹ = 1

Goals accomplished! 🐙
,

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝¹: Monoid α

inst✝: HasDistribNeg α

a, b: α

u: αˣ


-u⁻¹ * -u = 1

Goals accomplished! 🐙
⟩⟩ /-- Representing an element of a ring's unit group as an element of the ring commutes with mapping this element to its additive inverse. -/ @[simp, norm_cast] protected theorem
val_neg: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] (u : αˣ), ↑(-u) = -u
val_neg
(
u: αˣ
u
:
α: Type u
α
ˣ) : (↑(-
u: αˣ
u
) :
α: Type u
α
) = -
u: αˣ
u
:=
rfl: ∀ {α : Sort ?u.2876} {a : α}, a = a
rfl
#align units.coe_neg
Units.val_neg: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] (u : αˣ), ↑(-u) = -u
Units.val_neg
@[simp, norm_cast] protected theorem
coe_neg_one: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α], ↑(-1) = -1
coe_neg_one
: ((-
1: ?m.3181
1
:
α: Type u
α
ˣ) :
α: Type u
α
) = -
1: ?m.3572
1
:=
rfl: ∀ {α : Sort ?u.3984} {a : α}, a = a
rfl
#align units.coe_neg_one
Units.coe_neg_one: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α], ↑(-1) = -1
Units.coe_neg_one
instance: {α : Type u} → [inst : Monoid α] → [inst_1 : HasDistribNeg α] → HasDistribNeg αˣ
instance
:
HasDistribNeg: (α : Type ?u.4284) → [inst : Mul α] → Type ?u.4284
HasDistribNeg
α: Type u
α
ˣ :=
Units.ext: ∀ {α : Type ?u.4478} [inst : Monoid α], Injective val
Units.ext
.
hasDistribNeg: {α : Type ?u.4489} → {β : Type ?u.4488} → [inst : Mul α] → [inst_1 : HasDistribNeg α] → [inst_2 : Neg β] → [inst_3 : Mul β] → (f : βα) → Injective f(∀ (a : β), f (-a) = -f a) → (∀ (a b : β), f (a * b) = f a * f b) → HasDistribNeg β
hasDistribNeg
_: ?m.4501?m.4500
_
Units.val_neg: ∀ {α : Type ?u.4727} [inst : Monoid α] [inst_1 : HasDistribNeg α] (u : αˣ), ↑(-u) = -u
Units.val_neg
Units.val_mul: ∀ {α : Type ?u.4904} [inst : Monoid α] (a b : αˣ), ↑(a * b) = a * b
Units.val_mul
@[field_simps] theorem
neg_divp: ∀ (a : α) (u : αˣ), -(a /ₚ u) = -a /ₚ u
neg_divp
(
a: α
a
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) : -(
a: α
a
/ₚ
u: αˣ
u
) = -
a: α
a
/ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝¹: Monoid α

inst✝: HasDistribNeg α

a✝, b, a: α

u: αˣ


-(a /ₚ u) = -a /ₚ u

Goals accomplished! 🐙
#align units.neg_divp
Units.neg_divp: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] (a : α) (u : αˣ), -(a /ₚ u) = -a /ₚ u
Units.neg_divp
end HasDistribNeg section Ring variable [
Ring: Type ?u.5862 → Type ?u.5862
Ring
α: Type u
α
] {
a: α
a
b: α
b
:
α: Type u
α
} -- Needs to have higher simp priority than divp_add_divp. 1000 is the default priority. @[field_simps 1010] theorem
divp_add_divp_same: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u + b /ₚ u = (a + b) /ₚ u
divp_add_divp_same
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u: αˣ
u
+
b: α
b
/ₚ
u: αˣ
u
= (
a: α
a
+
b: α
b
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u + b /ₚ u = (a + b) /ₚ u

Goals accomplished! 🐙
#align units.divp_add_divp_same
Units.divp_add_divp_same: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u + b /ₚ u = (a + b) /ₚ u
Units.divp_add_divp_same
-- Needs to have higher simp priority than divp_sub_divp. 1000 is the default priority. @[field_simps 1010] theorem
divp_sub_divp_same: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u - b /ₚ u = (a - b) /ₚ u
divp_sub_divp_same
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u: αˣ
u
-
b: α
b
/ₚ
u: αˣ
u
= (
a: α
a
-
b: α
b
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b /ₚ u = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b /ₚ u = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u + -(b /ₚ u) = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b /ₚ u = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u + -(b /ₚ u) = (a + -b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b /ₚ u = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u + -b /ₚ u = (a + -b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b /ₚ u = (a - b) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


(a + -b) /ₚ u = (a + -b) /ₚ u

Goals accomplished! 🐙
#align units.divp_sub_divp_same
Units.divp_sub_divp_same: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u - b /ₚ u = (a - b) /ₚ u
Units.divp_sub_divp_same
@[field_simps] theorem
add_divp: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a + b /ₚ u = (a * u + b) /ₚ u
add_divp
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
+
b: α
b
/ₚ
u: αˣ
u
= (
a: α
a
*
u: αˣ
u
+
b: α
b
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a + b /ₚ u = (a * u + b) /ₚ u

Goals accomplished! 🐙
#align units.add_divp
Units.add_divp: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a + b /ₚ u = (a * u + b) /ₚ u
Units.add_divp
@[field_simps] theorem
sub_divp: ∀ (a b : α) (u : αˣ), a - b /ₚ u = (a * u - b) /ₚ u
sub_divp
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
-
b: α
b
/ₚ
u: αˣ
u
= (
a: α
a
*
u: αˣ
u
-
b: α
b
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a - b /ₚ u = (a * u - b) /ₚ u

Goals accomplished! 🐙
#align units.sub_divp
Units.sub_divp: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a - b /ₚ u = (a * u - b) /ₚ u
Units.sub_divp
@[field_simps] theorem
divp_add: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u + b = (a + b * u) /ₚ u
divp_add
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u: αˣ
u
+
b: α
b
= (
a: α
a
+
b: α
b
*
u: αˣ
u
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u + b = (a + b * u) /ₚ u

Goals accomplished! 🐙
#align units.divp_add
Units.divp_add: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u + b = (a + b * u) /ₚ u
Units.divp_add
@[field_simps] theorem
divp_sub: ∀ (a b : α) (u : αˣ), a /ₚ u - b = (a - b * u) /ₚ u
divp_sub
(
a: α
a
b: α
b
:
α: Type u
α
) (
u: αˣ
u
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u: αˣ
u
-
b: α
b
= (
a: α
a
-
b: α
b
*
u: αˣ
u
) /ₚ
u: αˣ
u
:=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b = (a - b * u) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * u * u⁻¹
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


a /ₚ u - b = (a - b * u) /ₚ u
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * u * u⁻¹
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * (u * u⁻¹)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * u * u⁻¹
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * 1
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b * u * u⁻¹
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Ring α

a✝, b✝, a, b: α

u: αˣ


b = b

Goals accomplished! 🐙
#align units.divp_sub
Units.divp_sub: ∀ {α : Type u} [inst : Ring α] (a b : α) (u : αˣ), a /ₚ u - b = (a - b * u) /ₚ u
Units.divp_sub
end Ring end Units theorem
IsUnit.neg: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] {a : α}, IsUnit aIsUnit (-a)
IsUnit.neg
[
Monoid: Type ?u.10674 → Type ?u.10674
Monoid
α: Type u
α
] [
HasDistribNeg: (α : Type ?u.10677) → [inst : Mul α] → Type ?u.10677
HasDistribNeg
α: Type u
α
] {
a: α
a
:
α: Type u
α
} :
IsUnit: {M : Type ?u.10871} → [inst : Monoid M] → MProp
IsUnit
a: α
a
IsUnit: {M : Type ?u.10888} → [inst : Monoid M] → MProp
IsUnit
(-
a: α
a
) | ⟨
x: αˣ
x
,
hx: x = a
hx
⟩ =>
hx: x = a
hx
▸ (-
x: αˣ
x
).
isUnit: ∀ {M : Type ?u.11203} [inst : Monoid M] (u : Mˣ), IsUnit u
isUnit
#align is_unit.neg
IsUnit.neg: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] {a : α}, IsUnit aIsUnit (-a)
IsUnit.neg
@[simp] theorem
IsUnit.neg_iff: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] (a : α), IsUnit (-a) IsUnit a
IsUnit.neg_iff
[
Monoid: Type ?u.11308 → Type ?u.11308
Monoid
α: Type u
α
] [
HasDistribNeg: (α : Type ?u.11311) → [inst : Mul α] → Type ?u.11311
HasDistribNeg
α: Type u
α
] (
a: α
a
:
α: Type u
α
) :
IsUnit: {M : Type ?u.11504} → [inst : Monoid M] → MProp
IsUnit
(-
a: α
a
) ↔
IsUnit: {M : Type ?u.11762} → [inst : Monoid M] → MProp
IsUnit
a: α
a
:= ⟨fun
h: ?m.11778
h
=>
neg_neg: ∀ {G : Type ?u.11780} [inst : InvolutiveNeg G] (a : G), - -a = a
neg_neg
a: α
a
h: ?m.11778
h
.
neg: ∀ {α : Type ?u.11931} [inst : Monoid α] [inst_1 : HasDistribNeg α] {a : α}, IsUnit aIsUnit (-a)
neg
,
IsUnit.neg: ∀ {α : Type ?u.11960} [inst : Monoid α] [inst_1 : HasDistribNeg α] {a : α}, IsUnit aIsUnit (-a)
IsUnit.neg
#align is_unit.neg_iff
IsUnit.neg_iff: ∀ {α : Type u} [inst : Monoid α] [inst_1 : HasDistribNeg α] (a : α), IsUnit (-a) IsUnit a
IsUnit.neg_iff
theorem
IsUnit.sub_iff: ∀ [inst : Ring α] {x y : α}, IsUnit (x - y) IsUnit (y - x)
IsUnit.sub_iff
[
Ring: Type ?u.12022 → Type ?u.12022
Ring
α: Type u
α
] {
x: α
x
y: α
y
:
α: Type u
α
} :
IsUnit: {M : Type ?u.12029} → [inst : Monoid M] → MProp
IsUnit
(
x: α
x
-
y: α
y
) ↔
IsUnit: {M : Type ?u.12114} → [inst : Monoid M] → MProp
IsUnit
(
y: α
y
-
x: α
x
) := (
IsUnit.neg_iff: ∀ {α : Type ?u.12148} [inst : Monoid α] [inst_1 : HasDistribNeg α] (a : α), IsUnit (-a) IsUnit a
IsUnit.neg_iff
_: ?m.12149
_
).
symm: ∀ {a b : Prop}, (a b) → (b a)
symm
.
trans: ∀ {a b c : Prop}, (a b) → (b c) → (a c)
trans
<|
neg_sub: ∀ {α : Type ?u.12264} [inst : SubtractionMonoid α] (a b : α), -(a - b) = b - a
neg_sub
x: α
x
y: α
y
Iff.rfl: ∀ {a : Prop}, a a
Iff.rfl
#align is_unit.sub_iff
IsUnit.sub_iff: ∀ {α : Type u} [inst : Ring α] {x y : α}, IsUnit (x - y) IsUnit (y - x)
IsUnit.sub_iff
namespace Units @[field_simps] theorem
divp_add_divp: ∀ [inst : CommRing α] (a b : α) (u₁ u₂ : αˣ), a /ₚ u₁ + b /ₚ u₂ = (a * u₂ + u₁ * b) /ₚ (u₁ * u₂)
divp_add_divp
[
CommRing: Type ?u.12317 → Type ?u.12317
CommRing
α: Type u
α
] (
a: α
a
b: α
b
:
α: Type u
α
) (
u₁: αˣ
u₁
u₂: αˣ
u₂
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u₁: αˣ
u₁
+
b: α
b
/ₚ
u₂: αˣ
u₂
= (
a: α
a
*
u₂: αˣ
u₂
+
u₁: αˣ
u₁
*
b: α
b
) /ₚ (
u₁: αˣ
u₁
*
u₂: αˣ
u₂
) :=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a /ₚ u₁ + b /ₚ u₂ = (a * u₂ + u₁ * b) /ₚ (u₁ * u₂)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + b * u₂⁻¹ = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₁ * b * (u₂⁻¹ * u₁⁻¹)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a /ₚ u₁ + b /ₚ u₂ = (a * u₂ + u₁ * b) /ₚ (u₁ * u₂)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + b * u₂⁻¹ = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₁ * b * (u₂⁻¹ * u₁⁻¹)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + b * u₂⁻¹ = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + b * u₂⁻¹ = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₁ * b * (u₂⁻¹ * u₁⁻¹)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a /ₚ u₁ + b /ₚ u₂ = (a * u₂ + u₁ * b) /ₚ (u₁ * u₂)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * u₂⁻¹ * u₁⁻¹ + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * u₂⁻¹ * u₁⁻¹ + u₂⁻¹ * u₁⁻¹ * u₁ * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * (u₂ * u₂⁻¹) * u₁⁻¹ + u₂⁻¹ * u₁⁻¹ * u₁ * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * (u₂ * u₂⁻¹) * u₁⁻¹ + u₂⁻¹ * (u₁⁻¹ * u₁) * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * 1 * u₁⁻¹ + u₂⁻¹ * (u₁⁻¹ * u₁) * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * 1 * u₁⁻¹ + u₂⁻¹ * 1 * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₁⁻¹ + u₂⁻¹ * 1 * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₂ * (u₂⁻¹ * u₁⁻¹) + u₂⁻¹ * u₁⁻¹ * (u₁ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a * u₁⁻¹ + u₂⁻¹ * b = a * u₁⁻¹ + u₂⁻¹ * b

Goals accomplished! 🐙
-- porting note: `assoc_rw` not ported: `assoc_rw [mul_inv, mul_inv, mul_one, mul_one]` #align units.divp_add_divp
Units.divp_add_divp: ∀ {α : Type u} [inst : CommRing α] (a b : α) (u₁ u₂ : αˣ), a /ₚ u₁ + b /ₚ u₂ = (a * u₂ + u₁ * b) /ₚ (u₁ * u₂)
Units.divp_add_divp
@[field_simps] theorem
divp_sub_divp: ∀ {α : Type u} [inst : CommRing α] (a b : α) (u₁ u₂ : αˣ), a /ₚ u₁ - b /ₚ u₂ = (a * u₂ - u₁ * b) /ₚ (u₁ * u₂)
divp_sub_divp
[
CommRing: Type ?u.15008 → Type ?u.15008
CommRing
α: Type u
α
] (
a: α
a
b: α
b
:
α: Type u
α
) (
u₁: αˣ
u₁
u₂: αˣ
u₂
:
α: Type u
α
ˣ) :
a: α
a
/ₚ
u₁: αˣ
u₁
-
b: α
b
/ₚ
u₂: αˣ
u₂
= (
a: α
a
*
u₂: αˣ
u₂
-
u₁: αˣ
u₁
*
b: α
b
) /ₚ (
u₁: αˣ
u₁
*
u₂: αˣ
u₂
) :=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: CommRing α

a, b: α

u₁, u₂: αˣ


a /ₚ u₁ - b /ₚ u₂ = (a * u₂ - u₁ * b) /ₚ (u₁ * u₂)

Goals accomplished! 🐙
#align units.divp_sub_divp
Units.divp_sub_divp: ∀ {α : Type u} [inst : CommRing α] (a b : α) (u₁ u₂ : αˣ), a /ₚ u₁ - b /ₚ u₂ = (a * u₂ - u₁ * b) /ₚ (u₁ * u₂)
Units.divp_sub_divp
theorem
add_eq_mul_one_add_div: ∀ [inst : Semiring R] {a : Rˣ} {b : R}, a + b = a * (1 + a⁻¹ * b)
add_eq_mul_one_add_div
[
Semiring: Type ?u.16742 → Type ?u.16742
Semiring
R: Type x
R
] {
a: Rˣ
a
:
R: Type x
R
ˣ} {
b: R
b
:
R: Type x
R
} : ↑
a: Rˣ
a
+
b: R
b
=
a: Rˣ
a
* (
1: ?m.16789
1
+ ↑
a: Rˣ
a
⁻¹ *
b: R
b
) :=

Goals accomplished! 🐙
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * 1 + a * (a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a + a * (a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a + a * a⁻¹ * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a + 1 * b
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a * (1 + a⁻¹ * b)
α: Type u

β: Type v

γ: Type w

R: Type x

inst✝: Semiring R

a: Rˣ

b: R


a + b = a + b

Goals accomplished! 🐙
#align units.add_eq_mul_one_add_div
Units.add_eq_mul_one_add_div: ∀ {R : Type x} [inst : Semiring R] {a : Rˣ} {b : R}, a + b = a * (1 + a⁻¹ * b)
Units.add_eq_mul_one_add_div
end Units