[Agda] Re: Data.Nat.Primality.Prime and irreducibility

Sergei Meshveliani mechvel at botik.ru
Sat Mar 7 15:55:53 CET 2015


On Sat, 2015-03-07 at 10:27 +0530, N. Raghavendra wrote:
> At 2015-03-07T12:21:33+08:00, Dr. ERDI Gergo wrote:
> 
> > Would it make sense to add Irreducible to the standard library? Here's
> > the generalization I have in mind:
> 
> I too feel it'd be good to have the general notion of irreducible
> element in stdlib.
> 
> > open import Algebra
> > open import Relation.Nullary
> > open import Data.Sum
> > open import Level using (Level; _⊔_)
> > import Algebra.FunctionProperties
> >
> > module _ {c ℓ : Level} (R : Algebra.CommutativeSemiring c ℓ) where
> 
> All you need is a monoid structure to define irreducible element.  Most
> books I've seen assume that the monoid is cancellative and commutative.
> That's needed in the proofs of some statements, but isn't necessary for
> the definition to make sense.
> 
> > data Irreducible (n : Carrier) : Set (ℓ ⊔ c) where
> >   irreducible : (not0 : ¬ is0 n) → (not1 : ¬ is1 n) →
> >                 (prf : ∀ x y → ≈ x * y → is1 x ⊎ is1 y) →
> >                 Irreducible n
> 
> module _ {c ℓ : Level} (R : Algebra.CommutativeMonoid c ℓ) where
> 
> ...
> 
> data Irreducible (n : Carrier) : Set (ℓ ⊔ c) where
>   irreducible : (notUnit : ¬ isUnit n) →
>                 (prf : ∀ x y → n ≈ x * y → isUnit x ⊎ isUnit y) →
>                 Irreducible n
> 
> where isUnit n means that n . m ~ e for some m, where e is the identity
> element of the monoid.
> 
> A lot of the basic stuff about divisibility, irreducibility, primality,
> coprimality, gcd, lcm, etc., can be done for cancellative commutative
> monoids, as in, e.g., Jacobson's Basic Algebra, vol. 1, section 2.14
> (Factorial monoids and rings).  I think it'd be nice to have that
> generality in stdlib.
> 
> []

1) Consider the ring  R = Integer/(6)   (Integer modulo 6).
It has CommutativeMonoid for _*_,  and CommutativeSemiring  too.
According to the above suggestions, we have 

  [2] ≈ [2] * [4]   in R.   

So [2] occurs reducible in R, is has "reduced" to the two non-unit
factors:  [2] and [4].

This definition looks counter-intuitive.

This is why it is desirable

1) to define  IntegralRing  as a CommutativeRing  
   in which it holds 
                      x * y ≈ 0  → x ≈ 0 ⊎ y ≈ 0
   ("no zero divisors")
   and to consider irreducibility only for an  IntegralRing,

2) to add the condition   ¬0 : ¬ n ≈ #0  to the definition if
irreducibility.

See textbooks on Algebra:  Wan Der Waerden, and such.

Regards,

------
Sergei





More information about the Agda mailing list