Idempotents #
This file defines idempotents for an arbitrary multiplication and proves some basic results, including:
IsIdempotentElem.mul_of_commute
: In a semigroup, the product of two commuting idempotents is an idempotent;IsIdempotentElem.one_sub_iff
: In a (non-associative) ring,p
is an idempotent if and only if1-p
is an idempotent.IsIdempotentElem.pow_succ_eq
: In a monoidp ^ (n+1) = p
forp
an idempotent andn
a natural number.
Tags #
projection, idempotent
An element p
is said to be idempotent if p * p = p
Equations
- IsIdempotentElem p = (p * p = p)
Instances For
theorem
IsIdempotentElem.of_isIdempotent
{M : Type u_1}
[Mul M]
[Std.IdempotentOp fun (x x_1 : M) => x * x_1]
(a : M)
:
theorem
IsIdempotentElem.mul_of_commute
{S : Type u_3}
[Semigroup S]
{p : S}
{q : S}
(h : Commute p q)
(h₁ : IsIdempotentElem p)
(h₂ : IsIdempotentElem q)
:
IsIdempotentElem (p * q)
theorem
IsIdempotentElem.one_sub
{R : Type u_6}
[NonAssocRing R]
{p : R}
(h : IsIdempotentElem p)
:
IsIdempotentElem (1 - p)
@[simp]
theorem
IsIdempotentElem.one_sub_iff
{R : Type u_6}
[NonAssocRing R]
{p : R}
:
IsIdempotentElem (1 - p) ↔ IsIdempotentElem p
theorem
IsIdempotentElem.pow
{N : Type u_2}
[Monoid N]
{p : N}
(n : ℕ)
(h : IsIdempotentElem p)
:
IsIdempotentElem (p ^ n)
theorem
IsIdempotentElem.pow_succ_eq
{N : Type u_2}
[Monoid N]
{p : N}
(n : ℕ)
(h : IsIdempotentElem p)
:
@[simp]
@[simp]
theorem
IsIdempotentElem.iff_eq_zero_or_one
{G₀ : Type u_8}
[CancelMonoidWithZero G₀]
{p : G₀}
:
IsIdempotentElem p ↔ p = 0 ∨ p = 1
Instances on Subtype IsIdempotentElem
#
instance
IsIdempotentElem.instZeroSubtypeIsIdempotentElemToMul
{M₀ : Type u_4}
[MulZeroClass M₀]
:
Zero { p : M₀ // IsIdempotentElem p }
Equations
- IsIdempotentElem.instZeroSubtypeIsIdempotentElemToMul = { zero := { val := 0, property := ⋯ } }
instance
IsIdempotentElem.instOneSubtypeIsIdempotentElemToMul
{M₁ : Type u_5}
[MulOneClass M₁]
:
One { p : M₁ // IsIdempotentElem p }
Equations
- IsIdempotentElem.instOneSubtypeIsIdempotentElemToMul = { one := { val := 1, property := ⋯ } }
instance
IsIdempotentElem.instHasComplSubtypeIsIdempotentElemToMulToNonUnitalNonAssocRing
{R : Type u_6}
[NonAssocRing R]
:
HasCompl { p : R // IsIdempotentElem p }
Equations
- IsIdempotentElem.instHasComplSubtypeIsIdempotentElemToMulToNonUnitalNonAssocRing = { compl := fun (p : { p : R // IsIdempotentElem p }) => { val := 1 - ↑p, property := ⋯ } }
@[simp]
theorem
IsIdempotentElem.coe_compl
{R : Type u_6}
[NonAssocRing R]
(p : { p : R // IsIdempotentElem p })
:
@[simp]
theorem
IsIdempotentElem.compl_compl
{R : Type u_6}
[NonAssocRing R]
(p : { p : R // IsIdempotentElem p })
: