Skip to content

Commit 1c2f96e

Browse files
Define middleBolLoop and add proofs (#1809)
1 parent c2302f4 commit 1c2f96e

7 files changed

+156
-0
lines changed

CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,15 @@ New modules
14001400
```
14011401
Algebra.Properties.Quasigroup
14021402
```
1403+
1404+
* Properties of MiddleBolLoop
1405+
```
1406+
Algebra.Properties.MiddleBolLoop
1407+
```
1408+
1409+
* Properties of Loop
1410+
```
1411+
Algebra.Properties.Loop
14031412
14041413
* Some n-ary functions manipulating lists
14051414
```
@@ -1441,6 +1450,7 @@ Other minor changes
14411450
record RightBolLoop c ℓ : Set (suc (c ⊔ ℓ))
14421451
record MoufangLoop c ℓ : Set (suc (c ⊔ ℓ))
14431452
record NonAssociativeRing c ℓ : Set (suc (c ⊔ ℓ))
1453+
record MiddleBolLoop c ℓ : Set (suc (c ⊔ ℓ))
14441454
```
14451455
and the existing record `Lattice` now provides
14461456
```agda
@@ -1528,6 +1538,7 @@ Other minor changes
15281538
Semimedial _∙_ = (LeftSemimedial _∙_) × (RightSemimedial _∙_)
15291539
LeftBol _∙_ = ∀ x y z → (x ∙ (y ∙ (x ∙ z))) ≈ ((x ∙ (y ∙ z)) ∙ z )
15301540
RightBol _∙_ = ∀ x y z → (((z ∙ x) ∙ y) ∙ x) ≈ (z ∙ ((x ∙ y) ∙ x))
1541+
MiddleBol _∙_ _\\_ _//_ = ∀ x y z → (x ∙ ((y ∙ z) \\ x)) ≈ ((x // z) ∙ (y \\ x))
15311542
```
15321543

15331544
* Added new functions to `Algebra.Definitions.RawSemiring`:
@@ -1582,6 +1593,7 @@ Other minor changes
15821593
record IsRightBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
15831594
record IsMoufangLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
15841595
record IsNonAssociativeRing (+ * : Op₂ A) (-_ : Op₁ A) (0# 1# : A) : Set (a ⊔ ℓ)
1596+
record IsMiddleBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
15851597
```
15861598
and the existing record `IsLattice` now provides
15871599
```

src/Algebra/Bundles.agda

+22
Original file line numberDiff line numberDiff line change
@@ -1136,3 +1136,25 @@ record MoufangLoop c ℓ : Set (suc (c ⊔ ℓ)) where
11361136

11371137
open LeftBolLoop leftBolLoop public
11381138
using (loop)
1139+
1140+
record MiddleBolLoop c ℓ : Set (suc (c ⊔ ℓ)) where
1141+
infixl 7 _∙_
1142+
infixl 7 _\\_
1143+
infixl 7 _//_
1144+
infix 4 _≈_
1145+
field
1146+
Carrier : Set c
1147+
_≈_ : Rel Carrier ℓ
1148+
_∙_ : Op₂ Carrier
1149+
_\\_ : Op₂ Carrier
1150+
_//_ : Op₂ Carrier
1151+
ε : Carrier
1152+
isMiddleBolLoop : IsMiddleBolLoop _≈_ _∙_ _\\_ _//_ ε
1153+
1154+
open IsMiddleBolLoop isMiddleBolLoop public
1155+
1156+
loop : Loop _ _
1157+
loop = record { isLoop = isLoop }
1158+
1159+
open Loop loop public
1160+
using (quasigroup)

src/Algebra/Definitions.agda

+3
Original file line numberDiff line numberDiff line change
@@ -216,5 +216,8 @@ LeftBol _∙_ = ∀ x y z → (x ∙ (y ∙ (x ∙ z))) ≈ ((x ∙ (y ∙ x))
216216
RightBol : Op₂ A Set _
217217
RightBol _∙_ = x y z (((z ∙ x) ∙ y) ∙ x) ≈ (z ∙ ((x ∙ y) ∙ x))
218218

219+
MiddleBol : Op₂ A Op₂ A Op₂ A Set _
220+
MiddleBol _∙_ _\\_ _//_ = x y z (x ∙ ((y ∙ z) \\ x)) ≈ ((x // z) ∙ (y \\ x))
221+
219222
Identical : Op₂ A Set _
220223
Identical _∙_ = x y z ((z ∙ x) ∙ (y ∙ z)) ≈ (z ∙ ((x ∙ y) ∙ z))

src/Algebra/Properties/Loop.agda

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Some basic properties of Quasigroup
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
open import Algebra.Bundles using (Loop)
10+
11+
module Algebra.Properties.Loop {l₁ l₂} (L : Loop l₁ l₂) where
12+
13+
open Loop L
14+
open import Algebra.Definitions _≈_
15+
open import Relation.Binary.Reasoning.Setoid setoid
16+
open import Data.Product
17+
open import Algebra.Properties.Quasigroup
18+
19+
x//x≈ε : x x // x ≈ ε
20+
x//x≈ε x = begin
21+
x // x ≈⟨ //-congʳ (sym (identityˡ x)) ⟩
22+
(ε ∙ x) // x ≈⟨ rightDividesʳ x ε ⟩
23+
ε ∎
24+
25+
x\\x≈ε : x x \\ x ≈ ε
26+
x\\x≈ε x = begin
27+
x \\ x ≈⟨ \\-congˡ (sym (identityʳ x )) ⟩
28+
x \\ (x ∙ ε) ≈⟨ leftDividesʳ x ε ⟩
29+
ε ∎
30+
31+
ε\\x≈x : x ε \\ x ≈ x
32+
ε\\x≈x x = begin
33+
ε \\ x ≈⟨ sym (identityˡ (ε \\ x)) ⟩
34+
ε ∙ (ε \\ x) ≈⟨ leftDividesˡ ε x ⟩
35+
x ∎
36+
37+
x//ε≈x : x x // ε ≈ x
38+
x//ε≈x x = begin
39+
x // ε ≈⟨ sym (identityʳ (x // ε)) ⟩
40+
(x // ε) ∙ ε ≈⟨ rightDividesˡ ε x ⟩
41+
x ∎
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Some basic properties of Quasigroup
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
open import Algebra.Bundles using (MiddleBolLoop)
10+
11+
module Algebra.Properties.MiddleBolLoop {m₁ m₂} (M : MiddleBolLoop m₁ m₂) where
12+
13+
open MiddleBolLoop M
14+
open import Algebra.Definitions _≈_
15+
open import Relation.Binary.Reasoning.Setoid setoid
16+
open import Data.Product
17+
import Algebra.Properties.Loop as LoopProperties
18+
open LoopProperties loop public
19+
20+
xyx\\x≈y\\x : x y x ∙ ((y ∙ x) \\ x) ≈ y \\ x
21+
xyx\\x≈y\\x x y = begin
22+
x ∙ ((y ∙ x) \\ x) ≈⟨ middleBol x y x ⟩
23+
(x // x) ∙ (y \\ x) ≈⟨ ∙-congʳ (x//x≈ε x) ⟩
24+
ε ∙ (y \\ x) ≈⟨ identityˡ ((y \\ x)) ⟩
25+
y \\ x ∎
26+
27+
xxz\\x≈x//z : x z x ∙ ((x ∙ z) \\ x) ≈ x // z
28+
xxz\\x≈x//z x z = begin
29+
x ∙ ((x ∙ z) \\ x) ≈⟨ middleBol x x z ⟩
30+
(x // z) ∙ (x \\ x) ≈⟨ ∙-congˡ (x\\x≈ε x) ⟩
31+
(x // z) ∙ ε ≈⟨ identityʳ ((x // z)) ⟩
32+
x // z ∎
33+
34+
xz\\x≈x//zx : x z x ∙ (z \\ x) ≈ (x // z) ∙ x
35+
xz\\x≈x//zx x z = begin
36+
x ∙ (z \\ x) ≈⟨ ∙-congˡ (\\-congʳ( sym (identityˡ z))) ⟩
37+
x ∙ ((ε ∙ z) \\ x) ≈⟨ middleBol x ε z ⟩
38+
x // z ∙ (ε \\ x) ≈⟨ ∙-congˡ (ε\\x≈x x) ⟩
39+
x // z ∙ x ∎
40+
41+
x//yzx≈x//zy\\x : x y z (x // (y ∙ z)) ∙ x ≈ (x // z) ∙ (y \\ x)
42+
x//yzx≈x//zy\\x x y z = begin
43+
(x // (y ∙ z)) ∙ x ≈⟨ sym (xz\\x≈x//zx x ((y ∙ z))) ⟩
44+
x ∙ ((y ∙ z) \\ x) ≈⟨ middleBol x y z ⟩
45+
(x // z) ∙ (y \\ x) ∎
46+
47+
x//yxx≈y\\x : x y (x // (y ∙ x)) ∙ x ≈ y \\ x
48+
x//yxx≈y\\x x y = begin
49+
(x // (y ∙ x)) ∙ x ≈⟨ x//yzx≈x//zy\\x x y x ⟩
50+
(x // x) ∙ (y \\ x) ≈⟨ ∙-congʳ (x//x≈ε x) ⟩
51+
ε ∙ (y \\ x) ≈⟨ identityˡ ((y \\ x)) ⟩
52+
y \\ x ∎
53+
54+
x//xzx≈x//z : x z (x // (x ∙ z)) ∙ x ≈ x // z
55+
x//xzx≈x//z x z = begin
56+
(x // (x ∙ z)) ∙ x ≈⟨ x//yzx≈x//zy\\x x x z ⟩
57+
(x // z) ∙ (x \\ x) ≈⟨ ∙-congˡ (x\\x≈ε x) ⟩
58+
(x // z) ∙ ε ≈⟨ identityʳ (x // z) ⟩
59+
x // z ∎

src/Algebra/Properties/Quasigroup.agda

+12
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,15 @@ cancelʳ x y z eq = begin
3131

3232
cancel : Cancellative _∙_
3333
cancel = cancelˡ , cancelʳ
34+
35+
y≈x\\z : x y z x ∙ y ≈ z y ≈ x \\ z
36+
y≈x\\z x y z eq = begin
37+
y ≈⟨ sym (leftDividesʳ x y) ⟩
38+
x \\ (x ∙ y) ≈⟨ \\-congˡ eq ⟩
39+
x \\ z ∎
40+
41+
x≈z//y : x y z x ∙ y ≈ z x ≈ z // y
42+
x≈z//y x y z eq = begin
43+
x ≈⟨ sym (rightDividesʳ y x) ⟩
44+
(x ∙ y) // y ≈⟨ //-congʳ eq ⟩
45+
z // y ∎

src/Algebra/Structures.agda

+7
Original file line numberDiff line numberDiff line change
@@ -936,3 +936,10 @@ record IsMoufangLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ) where
936936
identical : Identical ∙
937937

938938
open IsLeftBolLoop isLeftBolLoop public
939+
940+
record IsMiddleBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ) where
941+
field
942+
isLoop : IsLoop ∙ \\ // ε
943+
middleBol : MiddleBol ∙ \\ //
944+
945+
open IsLoop isLoop public

0 commit comments

Comments
 (0)