Skip to content

Commit d23bc6f

Browse files
committed
2 parents 46aa741 + 3b0923c commit d23bc6f

File tree

2 files changed

+90
-39
lines changed

2 files changed

+90
-39
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,14 @@ Other minor changes
15971597
moufangLoop : MoufangLoop a ℓ₁ → MoufangLoop b ℓ₂ → MoufangLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
15981598
```
15991599

1600+
* Added new functions and proofs to `Algebra.Construct.Flip.Op`:
1601+
```agda
1602+
zero : Zero ≈ ε ∙ → Zero ≈ ε (flip ∙)
1603+
distributes : (≈ DistributesOver ∙) + → (≈ DistributesOver (flip ∙)) +
1604+
isRing : IsRing ≈ + * - 0# 1# → IsRing ≈ + (flip *) - 0# 1#
1605+
ring : Ring a ℓ → Ring a ℓ
1606+
```
1607+
16001608
* Added new definition to `Algebra.Definitions`:
16011609
```agda
16021610
LeftDividesˡ : Op₂ A → Op₂ A → Set _

src/Algebra/Construct/Flip/Op.agda

Lines changed: 82 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99

1010
module Algebra.Construct.Flip.Op where
1111

12-
open import Algebra
12+
open import Algebra.Core
13+
open import Algebra.Bundles
14+
import Algebra.Definitions as Def
15+
import Algebra.Structures as Str
1316
import Data.Product as Prod
1417
import Data.Sum as Sum
1518
open import Function.Base using (flip)
@@ -33,136 +36,171 @@ preserves₂ : (∼ ≈ ≋ : Rel A ℓ) →
3336
∙ Preserves₂ ∼ ⟶ ≈ ⟶ ≋ (flip ∙) Preserves₂ ≈ ⟶ ∼ ⟶ ≋
3437
preserves₂ _ _ _ pres = flip pres
3538

36-
module _ (≈ : Rel A ℓ) (∙ : Op₂ A) where
39+
module ∙-Properties (≈ : Rel A ℓ) (∙ : Op₂ A) where
3740

38-
associative : Symmetric ≈ Associative ≈ ∙ Associative ≈ (flip ∙)
41+
open Def
42+
43+
associative : Symmetric ≈ Associative ∙ Associative (flip ∙)
3944
associative sym assoc x y z = sym (assoc z y x)
4045

41-
identity : Identity ε ∙ Identity ε (flip ∙)
46+
identity : Identity ε ∙ Identity ε (flip ∙)
4247
identity id = Prod.swap id
4348

44-
commutative : Commutative Commutative (flip ∙)
49+
commutative : Commutative ∙ Commutative (flip ∙)
4550
commutative comm = flip comm
4651

47-
selective : Selective Selective (flip ∙)
52+
selective : Selective ∙ Selective (flip ∙)
4853
selective sel x y = Sum.swap (sel y x)
4954

50-
idempotent : Idempotent Idempotent (flip ∙)
55+
idempotent : Idempotent ∙ Idempotent (flip ∙)
5156
idempotent idem = idem
5257

53-
inverse : Inverse ε ⁻¹ ∙ Inverse ε ⁻¹ (flip ∙)
58+
inverse : Inverse ε ⁻¹ ∙ Inverse ε ⁻¹ (flip ∙)
5459
inverse inv = Prod.swap inv
5560

61+
zero : Zero ε ∙ Zero ε (flip ∙)
62+
zero zer = Prod.swap zer
63+
64+
module *-Properties (≈ : Rel A ℓ) (* + : Op₂ A) where
65+
66+
open Def
67+
68+
distributes : * DistributesOver + (flip *) DistributesOver +
69+
distributes distrib = Prod.swap distrib
70+
5671
------------------------------------------------------------------------
5772
-- Structures
5873

5974
module _ {≈ : Rel A ℓ} {∙ : Op₂ A} where
6075

61-
isMagma : IsMagma ≈ ∙ IsMagma ≈ (flip ∙)
76+
open Def
77+
open Str
78+
open ∙-Properties ≈ ∙
79+
80+
isMagma : IsMagma ∙ IsMagma (flip ∙)
6281
isMagma m = record
6382
{ isEquivalence = isEquivalence
6483
; ∙-cong = preserves₂ ≈ ≈ ≈ ∙-cong
6584
}
6685
where open IsMagma m
6786

68-
isSelectiveMagma : IsSelectiveMagma IsSelectiveMagma (flip ∙)
87+
isSelectiveMagma : IsSelectiveMagma ∙ IsSelectiveMagma (flip ∙)
6988
isSelectiveMagma m = record
7089
{ isMagma = isMagma m.isMagma
71-
; sel = selective ≈ ∙ m.sel
90+
; sel = selective m.sel
7291
}
7392
where module m = IsSelectiveMagma m
7493

75-
isCommutativeMagma : IsCommutativeMagma IsCommutativeMagma (flip ∙)
94+
isCommutativeMagma : IsCommutativeMagma ∙ IsCommutativeMagma (flip ∙)
7695
isCommutativeMagma m = record
7796
{ isMagma = isMagma m.isMagma
78-
; comm = commutative ≈ ∙ m.comm
97+
; comm = commutative m.comm
7998
}
8099
where module m = IsCommutativeMagma m
81100

82-
isSemigroup : IsSemigroup IsSemigroup (flip ∙)
101+
isSemigroup : IsSemigroup ∙ IsSemigroup (flip ∙)
83102
isSemigroup s = record
84103
{ isMagma = isMagma s.isMagma
85-
; assoc = associative ≈ ∙ s.sym s.assoc
104+
; assoc = associative s.sym s.assoc
86105
}
87106
where module s = IsSemigroup s
88107

89-
isBand : IsBand IsBand (flip ∙)
108+
isBand : IsBand ∙ IsBand (flip ∙)
90109
isBand b = record
91110
{ isSemigroup = isSemigroup b.isSemigroup
92111
; idem = b.idem
93112
}
94113
where module b = IsBand b
95114

96-
isCommutativeSemigroup : IsCommutativeSemigroup
97-
IsCommutativeSemigroup (flip ∙)
115+
isCommutativeSemigroup : IsCommutativeSemigroup ∙
116+
IsCommutativeSemigroup (flip ∙)
98117
isCommutativeSemigroup s = record
99118
{ isSemigroup = isSemigroup s.isSemigroup
100-
; comm = commutative ≈ ∙ s.comm
119+
; comm = commutative s.comm
101120
}
102121
where module s = IsCommutativeSemigroup s
103122

104-
isUnitalMagma : IsUnitalMagma ∙ ε IsUnitalMagma (flip ∙) ε
123+
isUnitalMagma : IsUnitalMagma ∙ ε IsUnitalMagma (flip ∙) ε
105124
isUnitalMagma m = record
106125
{ isMagma = isMagma m.isMagma
107-
; identity = identity ≈ ∙ m.identity
126+
; identity = identity m.identity
108127
}
109128
where module m = IsUnitalMagma m
110129

111-
isMonoid : IsMonoid ∙ ε IsMonoid (flip ∙) ε
130+
isMonoid : IsMonoid ∙ ε IsMonoid (flip ∙) ε
112131
isMonoid m = record
113132
{ isSemigroup = isSemigroup m.isSemigroup
114-
; identity = identity ≈ ∙ m.identity
133+
; identity = identity m.identity
115134
}
116135
where module m = IsMonoid m
117136

118-
isCommutativeMonoid : IsCommutativeMonoid ∙ ε
119-
IsCommutativeMonoid (flip ∙) ε
137+
isCommutativeMonoid : IsCommutativeMonoid ∙ ε
138+
IsCommutativeMonoid (flip ∙) ε
120139
isCommutativeMonoid m = record
121140
{ isMonoid = isMonoid m.isMonoid
122-
; comm = commutative ≈ ∙ m.comm
141+
; comm = commutative m.comm
123142
}
124143
where module m = IsCommutativeMonoid m
125144

126-
isIdempotentCommutativeMonoid : IsIdempotentCommutativeMonoid ∙ ε
127-
IsIdempotentCommutativeMonoid (flip ∙) ε
145+
isIdempotentCommutativeMonoid : IsIdempotentCommutativeMonoid ∙ ε
146+
IsIdempotentCommutativeMonoid (flip ∙) ε
128147
isIdempotentCommutativeMonoid m = record
129148
{ isCommutativeMonoid = isCommutativeMonoid m.isCommutativeMonoid
130-
; idem = idempotent ≈ ∙ m.idem
149+
; idem = idempotent m.idem
131150
}
132151
where module m = IsIdempotentCommutativeMonoid m
133152

134-
isInvertibleMagma : IsInvertibleMagma ∙ ε ⁻¹
135-
IsInvertibleMagma (flip ∙) ε ⁻¹
153+
isInvertibleMagma : IsInvertibleMagma ∙ ε ⁻¹
154+
IsInvertibleMagma (flip ∙) ε ⁻¹
136155
isInvertibleMagma m = record
137156
{ isMagma = isMagma m.isMagma
138-
; inverse = inverse ≈ ∙ m.inverse
157+
; inverse = inverse m.inverse
139158
; ⁻¹-cong = m.⁻¹-cong
140159
}
141160
where module m = IsInvertibleMagma m
142161

143-
isInvertibleUnitalMagma : IsInvertibleUnitalMagma ∙ ε ⁻¹
144-
IsInvertibleUnitalMagma (flip ∙) ε ⁻¹
162+
isInvertibleUnitalMagma : IsInvertibleUnitalMagma ∙ ε ⁻¹
163+
IsInvertibleUnitalMagma (flip ∙) ε ⁻¹
145164
isInvertibleUnitalMagma m = record
146165
{ isInvertibleMagma = isInvertibleMagma m.isInvertibleMagma
147-
; identity = identity ≈ ∙ m.identity
166+
; identity = identity m.identity
148167
}
149168
where module m = IsInvertibleUnitalMagma m
150169

151-
isGroup : IsGroup ∙ ε ⁻¹ IsGroup (flip ∙) ε ⁻¹
170+
isGroup : IsGroup ∙ ε ⁻¹ IsGroup (flip ∙) ε ⁻¹
152171
isGroup g = record
153172
{ isMonoid = isMonoid g.isMonoid
154-
; inverse = inverse ≈ ∙ g.inverse
173+
; inverse = inverse g.inverse
155174
; ⁻¹-cong = g.⁻¹-cong
156175
}
157176
where module g = IsGroup g
158177

159-
isAbelianGroup : IsAbelianGroup ∙ ε ⁻¹ IsAbelianGroup (flip ∙) ε ⁻¹
178+
isAbelianGroup : IsAbelianGroup ∙ ε ⁻¹ IsAbelianGroup (flip ∙) ε ⁻¹
160179
isAbelianGroup g = record
161180
{ isGroup = isGroup g.isGroup
162-
; comm = commutative ≈ ∙ g.comm
181+
; comm = commutative g.comm
163182
}
164183
where module g = IsAbelianGroup g
165184

185+
module _ {≈ : Rel A ℓ} {+ * : Op₂ A} { - : Op₁ A} {0# 1# : A} where
186+
187+
open Str
188+
open ∙-Properties ≈ *
189+
open *-Properties ≈ * +
190+
191+
isRing : IsRing + * - 0# 1# IsRing + (flip *) - 0# 1#
192+
isRing r = record
193+
{ +-isAbelianGroup = r.+-isAbelianGroup
194+
; *-cong = preserves₂ ≈ ≈ ≈ r.*-cong
195+
; *-assoc = associative r.sym r.*-assoc
196+
; *-identity = identity r.*-identity
197+
; distrib = distributes r.distrib
198+
; zero = zero r.zero
199+
}
200+
where
201+
module r = IsRing r
202+
203+
166204
------------------------------------------------------------------------
167205
-- Bundles
168206

@@ -239,3 +277,8 @@ group g = record { isGroup = isGroup g.isGroup }
239277
abelianGroup : AbelianGroup a ℓ AbelianGroup a ℓ
240278
abelianGroup g = record { isAbelianGroup = isAbelianGroup g.isAbelianGroup }
241279
where module g = AbelianGroup g
280+
281+
ring : Ring a ℓ Ring a ℓ
282+
ring r = record { isRing = isRing r.isRing }
283+
where module r = Ring r
284+

0 commit comments

Comments
 (0)