Mercurial > hg > Papers > 2020 > soto-midterm
comparison tex/agda.tex @ 8:27a6616b6683
fix
author | soto@cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 14 Sep 2020 19:58:10 +0900 |
parents | acad18934981 |
children | a8bc8c6b48bd |
comparison
equal
deleted
inserted
replaced
7:acad18934981 | 8:27a6616b6683 |
---|---|
5 Curry-Howard 同型対応により命題と型付きラムダ計算が一対一で対応するため Agda で | 5 Curry-Howard 同型対応により命題と型付きラムダ計算が一対一で対応するため Agda で |
6 は記述したプログラムを証明することができる。 | 6 は記述したプログラムを証明することができる。 |
7 | 7 |
8 \subsection{プログラムの読み方} | 8 \subsection{プログラムの読み方} |
9 以下は Agda プログラムの一例となる。 | 9 以下は Agda プログラムの一例となる。 |
10 本節では以下のコードを説明することにより、Agda プログラムについて理解を深めることにより、 | 10 本節ではAgdaの基本事項について解説する。 |
11 後述する Agda コードの理解を容易にすることを目的としている。 | |
12 | 11 |
13 基本事項として、ℕ というのは自然数 (Natulal Number) のことである。 | 12 基本事項として、ℕ というのは自然数 (Natulal Number) のことである。 |
14 また - (ハイフン) が2つ連続して並んでいる部分はコメントアウトであり、 | 13 また - (ハイフン) が2つ連続して並んでいる部分はコメントアウトであり、 |
15 ここでは関数を実行した際の例を記述している。 | 14 ここでは関数を実行した際の例を記述している。 |
16 したがって、この関数は2つの自然数を受け取って足す関数であることが推測できる。 | 15 したがって、この関数は2つの自然数を受け取って足す関数であることが推測できる。 |
22 : 以降の (x y : ℕ ) は関数は x, y の自然数2つを受けとるという意味になる。 | 21 : 以降の (x y : ℕ ) は関数は x, y の自然数2つを受けとるという意味になる。 |
23 → 以降は関数が返す型を記述している。 | 22 → 以降は関数が返す型を記述している。 |
24 まとめると、この関数 plus は、型が自然数である2つの変数が x, y を受け取り、 | 23 まとめると、この関数 plus は、型が自然数である2つの変数が x, y を受け取り、 |
25 自然数を返すという定義になる。 | 24 自然数を返すという定義になる。 |
26 | 25 |
27 実装部分の説明をする。 | |
28 関数の定義をしたコードの直下で実装を行うのが常である。 | 26 関数の定義をしたコードの直下で実装を行うのが常である。 |
29 関数名を記述した後に引数を記述して受け取り、= (イコール) 以降で | 27 関数名を記述した後に引数を記述して受け取り、= (イコール) 以降で |
30 引数に対応した実装をする。 | 28 引数に対応した実装をする。 |
31 | 29 |
32 今回の場合 plus x zero であれば +0 である為、そのまま x を返す。 | 30 今回の場合 plus x zero であれば +0 である為、そのまま x を返す。 |
34 遷移している。 | 32 遷移している。 |
35 受け取った y を +1 されていたとして y の値を減らしている。 | 33 受け取った y を +1 されていたとして y の値を減らしている。 |
36 | 34 |
37 関数の実装全体をまとめると、x と y の値を足す為に y から x に数値を1つずつ渡す。 | 35 関数の実装全体をまとめると、x と y の値を足す為に y から x に数値を1つずつ渡す。 |
38 y が 0 になった際に計算が終了となっている。 | 36 y が 0 になった際に計算が終了となっている。 |
39 指折りでの足し算を実装していると捉えても良い | 37 指折りでの足し算を実装していると捉えても良い。 |
40 | 38 |
41 \subsection{Data 型} | 39 \subsection{Data 型} |
42 Deta 型とは分岐のことである。 | 40 Deta 型とは分岐のことである。 |
43 そのため、それぞれの動作について実装する必要がある。 | 41 そのため、それぞれの動作について実装する必要がある。 |
44 例として既出で Data 型である ℕ の実装を見てみる。 | 42 例として既出で Data 型である ℕ の実装を見てみる。 |