0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Haskellでラムダ計算:等式と不等式

Last updated at Posted at 2024-11-30

等式と不等式を定義しましょう。まずは不等式から定義します。
$x\geq y$を判定する関数$\textbf{G}$を下記のように定義します。
$$\textbf{G}\equiv(\lambda xy.\textbf{Z}(x\textbf{P}y))$$

3>2を証明する

$3>2$を判定します。
$\textbf{G32}\equiv
(\lambda xy.\textbf{Z}(x\textbf{P}y))\textbf{32}\rightarrow
\textbf{Z}(\textbf{3P2})\rightarrow
\textbf{Z}((\lambda sz.s(s(s(z))))\textbf{P2})$
$\rightarrow\textbf{Z}(\textbf{P}(\textbf{P}(\textbf{P}(\textbf{2}))))
\rightarrow
\textbf{Z}(\textbf{P}(\textbf{P}(\textbf{P2})))
\rightarrow\textbf{Z}(\textbf{P}(\textbf{P}(\textbf{1})))
\rightarrow\textbf{Z}(\textbf{P}(\textbf{0}))$
ここで算術編の結果$\textbf{P2}\rightarrow\textbf{1}、\textbf{P1}\rightarrow\textbf{0}$を使ったので。

更に$\textbf{P}(\textbf{0})$を求めます。
$\textbf{P0}
\rightarrow(\lambda n.(n\Phi(\textbf{B}))\textbf{F})\textbf{0}
\rightarrow(\textbf{0}\Phi(\textbf{B}))\textbf{F})
\rightarrow((\lambda sz.z)\Phi(\textbf{B}))\textbf{F}$
$\rightarrow(\lambda z.z)\textbf{F}
\rightarrow\textbf{F}$
この結果から、$\textbf{G32}\rightarrow
\textbf{ZF}
\rightarrow(\lambda x.x\textbf{F}\neg\textbf{F})\textbf{F}
\rightarrow\textbf{FF}\neg\textbf{F}$
$\rightarrow(\textbf{FF}\neg)\textbf{F}
\rightarrow(\neg)\textbf{F}
\rightarrow\textbf{T}
$となり、$3>2$であることを証明できました。

2>3を計算する

逆の場合の$2>3$はどうなるでしょうか。
$\textbf{G23}
\rightarrow(\lambda xy.\textbf{Z}(x\textbf{P}y))\textbf{23}
\rightarrow\textbf{Z}(\textbf{2P3})
\rightarrow\textbf{Z}((\lambda sz.s(s(z)))\textbf{P3})$
$\rightarrow\textbf{Z}(\textbf{P}(\textbf{P}(\textbf{3})))
\rightarrow\textbf{Z}(\textbf{P}(\textbf{2}))
\rightarrow\textbf{Z}(\textbf{1})
\rightarrow(\lambda x.x\textbf{F}\neg\textbf{F})\textbf{1}
\rightarrow\textbf{1}\textbf{F}\neg\textbf{F}$
$\rightarrow(\lambda sz.s(z))\textbf{F}\neg\textbf{F}
\rightarrow\textbf{F}(\neg)\textbf{F}
\rightarrow\textbf{F}$
$2>3$は偽となりました。

2=2を計算する

$\textbf{G22}
\rightarrow(\lambda xy.\textbf{Z}(x\textbf{P}y))\textbf{22}
\rightarrow\textbf{Z}(\textbf{2P2})
\rightarrow\textbf{Z}((\lambda sz.s(s(z)))\textbf{P2})$
$\rightarrow\textbf{Z}(\textbf{P}(\textbf{P}(\textbf{2})))
\rightarrow\textbf{Z}(\textbf{P}(\textbf{1}))
\rightarrow\textbf{Z}(\textbf{0})
\rightarrow\textbf{T}$
Haskellの式は後ほど。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?