ยซ Home

Ring Theory [alg-0001]

Definition. ็’ฐ Ring [ring-0000]

module ring-0000 where

open import MLTT.Spartan
open import UF.Sets
record Ring (R : ๐“ค ฬ‡ ) : ๐“ค ฬ‡ where
  field
    size : is-set R

    _โŠ•_ : R โ†’ R โ†’ R
    ๐Ÿ˜R : R
    โŠ•-assoc : associative _โŠ•_
    0l-neu : left-neutral ๐Ÿ˜R _โŠ•_
    0r-neu : right-neutral ๐Ÿ˜R _โŠ•_
    -_ : R โ†’ R
    cancel : {x : R} โ†’ (- x โŠ• x ๏ผ ๐Ÿ˜R) ร— (x โŠ• - x ๏ผ ๐Ÿ˜R)
    โŠ•-comm : {a b : R} โ†’ a โŠ• b ๏ผ b โŠ• a

    _โŠ—_ : R โ†’ R โ†’ R
    โŠ—-assoc : associative _โŠ—_

    ๐Ÿ™R : R
    1l-neu : left-neutral ๐Ÿ™R _โŠ—_
    1r-neu : right-neutral ๐Ÿ™R _โŠ—_

    distrib1 : {r s t : R} โ†’ (r โŠ• s) โŠ— t ๏ผ (r โŠ— t) โŠ• (s โŠ— t)
    distrib2 : {r s t : R} โ†’ t โŠ— (r โŠ• s) ๏ผ (t โŠ— r) โŠ• (t โŠ— s)

  infixl 30 _โŠ•_
  infixl 40 _โŠ—_
  infixl 50 -_

ไธ‹้ข้€™ๅ€‹ๅ‘ฝ้กŒๆ˜ฏๅ› ็‚บ (R,โ€†โŠ•,โ€†0R) ไนŸๅฏไปฅ็œ‹ๆˆไธ€ๅ€‹ commutative group๏ผŒๅ› ๆญคไนŸๅฏไปฅๅ–ๆถˆๅ…ฑ็›ธๅŠ ็š„ๅ…ƒ็ด ไพ†ๅพ—ๅˆฐ็ตๆžœใ€‚ๅ…ถๅฏฆๅฐฑๆ˜ฏใ€Œ่‹ฅ xโ€…+โ€…2โ€„=โ€„yโ€…+โ€…2 ๅ‰‡ xโ€„=โ€„yใ€

open Ring {{...}}
ring-cancel-right : {R : ๐“ค ฬ‡ } โ†’ {{_ : Ring R}} {r s t : R} โ†’ s โŠ• r ๏ผ t โŠ• r โ†’ s ๏ผ t
ring-cancel-right {R}{_} {r}{s}{t} fact =
  s             ๏ผโŸจ 0r-neu s โปยน โŸฉ
  s โŠ• ๐Ÿ˜R        ๏ผโŸจ ap (s โŠ•_) (cancel .prโ‚‚ โปยน) โŸฉ
  s โŠ• (r โŠ• - r) ๏ผโŸจ โŠ•-assoc s r (- r) โปยน โŸฉ
  s โŠ• r โŠ• - r   ๏ผโŸจ ap (_โŠ• - r) fact โŸฉ
  t โŠ• r โŠ• - r   ๏ผโŸจ โŠ•-assoc t r (- r) โŸฉ
  t โŠ• (r โŠ• - r) ๏ผโŸจ ap (t โŠ•_) (cancel .prโ‚‚) โŸฉ
  t โŠ• ๐Ÿ˜R        ๏ผโŸจ 0r-neu t โŸฉ
  t โˆŽ

Example. trivial ring [ring-0001]

module ring-0001 where

open import MLTT.Spartan
open import UF.Subsingletons
open import UF.Subsingletons-Properties

open import ring-0000
open Ring {{...}}

Trivial ring ๅฐฑๅƒๅ‰้ข็พค่ซ–ๆ้Ž็š„ trivial group๏ผŒๅœจ trivial ring ่ฃกๅŠ ๆณ•ใ€ไน˜ๆณ•้ƒฝไธ€ๆจฃ๏ผŒๅ› ็‚บไฝœ็‚บๅชๆœ‰ไธ€ๅ€‹ๅ…ƒ็ด ็š„้›†ๅˆ๏ผŒ่ƒฝ้ธๆ“‡็š„ n-ๅ…ƒ้‹็ฎ—้ƒฝๅชๆœ‰ไธ€ๅ€‹ใ€‚ ไนŸๅ› ๆญคไธ‹้ข็š„ terms ๅนพไนŽ้ƒฝๅฏไปฅ็”ฑ agda ่‡ชๅ‹•ๅกซๆปฟ

trivial-ring : Ring (๐Ÿ™ {๐“ค})
trivial-ring .size = props-are-sets ๐Ÿ™-is-prop
trivial-ring ._โŠ•_ _ _ = โ‹†
trivial-ring .๐Ÿ˜R = โ‹†
trivial-ring .โŠ•-assoc = ฮป x y z โ†’ refl
trivial-ring .0l-neu = ฮป x โ†’ refl
trivial-ring .0r-neu = ฮป x โ†’ refl
trivial-ring .-_ _ = โ‹†
trivial-ring .cancel = refl , refl
trivial-ring .โŠ•-comm = refl
trivial-ring ._โŠ—_ _ _ = โ‹†
trivial-ring .โŠ—-assoc = ฮป x y z โ†’ refl
trivial-ring .๐Ÿ™R = โ‹†
trivial-ring .1l-neu = ฮป x โ†’ refl
trivial-ring .1r-neu = ฮป x โ†’ refl
trivial-ring .distrib1 = refl
trivial-ring .distrib2 = refl

Lemma. Multiply 0 is 0 [ring-0002]

module ring-0002 where

open import MLTT.Spartan

open import ring-0000
open Ring {{...}}
lemma-1 : {R : ๐“ค ฬ‡ } {{_ : Ring R}} โ†’ (r : R) โ†’ (r โŠ— ๐Ÿ˜R ๏ผ ๐Ÿ˜R) ร— (๐Ÿ˜R โŠ— r ๏ผ ๐Ÿ˜R)
lemma-1 r = (ring-cancel-right I โปยน) , (ring-cancel-right II โปยน)
  where
  I : ๐Ÿ˜R โŠ• r โŠ— ๐Ÿ˜R ๏ผ r โŠ— ๐Ÿ˜R โŠ• r โŠ— ๐Ÿ˜R
  I =
    ๐Ÿ˜R โŠ• r โŠ— ๐Ÿ˜R   ๏ผโŸจ 0l-neu (r โŠ— ๐Ÿ˜R) โŸฉ
    r โŠ— ๐Ÿ˜R        ๏ผโŸจ ap (r โŠ—_) (0l-neu ๐Ÿ˜R โปยน) โŸฉ
    r โŠ— (๐Ÿ˜R โŠ• ๐Ÿ˜R) ๏ผโŸจ distrib2 โŸฉ
    r โŠ— ๐Ÿ˜R โŠ• r โŠ— ๐Ÿ˜R โˆŽ

  II : ๐Ÿ˜R โŠ• ๐Ÿ˜R โŠ— r ๏ผ ๐Ÿ˜R โŠ— r โŠ• ๐Ÿ˜R โŠ— r
  II =
    ๐Ÿ˜R โŠ• ๐Ÿ˜R โŠ— r   ๏ผโŸจ 0l-neu (๐Ÿ˜R โŠ— r) โŸฉ
    ๐Ÿ˜R โŠ— r        ๏ผโŸจ ap (_โŠ— r) (0l-neu ๐Ÿ˜R โปยน) โŸฉ
    (๐Ÿ˜R โŠ• ๐Ÿ˜R) โŠ— r ๏ผโŸจ distrib1 โŸฉ
    ๐Ÿ˜R โŠ— r โŠ• ๐Ÿ˜R โŠ— r โˆŽ

Proposition. ่ฒ ่ฒ ๅพ—ๆญฃ [ring-0003]

module ring-0003 where

open import MLTT.Spartan

open import ring-0000
open Ring {{...}}
open import ring-0002

่ฒ ่ฒ ๅพ—ๆญฃ้€šๅธธๅฏ่ƒฝๅœจ่ชชๅ…ฉไปถไบ‹ใ€‚็ฌฌไธ€๏ผŒโˆ’โ€…โˆ’โ€…aโ€„=โ€„a๏ผŒๅ› ็‚บ โˆ’a ็š„ๅๅ…ƒ็ด ๆ˜ฏ a ไนŸๅฏไปฅๆ˜ฏ โˆ’โ€…โˆ’โ€…a๏ผŒๅ› ๆญค โˆ’โ€…โˆ’โ€…a ไธ€ๅฎš็ญ‰ๆ–ผ a๏ผˆๅ› ็‚บ Ring ็š„ๅŠ ๆณ•้ƒจๅˆ†ๆ˜ฏไธ€ๅ€‹ commutative group๏ผ‰ใ€‚

neg-neg-lemma : {R : ๐“ค ฬ‡ } {{_ : Ring R}} (x : R) โ†’ - - x ๏ผ x
neg-neg-lemma x = ring-cancel-right (I โˆ™ II โปยน)
  where
  I : - - x โŠ• - x ๏ผ ๐Ÿ˜R
  I = cancel .prโ‚
  II : x โŠ• - x ๏ผ ๐Ÿ˜R
  II = cancel .prโ‚‚

ๆˆ–ๆ˜ฏๆ›ด้‡่ฆ็š„ โˆ’aโ€…ร—โ€…โˆ’bโ€„=โ€„aโ€…ร—โ€…b๏ผŒไนŸๅฐฑๆ˜ฏ้€™่ฃก่ฆ่ญ‰ๆ˜Ž็š„ๅ‘ฝ้กŒ

neg-lemma-left : {R : ๐“ค ฬ‡ } {{_ : Ring R}} (a b : R) โ†’ - a โŠ— b ๏ผ - (a โŠ— b)
neg-lemma-left a b = ring-cancel-right (II โˆ™ I โปยน)
  where
  I : (- (a โŠ— b)) โŠ• a โŠ— b ๏ผ ๐Ÿ˜R
  I = (- (a โŠ— b)) โŠ• a โŠ— b ๏ผโŸจ cancel .prโ‚ โŸฉ
      ๐Ÿ˜R โˆŽ
  II : (- a โŠ— b) โŠ• a โŠ— b ๏ผ ๐Ÿ˜R
  II = (- a โŠ— b) โŠ• a โŠ— b ๏ผโŸจ distrib1 โปยน โŸฉ
      (- a โŠ• a) โŠ— b      ๏ผโŸจ ap (_โŠ— b) (cancel .prโ‚) โŸฉ
      ๐Ÿ˜R โŠ— b             ๏ผโŸจ lemma-1 b .prโ‚‚ โŸฉ
      ๐Ÿ˜R โˆŽ
neg-lemma-right : {R : ๐“ค ฬ‡ } {{_ : Ring R}} (a b : R) โ†’ a โŠ— - b ๏ผ - (a โŠ— b)
neg-lemma-right a b = ring-cancel-right (II โˆ™ I โปยน)
  where
  I : (- (a โŠ— b)) โŠ• a โŠ— b ๏ผ ๐Ÿ˜R
  I = cancel .prโ‚
  II : (a โŠ— - b) โŠ• a โŠ— b ๏ผ ๐Ÿ˜R
  II = (a โŠ— - b) โŠ• a โŠ— b ๏ผโŸจ distrib2 โปยน โŸฉ
      a โŠ— (- b โŠ• b)      ๏ผโŸจ ap (a โŠ—_) (cancel .prโ‚) โŸฉ
      a โŠ— ๐Ÿ˜R             ๏ผโŸจ lemma-1 a .prโ‚ โŸฉ
      ๐Ÿ˜R โˆŽ

proposition-2 : {R : ๐“ค ฬ‡ } {{_ : Ring R}} โ†’ (a b : R) โ†’ - a โŠ— - b ๏ผ a โŠ— b
proposition-2 {_}{R} a b =
  (- a โŠ— - b) ๏ผโŸจ neg-lemma-left a (- b) โŸฉ
  - (a โŠ— - b) ๏ผโŸจ ap -_ (neg-lemma-right a b) โŸฉ
  - - (a โŠ— b) ๏ผโŸจ neg-neg-lemma (a โŠ— b) โŸฉ
  a โŠ— b โˆŽ

Definition. Non zero-divisor [ring-0004]

module ring-0004 where

open import MLTT.Spartan

open import ring-0000
open Ring {{...}}

ไธ€ๅ€‹ Ring R ไธญ็š„ๅ…ƒ็ด  a ๆ˜ฏ zero divisor ๅฐฑ่กจ็คบๅญ˜ๅœจ bโ€„โ‰ โ€„0โ€„โˆˆโ€„R ไฝฟ abโ€„=โ€„0ใ€‚ ๆ‰€ไปฅๆˆ‘ๅ€‘็จฑ a ๆ˜ฏ non zero-divisor ๆŒ‡ๅฆ‚ๆžœ abโ€„=โ€„0๏ผŒ้‚ฃ b ไธ€ๅฎš็ญ‰ๆ–ผ 0ใ€‚

NonZeroDivisor : {R : ๐“ค ฬ‡ } {{_ : Ring R}} (a : R) โ†’ ๐“ค ฬ‡
NonZeroDivisor {_}{R} a = (b : R) โ†’ (a โŠ— b ๏ผ ๐Ÿ˜R โ†’ b ๏ผ ๐Ÿ˜R)

Proposition. Not zero divisor if and only if left action is injective [ring-0005]

aโˆˆRa \in R ไธๆ˜ฏ zero divisor ่‹ฅไธ”ๅ”ฏ่‹ฅๅ…ถ left action xโ†ฆaxx \mapsto a x ๆ˜ฏ injective๏ผˆไนŸๅฐฑๆ˜ฏ left-cancellable๏ผ‰

module ring-0005 where

open import MLTT.Spartan

open import ring-0000
open Ring {{...}}
open import ring-0002
open import ring-0003
open import ring-0004
left-action : {R : ๐“ค ฬ‡ } {{_ : Ring R}} (a : R) โ†’ R โ†’ R
left-action a x = a โŠ— x

proposition-3 : {R : ๐“ค ฬ‡ } {{_ : Ring R}} {a : R} โ†’
  (NonZeroDivisor a โ†’ left-cancellable (left-action a)) ร— (left-cancellable (left-action a) โ†’ NonZeroDivisor a)
proposition-3 {_}{R}{a} = if , only-if
  where
  if : NonZeroDivisor a โ†’ left-cancellable (left-action a)
  if is-not-zd {x}{y} Ax=Ay = ring-cancel-right (II โˆ™ III โปยน)
    where
    I : left-action a (x โŠ• - y) ๏ผ ๐Ÿ˜R
    I =
      left-action a (x โŠ• - y) ๏ผโŸจby-definitionโŸฉ
      a โŠ— (x โŠ• - y)           ๏ผโŸจ distrib2 โŸฉ
      a โŠ— x โŠ• a โŠ— - y         ๏ผโŸจ ap (a โŠ— x โŠ•_) (neg-lemma-right a y) โŸฉ
      a โŠ— x โŠ• - (a โŠ— y)       ๏ผโŸจ ap (_โŠ• - (a โŠ— y)) Ax=Ay โŸฉ
      a โŠ— y โŠ• - (a โŠ— y)       ๏ผโŸจ cancel .prโ‚‚ โŸฉ
      ๐Ÿ˜R โˆŽ
    II : x โŠ• - y ๏ผ ๐Ÿ˜R
    II = is-not-zd (x โŠ• - y) I
    III : y โŠ• - y ๏ผ ๐Ÿ˜R
    III = cancel .prโ‚‚
  only-if : left-cancellable (left-action a) โ†’ NonZeroDivisor a
  only-if inj b ab=0 = inj I
    where
    I : a โŠ— b ๏ผ a โŠ— ๐Ÿ˜R
    I = left-action a b ๏ผโŸจby-definitionโŸฉ
        a โŠ— b           ๏ผโŸจ ab=0 โŸฉ
        ๐Ÿ˜R              ๏ผโŸจ lemma-1 a .prโ‚ โปยน โŸฉ
        a โŠ— ๐Ÿ˜R          ๏ผโŸจby-definitionโŸฉ
        left-action a ๐Ÿ˜R โˆŽ