まあ、すべての最初の私は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つのケースがあります
- xは最初ゼロになります。この場合、n = xである。なぜなら、0 = x-n(1)であるからである。
- が最初にゼロになる。この場合、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 > 0
とx - y > 0
:
これは私たちに2つの有用な関係を与えます。並び替え:y > x
とx > y
(関数の意味論的な意味で、私たちは、関数がどのように動作するかの定義から、これを達成していると我々は我々が特定の公理を扱うことができます純粋数学にそれを縮小しています)。 y > x
とx > y
から
、あなたがx > x
とy > y
として並べ替えることができますが(xがyよりも大きい場合、yがより大きい場合、すべてのものよりも大きくなる。yはxよりも大きいのでxはxよりも大きいです)。
これは論理的な矛盾です。したがって、私たちの前提(両方が真であること)は間違っています。
したがって、x≠yかつx、y≧0の場合、less
関数は、less(x、y)とless(y、x)の両方でtrueを返すことはできません。
(私は証明をしなければならなかったので、私はいくつかが来るしなければならないするつもりですけれども、それはそれは良い習慣です(しばらくしている)ので、私は少し錆びたかもしれません。もし誰かがエラーを見つけたら、それを指摘してください。私はそれを修正しようとします)
それは特定のプログラミング言語であるはずですか?それは正確なセマンティクスに依存します。それがジェネリックアルゴリズムであると思われる場合は、なぜプログラミングの詳細が表示されますか? –
'x'と' y'が両方とも負の場合、再帰は終了しません。 – Seth
xとyはnatとします。したがって、その範囲は0〜最大でなければなりません。しかし、範囲0 ... infのために提起された問題を見ることもできます。これにより、最終的にはより簡単になります。 –