forked from crypto-agda/crypto-agda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomposable.agda
132 lines (103 loc) Β· 4.79 KB
/
composable.agda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
module composable where
open import Level
open import Function
open import Data.Unit using (β€)
open import Relation.Binary
Arrow : β {i} β Set i β β j β Set (suc j β i)
Arrow = Rel
Composition : β {a β} {A : Set a} β Arrow A β β Set _
Composition = Transitive
Identity : β {a β} {A : Set a} β Arrow A β β Set _
Identity = Reflexive
IArrow : β {i j t} {I : Set i} (_βα΅’_ : Arrow I j) (T : I β Set t) a β Set _
IArrow _βα΅’_ T a = β {iβ iβ} β iβ βα΅’ iβ β T iβ β T iβ β Set a
IReflexivity : β {a i j t} {I : Set i} {R : Rel I j} {T : I β Set t} β Reflexive R β IArrow R T a β Set _
IReflexivity R-refl Arr = β {i A} β Arr (R-refl {i}) A A
IIdentity : β {a i j t} {I : Set i} {_βα΅’_ : Arrow I j} {T : I β Set t} β Identity _βα΅’_ β IArrow _βα΅’_ T a β Set _
IIdentity = IReflexivity
ITrans : β {i j t a} {I : Set i} {Rβ Rβ Rβ : Rel I j} {T : I β Set t}
(R-trans : Trans Rβ Rβ Rβ)
(Arrβ : IArrow Rβ T a)
(Arrβ : IArrow Rβ T a)
(Arrβ : IArrow Rβ T a)
β Set _
ITrans R-trans Arrβ Arrβ Arrβ
= β {iβ iβ iβ jβ jβ} β Trans (Arrβ jβ) (Arrβ jβ) (Arrβ (R-trans {iβ} {iβ} {iβ} jβ jβ))
ITransitive : β {i j t a} {I : Set i} {R : Rel I j} {T : I β Set t}
β Transitive R β IArrow R T a β Set _
ITransitive {R = R} R-trans Arr = ITrans {Rβ = R} {R} {R} R-trans Arr Arr Arr
IComposition : β {i j t a} {I : Set i} {_βα΅’_ : Arrow I j} {T : I β Set t}
(_Β·_ : Composition _βα΅’_)
(β¨_β©_β_ : IArrow _βα΅’_ T a) β Set _
IComposition = ITransitive
record IComposable {i j t a} {I : Set i} {_βα΅’_ : Arrow I j} {T : I β Set t}
(_Β·_ : Composition _βα΅’_)
(β¨_β©_β_ : IArrow _βα΅’_ T a)
: Set (a β t β i β j) where
constructor mk
infixr 1 _>>>_
field
-- _>>>_ : β {iβ iβ iβ} {ixβ : iβ βα΅’ iβ} {ixβ : iβ βα΅’ iβ} {A B C}
-- β (β¨ ixβ β© A β B) β (β¨ ixβ β© B β C) β (β¨ ixβ Β· ixβ β© A β C)
_>>>_ : IComposition (Ξ» {Ξ·} β _Β·_ {Ξ·}) β¨_β©_β_
open import Relation.Binary.PropositionalEquality
Refl-Unit : β {β a} {A : Set a} {R : Rel A β} β Reflexive R β Transitive R β Set _
Refl-Unit {R = R} R-refl R-trans = β {x y} (p : R x y) β R-trans R-refl p β‘ p
{-
record ICat {i j t a} {I : Set i} {_βα΅’_ : Arrow I j} {T : I β Set t}
{_Β·_ : Composition _βα΅’_}
{β¨_β©_β_ : IArrow a _βα΅’_ T}
(comp : IComposable _Β·_ β¨_β©_β_)
{idα΅’ : Identity _βα΅’_}
(id : IIdentity (Ξ» {Ξ·} β idα΅’ {Ξ·}) β¨_β©_β_)
(_βα΅’_ : β {a b} (i j : a βα΅’ b) β Set)
(_β_ : β {i j A B} β i βα΅’ j β β¨ i β© A β B β β¨ j β© A β B β Set) : Set
where
constructor mk
open IComposable comp
field
id-unit->>> :
β f β β¨ id >>> f β f
-}
open import Data.Unit using (β€)
ConstArr : β {a} (A : Set a) β β€ β β€ β Set a
ConstArr A _ _ = A
Composable : β {t a} {T : Set t} (_β_ : T β T β Set a) β Set (t β a)
Composable _β_ = IComposable {i = zero} {_βα΅’_ = ConstArr β€} _ (const _β_)
{- Composable, unfolded:
record Composable {t a} {T : Set t} (_β_ : T β T β Set a) : Set (t β a) where
constructor mk
infixr 1 _>>>_
field
_>>>_ : β {A B C} β (A β B) β (B β C) β (A β C)
-}
constComp' : β {a} {A : Set a} (_Β·_ : A β A β A) β Composition (ConstArr A)
constComp' _Β·_ = _Β·_
constComp : β {a} {A : Set a} (_Β·_ : A β A β A) β Composable (ConstArr A)
constComp _Β·_ = mk _Β·_
module Composable = IComposable
ixFunComp : β {ix t} {Ix : Set ix} (F : Ix β Set t) β Composable (Ξ» i o β F i β F o)
ixFunComp _ = mk (Ξ» f g x β g (f x))
funComp : β {t} β Composable (Ξ» (A B : Set t) β A β B)
funComp = ixFunComp id
opComp : β {t a} {T : Set t} {_β_ : T β T β Set a} β Composable _β_ β Composable (flip _β_)
opComp (mk _>>>_) = mk (flip _>>>_)
open import Data.Vec
vecFunComp : β {a} (A : Set a) β Composable (Ξ» i o β Vec A i β Vec A o)
vecFunComp A = ixFunComp (Vec A)
open import Data.Bits
bitsFunComp : Composable (Ξ» i o β Bits i β Bits o)
bitsFunComp = ixFunComp Bits
-- open import Data.Fin
-- funRewireComp : Composable (Ξ» i o β Fin o β Fin i)
-- FunRewireComp = opComp (ixFunComp Fin)
{-
open import bintree
open import Data.Nat
CircuitType : Setβ
CircuitType = (i o : β) β Set
RewireTbl : CircuitType
RewireTbl i o = Vec (Fin i) o
rewireTblComp : Composable RewireTbl
rewireTblComp = {!!}
-}