人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile


●質問者: 匿名質問者
●カテゴリ:学習・教育
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

5 ● 匿名回答4号
ベストアンサー

>この場合はλ式の使えるプログラム言語で「四則演算等、自分で定義していない演算子は一切使わず」「(?1)、(1)、(×:乗法)、(=:等号)」をプログラミング(定義)して「 -1×-1=1」を出力できればいいのかな?

Scheme(Gauche)で作ってみた。

その前に、

>難しそうなのは匿名回答4号さんの定義だとある整数を表す表現は無限(x =(x+k,k):kは自然数)にあるので、等号をどうやって定義するかというのがありそうです。

(k,l) = (m,n) ⇒ k + n = l + m

とする。
(岩波数学辞典第四版p587参照)

さらに、掛け算の定義を以下の様に修正。

a * 0 = 0
a * succ(b) = a + (a * b)

;; 0を空リスト定義
(define zero '())

;; 0の判定関数
(define (zero? x)
 (null? x))

;; 後者写像succ
(define (succ x)
 (cons x x))

;; 後者写像の逆写像desucc
;; desucc(succ(x)) = x
(define (desucc x)
 (car x))

;; 足し算plus
(define (plus a b)
 (let loop ((result a) (b b))
 (cond ((zero? b) result)
 (else
 (loop (succ result) (desucc b))))))

;; 掛け算mult
(define (mult a b)
 (let loop ((result zero) (b b))
 (cond
 ((zero? b) result)
 (else
 (loop (plus a result) (desucc b))))))

;; 自然数→整数
(define (N-to-Z a)
 (cons a zero))

;; 整数の同値
(define (Z= a b)
 (equal?
 (plus (car a) (cdr b))
 (plus (cdr a) (car b))))

;; 整数の掛け算
(define (Z-mult a b)
 (cons
 (plus (mult (car a) (car b))
 (mult (cdr a) (cdr b)))
 (plus (mult (car a) (cdr b))
 (mult (cdr a) (car b)))))

N-to-Zでは-1を作ることができない。
N-to-Zは自然数を整数に変換するものなので、そもそも自然数でない負数は対応していない。
だから、-1は手で作らないといけない。
具体的には、

(cons zero (succ zero))

とすれば良い。

Z-multは負数に対しても通用するので、

(Z=
 (N-to-Z (succ zero)
 (Z-mult
 (cons zero (succ zero))
 (cons zero (succ zero))))

が#tを返せば良く、実際にそうなっている。


6 ● 匿名回答6号

(-1)×(-1)=a とすると、
{x -(x+1)}{x -(x+1)}=a
x^2-2x(x+1)+(-1)×(-1)×(x+1)^2=a
x^2 - 2x^2- 2x +a(x^2+2x+1)=a
x(x+2)(a-1)=0

これが任意のxで成り立つならばa=1
故に(-1)×(-1)=1


匿名質問者さんのコメント
失礼。これはネタ回答だと思ってました。

6-7件表示/7件
4.前5件|次の5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ