練習問題 3.6.2

p = (m+n) `div` 2
として,
m + 1 < n
であれば
m < p < n
であることを示せ.
m + 1 = n
の場合はどうなるか.



div
の仕様により,
p = floor((m+n)/2)
foor
の仕様により
(m+n)/2 - 1 < p ≦ (m+n)/2


    (m+n)/2 - 1 < p ≦ (m+n)/2
≡      { 全体に2をかける }
    m + n - 2 < 2p ≦ m + n
≡      { m+1 < n }
    2m - 1 < m + n - 2 < 2p ≦ m + n < 2n - 1
≡      { 全体を2で割って }
    m - 1/2 < p < n - 1/2
≡      { 全体に 1/2 を加えて }
    m < p + 1/2 < n 
≡      { m,n,pともに整数だから }
    m < p < n
m + 1 = n
であれば,


    (m+n)/2 - 1 < p ≦ (m+n)/2
≡      { 全体に2をかける }
    m + n - 2 < 2p ≦ m + n
≡      { m+1 = n }
    2m - 1 < 2p ≦ 2m + 1
≡      { 全体を2で割って }
    m - 1/2 < p ≦ m + 1/2
≡      { 全体に 1/2 を加えて }
    m < p + 1/2 ≦ m + 1
≡      { m,n,pともに整数だから }
    m = p < n