f(f(x)) = -x 再び

先日複素数を使った解答を出したが(その後Haskellの練習に変化)、やっぱり値域・定義域は実数の範囲だったみたいなので、今度は題意に沿った解答を考えてみよう。
要するに、正負以外に実数の空間を2等分する基準を考えればいいわけだから…(数分考えて)

f(x) =  1/x if |x| > 1
       -1/x if 0 < |x| < 1
        0   if x = 0

これでどうだろう。
(あれ? これだと0<|x|<1と1<|x|で実数の濃度は同じになってしまう。それでいいんだっけ)

他の人の解答など

多くの人はなんらかの形でmod2を使ってるみたい。

追記

さっそく間違いを発見してしまった。上の解答は|x|=1のときが上手く扱えない(単にどこかの不等号に等号を付けるだけではダメ)。

考察

この問題は最初に考えたように実数の空間を分割する基準を決めればいい。ただし、この基準は以下を満たす。

  • 正負(これも空間を分割する基準の一つ)とは直交する
  • 分割された片方の集合のある要素には、もう片方の集合に対応する要素が存在する(一対一対応)
  • 0以外の全ての実数はどちらかの集合に属し、かつ必ずどちらかにしか属さない

f(x)=1/xの場合、x=±1が特異点で3番目の条件を満たしていなかった。

この条件を満たすような集合の一方をR*として、正の実数の集合と負の実数の集合をそれぞれR+, R-とすると、実数Rは以下の5つの集合の和で表される。(ただし~は補集合を表す記号)

A=R+∧R*
B=R+∧~R*
C=R-∧R*
D=R-∧~R*
E={0}

fを2回適用したときの状態遷移は、

A →?→ C
B →?→ D
C →?→ A
D →?→ B
E →?→ E

こうなればいい。従って、これを満たすような状態遷移は、

A → B → C → D → A → ...
A → D → C → B → A → ...

のどちらかということになる。

次に具体的なR*と各状態遷移に対応する写像を決める。(続く)