comparison src/Ch0101.agda @ 1124:f683d96fbc93 default tip

safe fix done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 07 Jul 2024 22:28:50 +0900
parents
children
comparison
equal deleted inserted replaced
1123:b6ab443f7a43 1124:f683d96fbc93
1 {-# OPTIONS --cubical-compatible --safe #-}
2
3 module Ch0101 where
4 open import Category
5 open import Category.Sets
6 open import Category.Rel
7 open import Level
8 open import Relation.Binary
9 open import Relation.Binary.Core
10
11 GObj : ∀{ℓ} → Set ℓ → RelObj ℓ
12 GObj a = a
13
14 data GMap {ℓ} {A B : Set ℓ} (f : A → B) (x : A) : B → Set (suc ℓ) where
15 Graph : GMap f x (f x)
16
17 GraphFunctor : ∀{ℓ} → Functor (Sets {ℓ}) (Rels {ℓ})
18 GraphFunctor {ℓ} = record { FObj = GObj
19 ; FMap = GMap
20 ; isFunctor = isFunctor
21 }
22 where
23 isFunctor : IsFunctor (Sets {ℓ}) (Rels {ℓ}) GObj GMap
24 isFunctor = record { ≈-cong = ≈-cong
25 ; identity = identity
26 ; distr = distr
27 }
28 where
29 ≈-cong : {A B : Set ℓ} → {φ ψ : A → B} → φ == ψ → GMap φ ≈ GMap ψ
30 ≈-cong {A} {B} {φ} {ψ} eq = exactly (λ g → ?) ?
31 identity : {A : Set ℓ} → GMap (λ x → x) ≈ RelId {A = A}
32 identity {A} = exactly lhs rhs
33 where
34 lhs : {i j : A} → GMap (λ x → x) i j → RelId i j
35 lhs {i} {.i} Graph = ReflRel
36 rhs : {i j : A} → RelId i j -> GMap (λ x → x) i j
37 rhs {i} {.i} ReflRel = Graph
38 distr : {A B C : Set ℓ} {φ : A → B} {ψ : B → C}
39 → (GMap (λ x → ψ ( φ x))) ≈ (GMap ψ ∘ GMap φ)
40 distr {A} {B} {C} {φ} {ψ} = exactly ? ? -- lhs rhs
41 -- where
42 -- lhs : {i : A} {k : C} → GMap (λ x → ψ ( φ x)) ≈ (GMap ψ ∘ GMap φ) i k → (GMap ψ ∘ GMap φ) i k
43 -- lhs {i} .{ψ (φ i)} Graph = Comp {a = Graph} {b = Graph}
44 -- rhs : {i : A} {k : C} → (GMap ψ ∘ GMap φ) i k → GMap (λ x → ψ ( φ x)) i k
45 -- rhs {i} .{ψ (φ i)} (Comp {a = Graph} {Graph}) = Graph
46
47 OpObj : ∀{ℓ} → RelObj ℓ → RelObj ℓ
48 OpObj x = x
49
50 data OpMap {ℓ} {A B : RelObj ℓ} (P : A -Rel⟶ B) (b : B) (a : A) : Set (suc ℓ) where
51 complement : P a b → OpMap P b a
52
53 ComplementFunctor : ∀{ℓ} → Functor (Category.op (Rels {ℓ})) (Rels {ℓ})
54 ComplementFunctor {ℓ} = record { FObj = OpObj
55 ; FMap = OpMap
56 ; isFunctor = isFunctor
57 }
58 where
59 isFunctor : IsFunctor (Category.op (Rels {ℓ})) (Rels {ℓ}) OpObj OpMap
60 isFunctor = record { ≈-cong = ≈-cong
61 ; identity = identity
62 ; distr = distr
63 }
64 where
65 ≈-cong : {A B : Set ℓ} {P Q : B -Rel⟶ A} → P ≈ Q → OpMap P ≈ OpMap Q
66 ≈-cong {A} {B} {P} {Q} (exactly P⇒Q Q⇒P) = exactly lhs rhs
67 where
68 lhs : {i : A} {j : B} → OpMap P i j → OpMap Q i j
69 lhs (complement Pji) = complement (P⇒Q Pji)
70 rhs : {i : A} {j : B} → OpMap Q i j → OpMap P i j
71 rhs (complement Qji) = complement (Q⇒P Qji)
72
73 identity : {A : Set ℓ} → OpMap (RelId {A = A}) ≈ RelId {A = OpObj A}
74 identity {A} = exactly lhs rhs
75 where
76 lhs : {i j : A} → OpMap RelId i j → RelId i j
77 lhs {i} .{i} (complement ReflRel) = ReflRel
78 rhs : {i j : A} → RelId i j → OpMap RelId i j
79 rhs {i} .{i} ReflRel = complement ReflRel
80
81 distr : {A B C : Set ℓ} {P : B -Rel⟶ A} {Q : C -Rel⟶ B} → OpMap (P ∘ Q) ≈ (OpMap Q ∘ OpMap P)
82 distr {A} {B} {C} {P} {Q} = exactly lhs rhs
83 where
84 lhs : {i : A} {k : C} → OpMap (P ∘ Q) i k → (OpMap Q ∘ OpMap P) i k
85 lhs {i} {k} (complement (Comp {a = Pjk} {Qij} ))= Comp {a = complement Qij} {b = complement Pjk}
86 rhs : {i : A} {k : C} → (OpMap Q ∘ OpMap P) i k → OpMap (P ∘ Q) i k
87 rhs {i} {k} (Comp {a = complement Qij} {b = complement Pjk}) = complement (Comp {a = Pjk} {Qij})