ruby のメソッド表現で良ければ、こんな感じになるかと。
def true.imp q q end def false.imp q true end
a = 1 b = 2 p (a == b).imp true # => true p (a != b).imp true # => true p (a == b).imp false # => true p (a != b).imp false # => false
命題論理でp→qというのは(not p) or qのことです。Rubyの記号だと(!p) ||qです。
しかしですよ、それはかなり人工的です。例えば、「人は死すべきものである」というのは命題論理の「ならば」ではなく、述語論理です。
「全てのxに対して、xが人であるならばxは死すべきものである」
という意味です。命題論理の意味では普通は使いません。
「ネコが動物であるならば、1+1=2である」
「ネコが動物であるならば、1+1=3である」
「ネコが植物であるならば、1+1=2である」
「ネコが植物であるならば、1+1=3である」
これらは2番目が偽で、それ以外は真ということになりますが、しかし人工的です。普通はそんなことは言いません。論理学の教材に人工的な例が書いてあるぐらいです。普通に使うのは
「オイラー定数が無理数であるならば、オイラー定数に1を加えたものも無理数である」
のように、仮定が未解決問題の場合に使うものです。
回答ありがとうございます。Rubyの関数で書いたら、次のようになるのでしょうか。
def Imp(p,q) return (!p) ||q end
でも、この質問では、クラス・メソッドを教えてほしいです。(^_^;
ちなみに、最終的には、拙ブログのプログラムのImp関数をImpメソッドに書き直そうかと思っています。(^_^;
「Imp(p,q)」から、「p.Imp(q)」または、「p Imp q」に書き直したいです。
http://rsc.hatenablog.com/entry/20160120/1453238549
すみません、でしたら他の人が答えるのをお待ち願います。
ruby のメソッド表現で良ければ、こんな感じになるかと。
def true.imp q q end def false.imp q true end
a = 1 b = 2 p (a == b).imp true # => true p (a != b).imp true # => true p (a == b).imp false # => true p (a != b).imp false # => false
回答ありがとうございます。Rubyだと簡単にできるんですね。(^_^;
個人的な予想としては、「(!self) || target」が出てくるのかと思っていました。(^_^;
今まで気にしたことがなかったのですが、組み込みのクラスで Boolean みたいのがないんですよね、Ruby って。
true と false の実体を表すクラスしかなくて、左側が固定になっちゃうので、回答に書いた感じになりました。
回答ありがとうございます。Rubyだと簡単にできるんですね。(^_^;
2018/10/21 17:17:26個人的な予想としては、「(!self) || target」が出てくるのかと思っていました。(^_^;
今まで気にしたことがなかったのですが、組み込みのクラスで Boolean みたいのがないんですよね、Ruby って。
2018/10/21 20:15:33true と false の実体を表すクラスしかなくて、左側が固定になっちゃうので、回答に書いた感じになりました。