Skip to content

Commit 14025c1

Browse files
author
jake
authored
add group and ring rational properties (#1072)
1 parent 49fa098 commit 14025c1

File tree

8 files changed

+600
-22
lines changed

8 files changed

+600
-22
lines changed

CHANGELOG.md

Lines changed: 104 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,9 @@ Other major additions
277277

278278
* Added new modules:
279279
```agda
280+
Algebra.Morphism.GroupMonomorphism
281+
Algebra.Morphism.RingMonomorphism
282+
280283
Codata.Cowriter.Bisimilarity
281284
282285
Data.Erased
@@ -406,6 +409,20 @@ Other major additions
406409
Other minor additions
407410
---------------------
408411

412+
* Added new record to `Algebra.Bundles`:
413+
```
414+
+-rawGroup : RawGroup c ℓ
415+
```
416+
417+
* Added new records to `Algebra.Morphism.Structures`:
418+
```
419+
IsGroupHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
420+
IsGroupMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
421+
IsGroupIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
422+
IsRingHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
423+
IsRingMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
424+
IsRingIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
425+
409426
* Added new proof to `Data.Fin.Properties`:
410427
```agda
411428
inject+-raise-splitAt : [ inject+ n , raise {n} m ] (splitAt m i) ≡ i
@@ -734,23 +751,44 @@ Other minor additions
734751
toℚᵘ-isMagmaHomomorphism-* : IsMagmaHomomorphism *-rawMagma ℚᵘ.*-rawMagma toℚᵘ
735752
toℚᵘ-isMonoidHomomorphism-* : IsMonoidHomomorphism *-rawMonoid ℚᵘ.*-rawMonoid toℚᵘ
736753
toℚᵘ-isMonoidMonomorphism-* : IsMonoidMonomorphism *-rawMonoid ℚᵘ.*-rawMonoid toℚᵘ
754+
toℚᵘ-homo‿- : Homomorphic₁ toℚᵘ (-_) (ℚᵘ.-_)
755+
toℚᵘ-isGroupHomomorphism-+ : IsGroupHomomorphism +-0-rawGroup ℚᵘ.+-0-rawGroup toℚᵘ
756+
toℚᵘ-isGroupMonomorphism-+ : IsGroupMonomorphism +-0-rawGroup ℚᵘ.+-0-rawGroup toℚᵘ
757+
toℚᵘ-isRingHomomorphism-|-* : IsRingHomomorphism +-*-rawRing ℚᵘ.+-*-rawRing toℚᵘ
758+
toℚᵘ-isRingMonomorphism-|-* : IsRingMonomorphism +-*-rawRing ℚᵘ.+-*-rawRing toℚᵘ
737759
738760
*-assoc : Associative _*_
739761
*-comm : Commutative _*_
740762
*-identityˡ : LeftIdentity 1ℚ _*_
741763
*-identityʳ : RightIdentity 1ℚ _*_
742764
*-identity : Identity 1ℚ _*_
743-
765+
+-inverseˡ : LeftInverse 0ℚ -_ _+_
766+
+-inverseʳ : RightInverse 0ℚ -_ _+_
767+
+-inverse : Inverse 0ℚ -_ _+_
768+
-‿cong : Congruent₁ (-_)
769+
744770
*-isMagma : IsMagma _*_
745771
*-isSemigroup : IsSemigroup _*
746772
*-1-isMonoid : IsMonoid _*_ 1ℚ
747773
*-1-isCommutativeMonoid : IsCommutativeMonoid _*_ 1ℚ
748774
*-rawMagma : RawMagma 0ℓ 0ℓ
749775
*-rawMonoid : RawMonoid 0ℓ 0ℓ
776+
+-0-rawGroup : RawGroup 0ℓ 0ℓ
777+
+-*-rawRing : RawRing 0ℓ 0ℓ
778+
+-0-isGroup : IsGroup _+_ 0ℚ (-_)
779+
+-0-isAbelianGroup : IsAbelianGroup _+_ 0ℚ (-_)
780+
+-0-isRing : IsRing _+_ _*_ -_ 0ℚ 1ℚ
781+
+-0-group : Group 0ℓ 0ℓ
782+
+-0-abelianGroup : AbelianGroup 0ℓ 0ℓ
783+
*-distribˡ-+ : _*_ DistributesOverˡ _+_
784+
*-distribʳ-+ : _*_ DistributesOverʳ _+_
785+
*-distrib-+ : _*_ DistributesOver _+_
750786
*-magma : Magma 0ℓ 0ℓ
751787
*-semigroup : Semigroup 0ℓ 0ℓ
752788
*-1-monoid : Monoid 0ℓ 0ℓ
753789
*-1-commutativeMonoid : CommutativeMonoid 0ℓ 0ℓ
790+
+-*-isRing : IsRing _+_ _*_ -_ 0ℚ 1ℚ
791+
+-*-ring : Ring 0ℓ 0ℓ
754792
```
755793

756794
* Added new proofs to `Data.Rational.Unnormalised.Properties`:
@@ -763,12 +801,69 @@ Other minor additions
763801
+-0-group : Group 0ℓ 0ℓ
764802
+-0-isAbelianGroup : IsAbelianGroup _≃_ _+_ 0ℚᵘ (-_)
765803
+-0-abelianGroup : AbelianGroup 0ℓ 0ℓ
766-
*-zeroˡ : LeftZero _≃_ 0ℚᵘ _*_
767-
*-zeroʳ : RightZero _≃_ 0ℚᵘ _*_
768-
*-zero : Zero _≃_ 0ℚᵘ _*_
769-
*-distribˡ-+ : _DistributesOverˡ_ _≃_ _*_ _+_
770-
*-distribʳ-+ : _DistributesOverʳ_ _≃_ _*_ _+_
771-
*-distrib-+ : _DistributesOver_ _≃_ _*_ _+_
772-
+-*-isRing : IsRing _≃_ _+_ _*_ -_ 0ℚᵘ 1ℚ
773-
+-*-ring : Ring 0ℓ 0ℓ
804+
*-zeroˡ : LeftZero _≃_ 0ℚᵘ _*_
805+
*-zeroʳ : RightZero _≃_ 0ℚᵘ _*_
806+
*-zero : Zero _≃_ 0ℚᵘ _*_
807+
*-distribˡ-+ : _DistributesOverˡ_ _≃_ _*_ _+_
808+
*-distribʳ-+ : _DistributesOverʳ_ _≃_ _*_ _+_
809+
*-distrib-+ : _DistributesOver_ _≃_ _*_ _+_
810+
+-*-isRing : IsRing _≃_ _+_ _*_ -_ 0ℚᵘ 1ℚ
811+
+-*-ring : Ring 0ℓ 0ℓ
812+
+-0-rawGroup : RawGroup 0ℓ 0ℓ
813+
+-*-rawRing : RawRing 0ℓ 0ℓ
814+
+-*-isCommutativeRing : IsCommutativeRing _≃_ _+_ _*_ -_ 0ℚᵘ 1ℚᵘ
815+
+-*-commutativeRing : CommutativeRing 0ℓ 0ℓ
816+
```
817+
818+
* Added convenience functions to `Data.String.Base`:
819+
```agda
820+
parens : String → String
821+
braces : String → String
822+
intersperse : String → List String → String
823+
unwords : List String → String
824+
_<+>_ : String → String → String -- space-introducing append
774825
```
826+
827+
Version 2.6.1 changes
828+
=====================
829+
830+
* New modules
831+
```agda
832+
Data.Float.Base
833+
Data.Float.Properties
834+
835+
Data.Word.Base
836+
Data.Word.Properties
837+
838+
Reflection.Abstraction
839+
Reflection.Argument
840+
Reflection.Argument.Information
841+
Reflection.Argument.Relevance
842+
Reflection.Argument.Visibility
843+
Reflection.Definition
844+
Reflection.Literal
845+
Reflection.Meta
846+
Reflection.Name
847+
Reflection.Pattern
848+
Reflection.Term
849+
```
850+
851+
* The modules `Data.Word.Unsafe` and `Data.Float.Unsafe` have been removed
852+
as there are no longer any unsafe operations.
853+
854+
* Decidable equality over floating point numbers has been made safe and
855+
so `_≟_` has been moved from `Data.Float.Unsafe` to `Data.Float.Properties`.
856+
857+
* Added new definitions to `Data.Word.Base`:
858+
```agda
859+
_≈_ : Rel Word64 zero
860+
_<_ : Rel Word64 zero
861+
```
862+
863+
* Decidable equality over words has been made safe and so `_≟_` has been
864+
moved from `Data.Word.Unsafe` to `Data.Word.Properties`.
865+
866+
* Added new definitions in `Relation.Binary.Core`:
867+
```agda
868+
DecidableEquality A = Decidable {A = A} _≡_
869+
```

src/Algebra/Bundles.agda

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ record Group c ℓ : Set (suc (c ⊔ ℓ)) where
267267

268268
open Monoid monoid public using (rawMagma; magma; semigroup; rawMonoid)
269269

270-
271270
record AbelianGroup c ℓ : Set (suc (c ⊔ ℓ)) where
272271
infix 8 _⁻¹
273272
infixl 7 _∙_
@@ -603,6 +602,20 @@ record RawRing c ℓ : Set (suc (c ⊔ ℓ)) where
603602
0# : Carrier
604603
1# : Carrier
605604

605+
+-rawGroup : RawGroup c ℓ
606+
+-rawGroup = record
607+
{ _≈_ = _≈_
608+
; _∙_ = _+_
609+
; ε = 0#
610+
; _⁻¹ = -_
611+
}
612+
613+
*-rawMonoid : RawMonoid c ℓ
614+
*-rawMonoid = record
615+
{ _≈_ = _≈_
616+
; _∙_ = _*_
617+
; ε = 1#
618+
}
606619

607620
record Ring c ℓ : Set (suc (c ⊔ ℓ)) where
608621
infix 8 -_
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Consequences of a monomorphism between group-like structures
5+
------------------------------------------------------------------------
6+
7+
-- See Data.Nat.Binary.Properties for examples of how this and similar
8+
-- modules can be used to easily translate properties between types.
9+
10+
{-# OPTIONS --without-K --safe #-}
11+
12+
open import Algebra.Bundles
13+
open import Algebra.Morphism.Structures
14+
open import Relation.Binary.Core
15+
16+
module Algebra.Morphism.GroupMonomorphism
17+
{a b ℓ₁ ℓ₂} {G₁ : RawGroup a ℓ₁} {G₂ : RawGroup b ℓ₂} {⟦_⟧}
18+
(isGroupMonomorphism : IsGroupMonomorphism G₁ G₂ ⟦_⟧)
19+
where
20+
21+
open IsGroupMonomorphism isGroupMonomorphism
22+
open RawGroup G₁ renaming
23+
(Carrier to A; _≈_ to _≈₁_; _∙_ to _∙_; _⁻¹ to _⁻¹₁; ε to ε₁)
24+
open RawGroup G₂ renaming
25+
(Carrier to B; _≈_ to _≈₂_; _∙_ to _◦_; _⁻¹ to _⁻¹₂; ε to ε₂)
26+
27+
open import Algebra.Definitions
28+
open import Algebra.Structures
29+
open import Data.Product
30+
import Relation.Binary.Reasoning.Setoid as SetoidReasoning
31+
32+
------------------------------------------------------------------------
33+
-- Re-export all properties of monoid monomorphisms
34+
35+
open import Algebra.Morphism.MonoidMonomorphism
36+
isMonoidMonomorphism public
37+
38+
------------------------------------------------------------------------
39+
-- Properties
40+
41+
module _ (◦-isMagma : IsMagma _≈₂_ _◦_) where
42+
43+
open IsMagma ◦-isMagma renaming (∙-cong to ◦-cong)
44+
open SetoidReasoning setoid
45+
46+
inverseˡ : LeftInverse _≈₂_ ε₂ _⁻¹₂ _◦_ LeftInverse _≈₁_ ε₁ _⁻¹₁ _∙_
47+
inverseˡ invˡ x = injective (begin
48+
⟦ x ⁻¹₁ ∙ x ⟧ ≈⟨ ∙-homo (x ⁻¹₁ ) x ⟩
49+
⟦ x ⁻¹₁ ⟧ ◦ ⟦ x ⟧ ≈⟨ ◦-cong (⁻¹-homo x) refl ⟩
50+
⟦ x ⟧ ⁻¹₂ ◦ ⟦ x ⟧ ≈⟨ invˡ ⟦ x ⟧ ⟩
51+
ε₂ ≈˘⟨ ε-homo ⟩
52+
⟦ ε₁ ⟧ ∎)
53+
54+
inverseʳ : RightInverse _≈₂_ ε₂ _⁻¹₂ _◦_ RightInverse _≈₁_ ε₁ _⁻¹₁ _∙_
55+
inverseʳ invʳ x = injective (begin
56+
⟦ x ∙ x ⁻¹₁ ⟧ ≈⟨ ∙-homo x (x ⁻¹₁) ⟩
57+
⟦ x ⟧ ◦ ⟦ x ⁻¹₁ ⟧ ≈⟨ ◦-cong refl (⁻¹-homo x) ⟩
58+
⟦ x ⟧ ◦ ⟦ x ⟧ ⁻¹₂ ≈⟨ invʳ ⟦ x ⟧ ⟩
59+
ε₂ ≈˘⟨ ε-homo ⟩
60+
⟦ ε₁ ⟧ ∎)
61+
62+
inverse : Inverse _≈₂_ ε₂ _⁻¹₂ _◦_ Inverse _≈₁_ ε₁ _⁻¹₁ _∙_
63+
inverse (invˡ , invʳ) = inverseˡ invˡ , inverseʳ invʳ
64+
65+
⁻¹-cong : Congruent₁ _≈₂_ _⁻¹₂ Congruent₁ _≈₁_ _⁻¹₁
66+
⁻¹-cong ⁻¹-cong {x} {y} x≈y = injective (begin
67+
⟦ x ⁻¹₁ ⟧ ≈⟨ ⁻¹-homo x ⟩
68+
⟦ x ⟧ ⁻¹₂ ≈⟨ ⁻¹-cong (⟦⟧-cong x≈y) ⟩
69+
⟦ y ⟧ ⁻¹₂ ≈˘⟨ ⁻¹-homo y ⟩
70+
⟦ y ⁻¹₁ ⟧ ∎)
71+
72+
isGroup : IsGroup _≈₂_ _◦_ ε₂ _⁻¹₂ IsGroup _≈₁_ _∙_ ε₁ _⁻¹₁
73+
isGroup isGroup = record
74+
{ isMonoid = isMonoid G.isMonoid
75+
; inverse = inverse G.isMagma G.inverse
76+
; ⁻¹-cong = ⁻¹-cong G.isMagma G.⁻¹-cong
77+
} where module G = IsGroup isGroup
78+
79+
isAbelianGroup : IsAbelianGroup _≈₂_ _◦_ ε₂ _⁻¹₂ IsAbelianGroup _≈₁_ _∙_ ε₁ _⁻¹₁
80+
isAbelianGroup isAbelianGroup = record
81+
{ isGroup = isGroup G.isGroup
82+
; comm = comm G.isMagma G.comm
83+
} where module G = IsAbelianGroup isAbelianGroup

src/Algebra/Morphism/MonoidMonomorphism.agda

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ open RawMonoid M₂ renaming (Carrier to B; _≈_ to _≈₂_; _∙_ to _◦_;
2525
open import Algebra.Definitions
2626
open import Algebra.Structures
2727
open import Data.Product using (map)
28-
open import Relation.Binary
2928
import Relation.Binary.Reasoning.Setoid as SetoidReasoning
3029

3130
------------------------------------------------------------------------

0 commit comments

Comments
 (0)