|
| 1 | +------------------------------------------------------------------------ |
| 2 | +-- The Chinese Remainder Theorem for arbitrary rings |
| 3 | +-- |
| 4 | +-- The Agda standard library |
| 5 | +------------------------------------------------------------------------ |
| 6 | + |
| 7 | +{-# OPTIONS --safe --cubical-compatible #-} |
| 8 | + |
| 9 | +open import Algebra.Bundles |
| 10 | + |
| 11 | +module Algebra.Construct.Quotient.Ring.Properties.ChineseRemainderTheorem {c ℓ} (R : Ring c ℓ) where |
| 12 | + |
| 13 | +open Ring R |
| 14 | + |
| 15 | +import Algebra.Construct.DirectProduct as DP |
| 16 | +open import Algebra.Construct.Quotient.Ring as QR using (quotientRawRing) |
| 17 | +open import Algebra.Ideal R |
| 18 | +open import Algebra.Ideal.Coprimality R using (Coprime) |
| 19 | +open import Algebra.Ideal.Construct.Intersection R |
| 20 | +open import Algebra.Morphism.Structures |
| 21 | +open import Algebra.Properties.Ring R |
| 22 | +open import Data.Product.Base |
| 23 | +open import Relation.Binary.Reasoning.Setoid setoid |
| 24 | + |
| 25 | +module _ |
| 26 | + {c₁ c₂ ℓ₁ ℓ₂} |
| 27 | + (I : Ideal c₁ ℓ₁) (J : Ideal c₂ ℓ₂) |
| 28 | + where |
| 29 | + |
| 30 | + private |
| 31 | + module I = Ideal I |
| 32 | + module J = Ideal J |
| 33 | + |
| 34 | + CRT : Coprime I J → IsRingIsomorphism (quotientRawRing R (I ∩ J)) (DP.rawRing (quotientRawRing R I) (quotientRawRing R J)) λ x → x , x |
| 35 | + CRT ((m , n) , m+n≈1) = record |
| 36 | + { isRingMonomorphism = record |
| 37 | + { isRingHomomorphism = record |
| 38 | + { isSemiringHomomorphism = record |
| 39 | + { isNearSemiringHomomorphism = record |
| 40 | + { +-isMonoidHomomorphism = record |
| 41 | + { isMagmaHomomorphism = record |
| 42 | + { isRelHomomorphism = record |
| 43 | + { cong = λ { (t R/I∩J.by p) → (ICarrier.a t R/I.by p) , (ICarrier.b t R/J.by trans p (ICarrier.a≈b t)) } |
| 44 | + } |
| 45 | + ; homo = λ x y → R/I.≋-refl , R/J.≋-refl |
| 46 | + } |
| 47 | + ; ε-homo = R/I.≋-refl , R/J.≋-refl |
| 48 | + } |
| 49 | + ; *-homo = λ x y → R/I.≋-refl , R/J.≋-refl |
| 50 | + } |
| 51 | + ; 1#-homo = R/I.≋-refl , R/J.≋-refl |
| 52 | + } |
| 53 | + ; -‿homo = λ x → R/I.≋-refl , R/J.≋-refl |
| 54 | + } |
| 55 | + ; injective = λ {((i R/I.by p) , (j R/J.by q)) → record { a≈b = trans (sym p) q } R/I∩J.by p} |
| 56 | + } |
| 57 | + ; surjective = λ (a₁ , a₂) → a₁ * J.ι n + a₂ * I.ι m , λ {z} → λ |
| 58 | + { (record {a = a; b = b; a≈b = a≈b} R/I∩J.by p) → record |
| 59 | + { fst = a I.I.+ᴹ (a₂ - a₁) I.I.*ₗ m R/I.by begin |
| 60 | + -- introduce a coprimality term |
| 61 | + z - a₁ ≈⟨ +-congˡ (-‿cong (*-identityʳ a₁)) ⟨ |
| 62 | + z - a₁ * 1# ≈⟨ +-congˡ (-‿cong (*-congˡ m+n≈1)) ⟨ |
| 63 | + -- lots and lots of rearrangement |
| 64 | + z - a₁ * (I.ι m + J.ι n) ≈⟨ +-congˡ (-‿cong (distribˡ a₁ (I.ι m) (J.ι n))) ⟩ |
| 65 | + z - (a₁ * I.ι m + a₁ * J.ι n) ≈⟨ +-congˡ (-‿cong (+-comm (a₁ * I.ι m) (a₁ * J.ι n))) ⟩ |
| 66 | + z - (a₁ * J.ι n + a₁ * I.ι m) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-identityʳ (a₁ * J.ι n)))) ⟨ |
| 67 | + z - (a₁ * J.ι n + 0# + a₁ * I.ι m) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-congˡ (-‿inverseʳ (a₂ * I.ι m))))) ⟨ |
| 68 | + z - (a₁ * J.ι n + (a₂ * I.ι m - a₂ * I.ι m) + a₁ * I.ι m) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-assoc _ _ _))) ⟨ |
| 69 | + z - (a₁ * J.ι n + a₂ * I.ι m - a₂ * I.ι m + a₁ * I.ι m) ≈⟨ +-congˡ (-‿cong (+-assoc _ _ _)) ⟩ |
| 70 | + z - (a₁ * J.ι n + a₂ * I.ι m + (- (a₂ * I.ι m) + a₁ * I.ι m)) ≈⟨ +-congˡ (-‿+-comm _ _) ⟨ |
| 71 | + z + (- (a₁ * J.ι n + a₂ * I.ι m) - (- (a₂ * I.ι m) + a₁ * I.ι m)) ≈⟨ +-assoc z _ _ ⟨ |
| 72 | + z - (a₁ * J.ι n + a₂ * I.ι m) - (- (a₂ * I.ι m) + a₁ * I.ι m) ≈⟨ +-congˡ (-‿+-comm _ _) ⟨ |
| 73 | + z - (a₁ * J.ι n + a₂ * I.ι m) + (- - (a₂ * I.ι m) - a₁ * I.ι m) ≈⟨ +-congˡ (+-congʳ (-‿involutive _)) ⟩ |
| 74 | + z - (a₁ * J.ι n + a₂ * I.ι m) + (a₂ * I.ι m - a₁ * I.ι m) ≈⟨ +-congˡ ([y-z]x≈yx-zx _ _ _) ⟨ |
| 75 | + -- substitute z-t |
| 76 | + z - (a₁ * J.ι n + a₂ * I.ι m) + (a₂ - a₁) * I.ι m ≈⟨ +-congʳ p ⟩ |
| 77 | + -- show we're in I |
| 78 | + I.ι a + (a₂ - a₁) * I.ι m ≈⟨ +-congˡ (I.ι.*ₗ-homo (a₂ - a₁) m) ⟨ |
| 79 | + I.ι a + I.ι ((a₂ - a₁) I.I.*ₗ m) ≈⟨ I.ι.+ᴹ-homo a _ ⟨ |
| 80 | + I.ι (a I.I.+ᴹ (a₂ - a₁) I.I.*ₗ m) ∎ |
| 81 | + ; snd = b J.I.+ᴹ (a₁ - a₂) J.I.*ₗ n R/J.by begin |
| 82 | + -- introduce a coprimality term |
| 83 | + z - a₂ ≈⟨ +-congˡ (-‿cong (*-identityʳ a₂)) ⟨ |
| 84 | + z - a₂ * 1# ≈⟨ +-congˡ (-‿cong (*-congˡ m+n≈1)) ⟨ |
| 85 | + -- lots and lots of rearrangement |
| 86 | + z - a₂ * (I.ι m + J.ι n) ≈⟨ +-congˡ (-‿cong (distribˡ a₂ (I.ι m) (J.ι n))) ⟩ |
| 87 | + z - (a₂ * I.ι m + a₂ * J.ι n) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-identityʳ (a₂ * I.ι m)))) ⟨ |
| 88 | + z - (a₂ * I.ι m + 0# + a₂ * J.ι n) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-congˡ (-‿inverseʳ (a₁ * J.ι n))))) ⟨ |
| 89 | + z - (a₂ * I.ι m + (a₁ * J.ι n - a₁ * J.ι n) + a₂ * J.ι n) ≈⟨ +-congˡ (-‿cong (+-congʳ (+-assoc (a₂ * I.ι m) (a₁ * J.ι n) _))) ⟨ |
| 90 | + z - (a₂ * I.ι m + a₁ * J.ι n - a₁ * J.ι n + a₂ * J.ι n) ≈⟨ +-congˡ (-‿cong (+-assoc (a₂ * I.ι m + a₁ * J.ι n) (- (a₁ * J.ι n)) _)) ⟩ |
| 91 | + z - (a₂ * I.ι m + a₁ * J.ι n + (- (a₁ * J.ι n) + a₂ * J.ι n)) ≈⟨ +-congˡ (-‿+-comm (a₂ * I.ι m + a₁ * J.ι n) (- (a₁ * J.ι n) + a₂ * J.ι n)) ⟨ |
| 92 | + z + (- (a₂ * I.ι m + a₁ * J.ι n) - (- (a₁ * J.ι n) + a₂ * J.ι n)) ≈⟨ +-assoc z (- (a₂ * I.ι m + a₁ * J.ι n)) (- (- (a₁ * J.ι n) + a₂ * J.ι n)) ⟨ |
| 93 | + z - (a₂ * I.ι m + a₁ * J.ι n) - (- (a₁ * J.ι n) + a₂ * J.ι n) ≈⟨ +-cong (+-congˡ (-‿cong (+-comm _ _))) (-‿cong (+-congˡ (-‿involutive _))) ⟨ |
| 94 | + z - (a₁ * J.ι n + a₂ * I.ι m) - (- (a₁ * J.ι n) - - (a₂ * J.ι n)) ≈⟨ +-congˡ (-‿cong (-‿+-comm (a₁ * J.ι n) (- (a₂ * J.ι n)))) ⟩ |
| 95 | + z - (a₁ * J.ι n + a₂ * I.ι m) - - (a₁ * J.ι n - a₂ * J.ι n) ≈⟨ +-congˡ (-‿involutive (a₁ * J.ι n - a₂ * J.ι n)) ⟩ |
| 96 | + z - (a₁ * J.ι n + a₂ * I.ι m) + (a₁ * J.ι n - a₂ * J.ι n) ≈⟨ +-congˡ ([y-z]x≈yx-zx (J.ι n) a₁ a₂) ⟨ |
| 97 | + -- substitute z-t |
| 98 | + z - (a₁ * J.ι n + a₂ * I.ι m) + (a₁ - a₂) * J.ι n ≈⟨ +-congʳ (trans p a≈b) ⟩ |
| 99 | + -- show we're in I |
| 100 | + J.ι b + (a₁ - a₂) * J.ι n ≈⟨ +-congˡ (J.ι.*ₗ-homo (a₁ - a₂) n) ⟨ |
| 101 | + J.ι b + J.ι ((a₁ - a₂) J.I.*ₗ n) ≈⟨ J.ι.+ᴹ-homo b ((a₁ - a₂) J.I.*ₗ n) ⟨ |
| 102 | + J.ι (b J.I.+ᴹ (a₁ - a₂) J.I.*ₗ n) ∎ |
| 103 | + } |
| 104 | + } |
| 105 | + } |
| 106 | + where |
| 107 | + module R/I = QR R I |
| 108 | + module R/J = QR R J |
| 109 | + module R/I∩J = QR R (I ∩ J) |
0 commit comments