1 + 1 = 2 を証明する

アバター
a5ua
記事: 199
登録日時: 14年前

1 + 1 = 2 を証明する

投稿記事 by a5ua » 14年前

C++のコンパイラを使って証明します。
自然数の定義には、ペアノの公理[anchor=ref1 goto=ref1_][1][/anchor]を使っています。(数学屋ではないので、間違ったことやってたらすいません)

方針としては、ある構造体Xを定義し、Xを評価したものを内部でtypedefして
X::evalという別の型を作り上げています。(XとX::evalが同じになることもあります。)
そして、二つの型X, Yに対して、X::eval型のオブジェクトにY::eval型のオブジェクトに代入できるとき、XとYは等価であるとしています。

以下ソースコード

CODE:

// 0
// 自然数の先頭元を表す
struct zero
{
	typedef zero eval;
};

// 任意の自然数 N の successor s(N)
// N の次の自然数を表す
template 
struct suc
{
	typedef suc eval;
};

// 任意の自然数 N, M に対して、加算 N + M を定義する
// テンプレートの特殊化により分岐
template 
struct add
{
	typedef typename add::eval eval;
};

// N + 0 = N
template 
struct add
{
	typedef typename N::eval eval;
};

// N + s(M) = s(N + M)
template 
struct add>
{
	typedef typename suc>::eval eval;
};

// 1 := s(0), 2 := s(1) = s(s(0)) と定義する
// 1 + 1 = 2を証明する
int main()
{
	// 左辺 1 + 1
	add, suc>::eval lhs;
	
	// 右辺 2
	suc>::eval rhs;

	// コンパイルが通れば証明完了
	lhs = rhs;
}
[anchor=ref1_][1] ペアノの公理 - Wikipedia[/anchor]
http://ja.wikipedia.org/wiki/%E3%83%9A% ... C%E7%90%86
最後に編集したユーザー a5ua on 2011年5月29日(日) 22:00 [ 編集 3 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: 1 + 1 = 2 を証明する

投稿記事 by みけCAT » 14年前

(?_?)
今の僕には理解できない。

kerotan0820
記事: 91
登録日時: 14年前

Re: 1 + 1 = 2 を証明する

投稿記事 by kerotan0820 » 14年前

私の場合
今の僕には理解出来ない ×
   僕には理解出来ない ◎