annotate gears.ind @ 6:197b27b2fd8b default tip

submit
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 13 May 2015 00:55:42 +0900
parents 32ec7f73f166
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
1 -title: Programming in code and data
0
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 --abstract:
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
5 We introduce system of code and data. Instead of function call, code accepts input data and simply generates output data.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
6 Chains of code and data performs computation. After calling next code, it does not return to the caller, so it has no
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
7 environment nor calling stack. This system is designed for reliable system description and parallel execution on various
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
8 architecture. We use segments or gears sometime. This is directly connected to the category theory like lambda calculus.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
9 We also find a categorical representation from the view point of data. This shows duality of code and data. This duality will be
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 a guideline of our system design.
0
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
12 --Reliable computation and predictability
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
14 Various software are used in real world. Each of them have to work in a reliable way. A piece of device contains
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
15 millions of lines of code. These programs are written in C, Haskell\cite{haskell} and so on.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
16 To assure its reliability, the computation of a function should be predictable.
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 The correctness of the prediction should be assured by measurements, model checking or proofs.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 % The unit of computation of conventional programming language is of course a function call.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
20 % a function may call another functions and it comes back to the original function.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
21 % Proof theory such as Hoare Logic or model checking method is used to make the prediction, such as
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 % zero divide is never occurred in a function.
0
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 We propose new unit of computation, data segments and code segments. Computations in these segments are finite and
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
25 predictable. We sometimes call these gears.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
26
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
27 A set of gears makes a programming system.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
29 % This unit is larger then an machine instruction and smaller than a function call.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
31 Data segments and code segments are connected by meta data segments and meta code segments.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
32 The idea is construct system as a set of predictable unit of computation.
0
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 --Definition of data segment and code segment
71428fe423da initial
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
36 Actually we implement our Gears language in LLVM\cite{LLVM}, but we can think both code and data are System F\cite{Girard:1989:PT:64805} term. As usual, Types are
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
37 defined starting from type variables X,Y,Z and is generated by two operations:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
38 1. if U and V are types, then U → V is a type.
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
39 2. if V i a type, and X a type variable,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
40 then ΠX.V is a type.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
41 Terms are constructed by six schemes
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
42 1. variable: x, y, z,... of type T,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
43 2. application: t u of type V, where t is of type
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
44 U→V and u is of type U,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
45 3. λ-abstraction: λx.v of type U→V,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
46 where x is a variable of type U and v is of type V,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
47 4. universal abstraction: if v is a term type V, then
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
48 we can form ΛX.v of type ΠX.V, so long as the
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
49 variable X is not free in the type of a free variable of v.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
50 5. universal application: if t is a term of type ΠX.V
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
51 and U is a type, then tU is a term of type V[U/X].
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
52 and usual conversions,
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
53 1. (λx.v)u 〜> v[u/x]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
54 2. (ΛX.v)U 〜> v[U/X]
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
55 What we need here is that a term has a type, a function has type \verb+U → V+.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
56 Code segments f of type \verb+I → O+, accepts data segments of type \verb+I+ and generates data segments of type \verb+O+.
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
57 f : I → O
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
58 Domain of C is I and codomain of C is O.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
59
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
60 Gears system only allows calling another code at the bottom of the code, that is all codes have tail call form. Normal function call
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
61 is not prohibited, but it should be closed in a code.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
62
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
63 <center><img src="fig/codeGear.pdf"></center>
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
64
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
65 --Meta computation of Gears
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
66
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
67 Computation of a code is limited in the inputs and the outputs and it makes the computation of the code predictable, but its data are
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
68 usually connected to other data. The code has its continuation also. These connections are out of the scope of the code.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
69 We think these connections are made by a meta computation, such as monads\cite{Moggi:1989:CLM:77350.77353}. A monad is a data structure with monad laws and
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
70 after an execution of a code, monads join code is called to handle meta data structure. With monad \verb+T\verb+,
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
71 C' : I → T O
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
72 is a meta computation. \verb+C+ has one to one correspondence with \verb+C'+.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
73 μ : T (T O) → T O
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
74
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
75 Parallel execution or IO handling are represented as a monad in our scheme. Monads are only allows to use at the bottom of a code in our system.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
76
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
77 <center><img src="fig/meta.pdf"></center>
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
78
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
79 --A category of codes
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
80
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
81 Types of code segments and data segments naturally compose a category of function and types. Codes and data are interconnected one by one.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
82 Object : a, b, c ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
83 Arrows : f, g, h ...
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
84 An arrow has its domain object and codomain object. In this case, Object is a type of data and arrows are function \verb+h+ with type \verb+a → b+, which domain is an input type a and
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
85 codomain is an output type b.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
86 h : a → b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
87 g : b → c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
88 f : c → d
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
89 There is composition of arrows,
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
90 f o g : b → d
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
91 and it satisfies the composition law.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
92 (f o g) o h = f o (g o h )
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
93 There is also an identity arrow \verb+id a+ for each object \verb+a+, which satisfies,
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 a o id (domain a) = a = id (domain a) o a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
95
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
96 --A category of data
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
97
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
98 A code generate an output type and it becomes an input type of next code. It is similar to a code is in between an input type and an output type.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
99 Is is possible to think data is an arrow between codes?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
100
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
101 <center><img src="fig/dataGear.pdf"></center>
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
102
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
103 In other words, is there any duality in codes and data? Usual answer is no, since we cannot simply combine data segments,
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
104 but introducing continuation, it is possible to create a category which objects are functions and
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
105 which arrows are data. Actually these two categories are dual in the sense of adjunction, that is
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
106 there is a one to one correspondence between their arrows with isomorphism.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
107 Here we show the duality as an exercise of a category theory.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
108
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
109 The problem of data segments composition is that it forgets about later computation. We can simply store it as a continuation in the
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
110 data segment. Data segments now have a continuation, which is a code segment. It is a part of meta computation. We have a data \verb+f+,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
111 which is a codomain of a code \verb+a+ and is a domain of code \verb+b+. A continuation of \verb+f+ will called before the execution of code \verb+b+.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
112
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
113 Now an data arrow \verb+f+ is a triplet \verb+{a,b,n}+, \verb+a+ is a code which codomain is data \verb+f+ and \verb+b+ is a code which domain is data \verb+f+.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
114 \verb+n : codomain a → domain b + is a continuation of \verb+f+.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
115
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
116 We introduce access function as follows:
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
117 data-domain f = a
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
118 data-codomain f = b
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
119 continuation f = n
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
120
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
121 We use data-codomain and data-codomain for new Data Category C, which is constructed from a category C.
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
122 Objects of Data category C are arrows of category C. An arrow of Data category C from \verb+a+ to \verb+c+ is
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
123 a data segment \verb+f+ with continuation \verb+n+, \verb+b'+ is a intermediate data segment.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
124 n : codomain a → domain b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
125 f = {a,b,n}
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
126
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
127 \verb+f+ is an arrow from \verb+a+ to \verb+b+.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
128
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
129 <center><img src="fig/dataGearComposition.pdf"></center>
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
130
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
131 If \verb+f+ and \verb+g+ has same data-domain and data-codomain, an equality of \verb+f+ and \verb+g+ is defined as follows,
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
132 f = g if b o continuation f = b o continuation g
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
133 where \verb+b+ is data-codomain of \verb+f+ and \verb+g+.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
134
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
135 Composition of arrows of Data category is defined as follows.
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
136 {b,c,m} + {a,b,n} = {a,c,m o (b o n))}
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
137 It is easy to see its composition lows.
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
138 {c,d,l} + ( {b,c,m} + {a,b,n} ) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
139 ({c,d,l} + {b,c,m} ) + {a,b,n}
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
140 because
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
141 d o ( l o ( m o (b o n))) = d o (( l o m ) o (b o n) ) .
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
142
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
143 To make an identity arrow in the Data category, if \verb+a+ is a codomain of \verb+f+, we need a reverse arrow of \verb+a+, \verb+a'+.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
144 So every arrows \verb+a+ in C have to have a reverse arrow \verb+a'+, where
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
145 a o a' = id (codomain a)
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
146 Then an identity data segment of \verb+a+ in Data Category C is
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
147 {a,a,a'}
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
148 <center><img src="fig/IdDataGear.pdf"></center>
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
149
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
150 To check \verb+{a,a,a'}+ is an identity,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
151 {b,b,b'} + {a,b,n} = {a,b,b' o (b o n)} = {a,b,n}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
152 Right identity law holds the same way.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
153
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
154 If we use
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
155 continuation f = continuation g
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
156 as a definition of arrow equality, we need
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
157 a' o a = id (domain a)
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
158
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
160 --A trivial duality of code and data
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
161
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
162 <center><img src="fig/Duality.pdf"></center>
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
163
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
164
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
165 Data category is a data segment with continuation, which is one step behind, so there is a trivial one to one correspondence.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
166 It is also easy to show C and Data category C is an adjunction pair. We show it using a universal mapping problem.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
167
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
168 Data segments in a Data category C is an object of original category C, so it has an identity arrow,
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
169 which is an object of Data Category C . Actually, we have a map F,
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
170 F : Obj C → Obj (Data Category C)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
171 F a = id a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
172 As a reverse, Functor U : (DataCategory C) C is defined as follows :
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
173 U d = codomain d
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
174 U {a,b,n} = b o n
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
175 where \verb+d+ is an object of Data Category C, and \verb+{a,b,n}+ is an arrow from \verb+a+ to \verb+b+, with continuation \verb+n+.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
176 Identity law and distribution law of \verb+U+ is easyly checked as
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
177 U {a,a,a'} = a o a' = id (codomain a)
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
178 We need a mapping \verb+η+, which will be a natural transformation.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
179 η : Obj C → U ( F a )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
180 η a = id a
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
181 We can define a solution \verb+*+ of universal mapping problem for \verb+F, U, η+ for
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
182 f : a → U {a,b,n}.
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
183 it is an allow from \verb+F a+ to \verb+b+,
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
184 * f = {a,b,b' o f}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
185 To see this is a solution,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
186 U ( *f ) o (η a) = (b o (b' o f) ) o id a = f
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
187 is directly checked and \verb+*f+ is unique, that is
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
188 if there is an arrow g U g o (η a) = f then g = *f.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189 This is also trivial as
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
190 b o continuation g =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
191 ( b o b' ) o ( b o continuation g) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
192 b o (b' o ( b o continuation g) ) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
193 b o (b ' o f) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
194 b o continuation ( *f )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
195 which implies \verb+g = *f+. Q.E.D.
3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
196
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
197
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
198 --Comparison
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
199
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
200 Meta computation in Haskell is defined as set of explicit monads. In Gears, meta computation is unique among the system,
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
201 which is something like operating system kernel or libraries.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
202
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
203 In OpenCL\cite{opencl} or Cuda\cite{cuda}, there is a code segment which is called kernel. The kernel runs parallelly in a GPU. The kernel
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
204 is very similar to our code segment.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
205
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
206 Object oriented languages, such as Smalltalk-80 or Java , has meta computation as a virtual machines. It is very different from
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
207 monad or meta computation of our Gears system. Data segment has no identity such as Smalltalk's self, it can be copied easyly,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
208 which is a very good property in a parallel computation environment.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
209
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
210 Code segment can be seen as a kind of Typed assembly language, which has typed input and predictable behavior.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
211
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
212 In old age, there is a software design method called data flow diagram. Category of code and data is very much like
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
213 data flow diagram approach. It can be seen as a revival of main frame technologies.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
214
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
215
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
216 --Conclusion
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
217
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
218 As usual categorical result, trivial duality of category and Data category means nothing itself.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
219 During the design of gears system, we see similarities of code segment and data segment. It has
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
220 meta segments and continuations. We think the duality gives us some guidance to design software
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
221 system such as an operating system or libraries.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
222
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
223 We have implemented Gears system on top of LLVM\cite{LLVM} and hope it can be used as real system description language.
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
224
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
225