6
6
7
7
{-# OPTIONS --without-K --safe #-}
8
8
9
- open import Data.Product using (_,_)
10
- open import Function.Base using (id; _∘_)
11
- open import Function.Definitions using (Congruent)
9
+ open import Function.Base using (_∘_)
12
10
open import Function.Construct.Composition using (surjective)
11
+ open import Level using (Level)
13
12
open import Relation.Binary
13
+ open import Relation.Binary.Morphism.Bundles
14
14
open import Relation.Binary.Morphism.Structures
15
15
16
- module Relation.Binary.Morphism.Construct.Composition
17
- {a b c ℓ₁ ℓ₂ ℓ₃} {A : Set a} {B : Set b} {C : Set c}
18
- {≈₁ : Rel A ℓ₁} {≈₂ : Rel B ℓ₂} {≈₃ : Rel C ℓ₃}
19
- {f : A → B} {g : B → C} where
16
+ module Relation.Binary.Morphism.Construct.Composition where
17
+
18
+ private
19
+ variable
20
+ a b c ℓ₁ ℓ₂ ℓ₃ ℓ₄ ℓ₅ ℓ₆ : Level
21
+ A B C : Set a
22
+ ≈₁ ≈₂ ≈₃ ∼₁ ∼₂ ∼₃ : Rel A ℓ₁
23
+ f g : A → B
20
24
21
25
------------------------------------------------------------------------
22
26
-- Relations
23
27
------------------------------------------------------------------------
28
+ -- Structures
24
29
25
30
isRelHomomorphism : IsRelHomomorphism ≈₁ ≈₂ f →
26
31
IsRelHomomorphism ≈₂ ≈₃ g →
@@ -41,39 +46,85 @@ isRelIsomorphism : Transitive ≈₃ →
41
46
IsRelIsomorphism ≈₁ ≈₂ f →
42
47
IsRelIsomorphism ≈₂ ≈₃ g →
43
48
IsRelIsomorphism ≈₁ ≈₃ (g ∘ f)
44
- isRelIsomorphism ≈₃-trans m₁ m₂ = record
49
+ isRelIsomorphism {≈₁ = ≈₁} ≈₃-trans m₁ m₂ = record
45
50
{ isMonomorphism = isRelMonomorphism F.isMonomorphism G.isMonomorphism
46
- ; surjective = surjective ≈₁ ≈₂ ≈₃ ≈₃-trans G.cong F.surjective G.surjective
51
+ ; surjective = surjective ≈₁ _ _ ≈₃-trans G.cong F.surjective G.surjective
47
52
} where module F = IsRelIsomorphism m₁; module G = IsRelIsomorphism m₂
48
53
54
+ ------------------------------------------------------------------------
55
+ -- Bundles
56
+
57
+ module _ {S : Setoid a ℓ₁} {T : Setoid b ℓ₂} {U : Setoid c ℓ₃} where
58
+
59
+ setoidHomomorphism : SetoidHomomorphism S T →
60
+ SetoidHomomorphism T U →
61
+ SetoidHomomorphism S U
62
+ setoidHomomorphism ST TU = record
63
+ { isRelHomomorphism = isRelHomomorphism ST.isRelHomomorphism TU.isRelHomomorphism
64
+ } where module ST = SetoidHomomorphism ST; module TU = SetoidHomomorphism TU
65
+
66
+ setoidMonomorphism : SetoidMonomorphism S T →
67
+ SetoidMonomorphism T U →
68
+ SetoidMonomorphism S U
69
+ setoidMonomorphism ST TU = record
70
+ { isRelMonomorphism = isRelMonomorphism ST.isRelMonomorphism TU.isRelMonomorphism
71
+ } where module ST = SetoidMonomorphism ST; module TU = SetoidMonomorphism TU
72
+
73
+ setoidIsomorphism : SetoidIsomorphism S T →
74
+ SetoidIsomorphism T U →
75
+ SetoidIsomorphism S U
76
+ setoidIsomorphism ST TU = record
77
+ { isRelIsomorphism = isRelIsomorphism (Setoid.trans U) ST.isRelIsomorphism TU.isRelIsomorphism
78
+ } where module ST = SetoidIsomorphism ST; module TU = SetoidIsomorphism TU
79
+
49
80
------------------------------------------------------------------------
50
81
-- Orders
51
82
------------------------------------------------------------------------
83
+ -- Structures
84
+
85
+ isOrderHomomorphism : IsOrderHomomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
86
+ IsOrderHomomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
87
+ IsOrderHomomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
88
+ isOrderHomomorphism m₁ m₂ = record
89
+ { cong = G.cong ∘ F.cong
90
+ ; mono = G.mono ∘ F.mono
91
+ } where module F = IsOrderHomomorphism m₁; module G = IsOrderHomomorphism m₂
92
+
93
+ isOrderMonomorphism : IsOrderMonomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
94
+ IsOrderMonomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
95
+ IsOrderMonomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
96
+ isOrderMonomorphism m₁ m₂ = record
97
+ { isOrderHomomorphism = isOrderHomomorphism F.isOrderHomomorphism G.isOrderHomomorphism
98
+ ; injective = F.injective ∘ G.injective
99
+ ; cancel = F.cancel ∘ G.cancel
100
+ } where module F = IsOrderMonomorphism m₁; module G = IsOrderMonomorphism m₂
101
+
102
+ isOrderIsomorphism : Transitive ≈₃ →
103
+ IsOrderIsomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
104
+ IsOrderIsomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
105
+ IsOrderIsomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
106
+ isOrderIsomorphism {≈₁ = ≈₁} ≈₃-trans m₁ m₂ = record
107
+ { isOrderMonomorphism = isOrderMonomorphism F.isOrderMonomorphism G.isOrderMonomorphism
108
+ ; surjective = surjective ≈₁ _ _ ≈₃-trans G.cong F.surjective G.surjective
109
+ } where module F = IsOrderIsomorphism m₁; module G = IsOrderIsomorphism m₂
110
+
111
+ ------------------------------------------------------------------------
112
+ -- Bundles
113
+
114
+ module _ {P : Preorder a ℓ₁ ℓ₂} {Q : Preorder b ℓ₃ ℓ₄} {R : Preorder c ℓ₅ ℓ₆} where
115
+
116
+ preorderHomomorphism : PreorderHomomorphism P Q →
117
+ PreorderHomomorphism Q R →
118
+ PreorderHomomorphism P R
119
+ preorderHomomorphism PQ QR = record
120
+ { isOrderHomomorphism = isOrderHomomorphism PQ.isOrderHomomorphism QR.isOrderHomomorphism
121
+ } where module PQ = PreorderHomomorphism PQ; module QR = PreorderHomomorphism QR
122
+
123
+ module _ {P : Poset a ℓ₁ ℓ₂} {Q : Poset b ℓ₃ ℓ₄} {R : Poset c ℓ₅ ℓ₆} where
52
124
53
- module _ {ℓ₄ ℓ₅ ℓ₆} {∼₁ : Rel A ℓ₄} {∼₂ : Rel B ℓ₅} {∼₃ : Rel C ℓ₆} where
54
-
55
- isOrderHomomorphism : IsOrderHomomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
56
- IsOrderHomomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
57
- IsOrderHomomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
58
- isOrderHomomorphism m₁ m₂ = record
59
- { cong = G.cong ∘ F.cong
60
- ; mono = G.mono ∘ F.mono
61
- } where module F = IsOrderHomomorphism m₁; module G = IsOrderHomomorphism m₂
62
-
63
- isOrderMonomorphism : IsOrderMonomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
64
- IsOrderMonomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
65
- IsOrderMonomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
66
- isOrderMonomorphism m₁ m₂ = record
67
- { isOrderHomomorphism = isOrderHomomorphism F.isOrderHomomorphism G.isOrderHomomorphism
68
- ; injective = F.injective ∘ G.injective
69
- ; cancel = F.cancel ∘ G.cancel
70
- } where module F = IsOrderMonomorphism m₁; module G = IsOrderMonomorphism m₂
71
-
72
- isOrderIsomorphism : Transitive ≈₃ →
73
- IsOrderIsomorphism ≈₁ ≈₂ ∼₁ ∼₂ f →
74
- IsOrderIsomorphism ≈₂ ≈₃ ∼₂ ∼₃ g →
75
- IsOrderIsomorphism ≈₁ ≈₃ ∼₁ ∼₃ (g ∘ f)
76
- isOrderIsomorphism ≈₃-trans m₁ m₂ = record
77
- { isOrderMonomorphism = isOrderMonomorphism F.isOrderMonomorphism G.isOrderMonomorphism
78
- ; surjective = surjective ≈₁ ≈₂ ≈₃ ≈₃-trans G.cong F.surjective G.surjective
79
- } where module F = IsOrderIsomorphism m₁; module G = IsOrderIsomorphism m₂
125
+ posetHomomorphism : PosetHomomorphism P Q →
126
+ PosetHomomorphism Q R →
127
+ PosetHomomorphism P R
128
+ posetHomomorphism PQ QR = record
129
+ { isOrderHomomorphism = isOrderHomomorphism PQ.isOrderHomomorphism QR.isOrderHomomorphism
130
+ } where module PQ = PosetHomomorphism PQ; module QR = PosetHomomorphism QR
0 commit comments