Documentation

RealClosedField.Algebra.Ring.IsFormallyReal

Formally real rings #

A ring R is formally real if, whenever ∑ i, x i ^ 2 = 0, in fact x i = 0 for all i.

We define formally real rings in an index-free manner using the inductive predicate IsSumNonzeroSq, which asserts that an element is a finite sum of squares of nonzero elements. A ring is then formally real if ¬ IsSumNonzeroSq 0.

Main declaration #

inductive IsSumNonzeroSq {R : Type u_1} [Mul R] [Add R] [Zero R] :
RProp

The property of being a sum of positive squares is defined inductively by: a * a : R is a sum of nonzero squares for all nonzero a, and if s : R is a sum of positive squares, and a ≠ 0, then a * a + s is a sum of positive squares.

Instances For
    theorem isSumNonzeroSq_iff {R : Type u_1} [Mul R] [Add R] [Zero R] (a✝ : R) :
    IsSumNonzeroSq a✝ (∃ (a : R), a 0 a✝ = a * a) ∃ (a : R) (s : R), a 0 IsSumNonzeroSq s a✝ = a * a + s
    theorem IsSumNonzeroSq.add {R : Type u_1} [AddMonoid R] [Mul R] {s₁ s₂ : R} (h₁ : IsSumNonzeroSq s₁) (h₂ : IsSumNonzeroSq s₂) :
    IsSumNonzeroSq (s₁ + s₂)
    theorem IsSumSq.isSumNonzeroSq {R : Type u_1} [AddMonoid R] [Mul R] {s : R} (h : IsSumNonzeroSq s) :

    Alias of the reverse direction of isSumNonzeroSq_iff_isSumSq.

    class IsFormallyReal (R : Type u_1) [AddCommMonoid R] [Mul R] :

    A ring is formally real if, whenever ∑ i, x i ^ 2 = 0, we in fact have x i = 0 for all i.

    Instances
      theorem IsFormallyReal.of_eq_zero_of_mul_self_of_eq_zero_of_add (R : Type u_1) [AddCommMonoid R] [Mul R] (hz : ∀ {a : R}, a * a = 0a = 0) (ha : ∀ {s₁ s₂ : R}, IsSumSq s₁IsSumSq s₂s₁ + s₂ = 0s₁ = 0) :
      theorem IsFormallyReal.of_eq_zero_of_eq_zero_of_mul_self_add (R : Type u_1) [NonUnitalNonAssocSemiring R] (h : ∀ {s a : R}, IsSumSq sa * a + s = 0a = 0) :
      theorem IsFormallyReal.eq_zero_of_add_right {R : Type u_1} [NonUnitalNonAssocSemiring R] [IsFormallyReal R] {s₁ s₂ : R} (hs₁ : IsSumSq s₁) (hs₂ : IsSumSq s₂) (h : s₁ + s₂ = 0) :
      s₁ = 0
      theorem IsFormallyReal.eq_zero_of_add_left {R : Type u_1} [NonUnitalNonAssocSemiring R] [IsFormallyReal R] {s₁ s₂ : R} (hs₁ : IsSumSq s₁) (hs₂ : IsSumSq s₂) (h : s₁ + s₂ = 0) :
      s₂ = 0