Mercurial > hg > Papers > 2017 > atton-master
comparison paper/type.tex @ 37:881bd1d12a45
Writing expression ...
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 28 Jan 2017 11:28:38 +0900 |
parents | 34812c1b33c2 |
children | 5d4097922243 |
comparison
equal
deleted
inserted
replaced
36:34812c1b33c2 | 37:881bd1d12a45 |
---|---|
177 これらの振舞いが同じプログラムを実行した時に何かしらの意味であれば、結果としてその言語の実装の正しさを証明することに繋がる。 | 177 これらの振舞いが同じプログラムを実行した時に何かしらの意味であれば、結果としてその言語の実装の正しさを証明することに繋がる。 |
178 | 178 |
179 まずはブール式のみの操作的意味論を定義する。 | 179 まずはブール式のみの操作的意味論を定義する。 |
180 | 180 |
181 \begin{definition} | 181 \begin{definition} |
182 ブール値(B) | |
182 | 183 |
183 構文 | 184 構文 |
184 | |
185 \begin{align*} | 185 \begin{align*} |
186 t ::= && \text{項} \\ | 186 t ::= && \text{項} \\ |
187 true && \text{定数真} \\ | 187 true && \text{定数真} \\ |
188 false && \text{定数偽} \\ | 188 false && \text{定数偽} \\ |
189 if \; t \; then \; t \; else \; t && \text{条件式} | 189 if \; t \; then \; t \; else \; t && \text{条件式} |
190 \end{align*} | 190 \end{align*} |
191 \end{definition} | 191 |
192 | |
193 \begin{definition} | |
194 値 | 192 値 |
195 | |
196 \begin{align*} | 193 \begin{align*} |
197 v ::= && \text{値} \\ | 194 v ::= && \text{値} \\ |
198 true && \text{真} \\ | 195 true && \text{真} \\ |
199 false && \text{偽} | 196 false && \text{偽} |
200 \end{align*} | 197 \end{align*} |
201 \end{definition} | 198 |
202 | |
203 \begin{definition} | |
204 評価 | 199 評価 |
205 | |
206 \begin{align*} | 200 \begin{align*} |
207 if \; true \; then \; t_2 \; else t_3 \rightarrow t_2 && \text{(E-IFTRUE)} \\ | 201 if \; true \; then \; t_2 \; else t_3 \rightarrow t_2 && \text{(E-IFTRUE)} \\ |
208 if \; false \; then \; t_2 \; else t_3 \rightarrow t_3 && \text{(E-IFFALSE)} \\ | 202 if \; false \; then \; t_2 \; else t_3 \rightarrow t_3 && \text{(E-IFFALSE)} \\ |
209 \AxiomC{$ t_1 \rightarrow t_1'$} | 203 \AxiomC{$ t_1 \rightarrow t_1'$} |
210 \UnaryInfC{$ if \; t_1 \; then \; t_2 \; else \; t_3 \rightarrow if \; t_1' \; then t_2 \; else \;t_3 $} | 204 \UnaryInfC{$ if \; t_1 \; then \; t_2 \; else \; t_3 \rightarrow if \; t_1' \; then t_2 \; else \;t_3 $} |
211 \DisplayProof | 205 \DisplayProof |
212 && \text{(E-IF)} | 206 && \text{(E-IF)} |
213 \end{align*} | 207 \end{align*} |
214 \end{definition} | 208 |
215 | 209 \end{definition} |
216 | 210 |
211 評価の最終結果になりえる項である値は定数 $ true $ と $ false $ のみである。 | |
212 評価の定義は評価関係の定義である。 | |
213 評価関係 $ t \rightarrow t' $ は「$ t $ が1ステップで $ t' $ に評価される」と読む。 | |
214 直感的には抽象機械の状態が $ t $ ならば $ t' $ が手に入るという意味である。 | |
215 | |
216 評価関係は3つあるが、2つは前提を持たないため、2つの公理と1つの規則から成る。 | |
217 1つめの規則 E-IFTRUE の意味は、評価の対象となる項の条件式が定数 $ true $ である時に、then 節にある $ t_2 $ を残して他の全ての項を捨てるという意味である。 | |
218 E-EIFFALSE も同様に条件式が $ false $ の時に $ t_3 $ のみを残す。 | |
219 3つ目の規則 E-IF は条件式の評価である。 | |
220 条件式 $ t $ が $ t'$ に評価されうるのならば then 節と else 節を変えずに条件部のみを評価する。 | |
221 | |
222 評価の定義から分かることの中に、if の中の then節 と else 節は条件部より先に評価されないことがある。 | |
223 よって、この言語は条件式の評価に対し条件部から評価が優先されるという評価戦略を持つことが分かる。 | |
224 | |
225 \begin{definition} | |
226 推論規則のインスタンスとは、規則の結論や前提に対し、一貫して同じ項による書き換えを行なったものである。 | |
227 \end{definition} | |
228 | |
229 例えば、 | |
230 | |
231 \verb/if true then true else (if false then false else false)/ | |
232 | |
233 は E-IFTRUE のインスタンスであり、 E-IFTRUEの $ t_2 $ が \verb/true/ かつ $ t_3 $ が \verb/if false then false else false/ の時である。 | |
234 | |
235 \begin{definition} | |
236 1ステップ評価関係 $ \rightarrow $ とは、3つの評価の規則を満たす、項に関する最小の二項関係である。 | |
237 $ (t, \; t') $ がこの関係の元である時、「評価関係式 $ t \rightarrow t'$ は導出可能である」と言う。 | |
238 \end{definition} | |
239 | |
240 ここで「最小」という言葉が表れるため、評価関係式 $ t \rightarrow t'$ が導出可能である時かつその時に限り、その関係式は規則によって正当化される。 | |
241 すなわち評価関係式は公理 E-IFTRUE か E-IFFALSE 、前提が成り立つ時の E-IF のインスタンスとなる。 | |
242 与えられた評価関係式が導出可能であることを証明するには、葉が E-IFTRUE か E-IFFALSE であり、内部ノードのラベルが E-IF のインスタンスである導出木が示せれば良い。 | |
243 例えば以下の略記の元 $ if \; t \; then \; false \; then \; false \rightarrow if \; u \; then \; false \; else \; false $ の導出可能性は以下のような導出木によって示せる。 | |
244 | |
245 \begin{itemize} | |
246 \item $ s = if \; true \; then \; false \; else \; false $ | |
247 \item $ t = if \; s \; then \; true \; else \; true $ | |
248 \item $ u = if \; false \; then \; true \; else \; true $ | |
249 \end{itemize} | |
250 | |
251 | |
252 \begin{prooftree} | |
253 \AxiomC{} | |
254 \RightLabel{E-IFTRUE} | |
255 \UnaryInfC{ $ s \rightarrow true $ } | |
256 \RightLabel{E-IF} | |
257 \UnaryInfC{ $ t \rightarrow u $} | |
258 \RightLabel{E-IF} | |
259 \UnaryInfC{ $ if \; t \; then \; false \; then \; false/ \rightarrow if \; u \; then \; false \; else \; false $} | |
260 \end{prooftree} | |
261 | |
262 1ステップ評価関係は与えられた項に対して抽象機械の状態遷移を定義する。 | |
263 この時、機械がそれ以上ステップを進められない時にそれが最終結果となる。 | |
264 | |
265 \begin{definition} | |
266 正規形 | |
267 | |
268 項 $ t $ が正規形であるとは、$ t \rightarrow t'$となる評価規則が存在しないことである。 | |
269 \end{definition} | |
270 | |
271 この言語において $ true $ や $ false $ は正規形である。 | |
272 逆に言えば、構文的に正しい if が用いられている場合は評価することが可能なため正規形ではない。 | |
273 極端に言えばこの言語における全ての値は正規形なのである。 | |
274 しかし、他の言語における値は一般的に正規形ではない。 | |
275 実のところ、値でない正規形は実行時エラーとなって表れる。 | |
276 | |
277 実際にこの言語に整数を導入して値では無い正規形を確認していく。 | |
217 | 278 |
218 | 279 |
219 | 280 |
220 % {{{ 型なしラムダ計算 | 281 % {{{ 型なしラムダ計算 |
221 \section{型なしラムダ計算} | 282 \section{型なしラムダ計算} |