2010-12-02 13 views
2

私は次のような厄介な問題があります。 私は、以下の機能を実装しました:どのように機能が常に可換性でないことを示すことができます

function bool less(nat x, nat y) { 
    if (y<>0) then 
     if (x<>0) then 
      return less(x-1,y-1); 
     else 
      return true; 
     end; 
    else 
     return false; 
    end; 
end; 

は、どのように私はすべてのxについて、yの次 少ない(x、y)と少ない(Y、X)は 同時に可能でないことを示すことができますか?

さようなら

(C)2010、月Burse、8004チューリッヒ

+0

それは特定のプログラミング言語であるはずですか?それは正確なセマンティクスに依存します。それがジェネリックアルゴリズムであると思われる場合は、なぜプログラミングの詳細が表示されますか? –

+0

'x'と' y'が両方とも負の場合、再帰は終了しません。 – Seth

+0

xとyはnatとします。したがって、その範囲は0〜最大でなければなりません。しかし、範囲0 ... infのために提起された問題を見ることもできます。これにより、最終的にはより簡単になります。 –

答えて

2

まあ、すべての最初の私はless(-1, -2)の場合を考えるように頼むだろう、私たちは上のように関数を定義する必要がありますn≥0の境界です。また、最初の入力が2番目の入力と等しい場合、両方の順序でtrueを返します。したがって、x≠yと仮定する必要があります。

私は矛盾による証明を使用します。

xとyの両方が≥0かつx≠yであるいくつかのyでは、(x、y)とless(y、x)の両方が真であると仮定します。

これは、xとyが両方とも非ゼロである間に、そのうちの1つがゼロになるまでxを1減算し、xを最初にチェックすることを意味します。この関数は、最初のオペランドがゼロになるとtrueを返し、2番目のオペランドがゼロに達したときにfalseを返します。

このための2つのケースがあります

  1. xは最初ゼロになります。この場合、n = xである。なぜなら、0 = x-n(1)であるからである。
  2. が最初にゼロになる。この場合、n = yであり、0 = y-n(1)であるからである。

x(x、y)= 0かつy≠(x、y)であるため、関数xがx回繰り返されたことを意味するless x、関数は手の前にfalseを返さなかった)。

同様に、less(y、x)はtrueを返しました。この関数はy回yter(1)= 0とx - y(1)> 0(前と同じ理由)を繰り返しました。 y - x > 0x - y > 0

これは私たちに2つの有用な関係を与えます。並び替え:y > xx > y(関数の意味論的な意味で、私たちは、関数がどのように動作するかの定義から、これを達成していると我々は我々が特定の公理を扱うことができます純粋数学にそれを縮小しています)。 y > xx > yから

、あなたがx > xy > yとして並べ替えることができますが(xがyよりも大きい場合、yがより大きい場合、すべてのものよりも大きくなる。yはxよりも大きいのでxはxよりも大きいです)。

これは論理的な矛盾です。したがって、私たちの前提(両方が真であること)は間違っています。

したがって、x≠yかつx、y≧0の場合、less関数は、less(x、y)とless(y、x)の両方でtrueを返すことはできません。

(私は証明をしなければならなかったので、私はいくつかが来るしなければならないするつもりですけれども、それはそれは良い習慣です(しばらくしている)ので、私は少し錆びたかもしれません。もし誰かがエラーを見つけたら、それを指摘してください。私はそれを修正しようとします)

+0

私はあなたが数学記号>より少ないコード記号を減らしているのを見て、数学から何とかy> xとx> yが不可能であることを知っています。実際に私はこのターンを避けたかったのです。シンボルがあまりにも孤立しているのではなく、< >を追加する前に、あなたが近くにいたと感じています。 –

+0

ビットがより硬く、これが論理的に健全であるかどうかはわかりません(そして、私は>または<少し)を狙っているかもしれませんが、前と同じ仮定のステップです。 'less(x、y)'は 'less(0、x - y)'を意味します。 'less(y、x)'は 'less(0、y - x)'を意味します。 '(a-b)= - (b-a)'である。 (x-y)が自然数(0以上)である場合、(y-x)は(xy)= - (yx) 'ではなく、xyが自然数であると定義されます。 )またはその逆。これは私たちの仮定、したがって矛盾による証明に違反します。 (それはちょっと弱いですが、コメントボックスの制限は私がそのような証明をしてから少し時間がかかる...しかし、私はそれがうまくいくと思います) –

+0

また私の元の証拠で、私は 'x> yとx>は論理的な矛盾です。 –

関連する問題