格子点をすり抜ける直線

平面上に、碁盤の目のように縦横に等間隔に、どこまでも点が並んでいたとします。
(こういう点を「格子点」と言います)
その中のある1点からスタートして、他の点には全く触らないようにして直線を引くことができるでしょうか。

もし点にほんの少しでも大きさがあったり、線に幅があったりすれば、
直線をどのように引いても必ずどこかで点と接触します。
しかし、あくまでも理屈の上で、点の大きさも、線の幅も0だとしたならば、
どの点にも全く触らない直線が引けるのです。
なぜか。
点と直線がぶつかったとき、そのぶつかった点の位置を、
横いくつ、縦いくつ、という数え方で記録したとしましょう。
例えば横に10個、縦に3個進んだときにぶつかった点の位置は(10, 3)です。
このとき、ぶつかった点の位置の縦横比は、3/10 という分数=有理数となります。
どんな点であっても、ぶつかった点の位置は必ず有理数(の整数倍)で表すことができるわけです。
ところが、数の中には有理数では表すことができない、無理数もあります。
例えば縦横比1:√2で引いた直線は、有理数で表すことができません。
なので、傾きが無理数であるような直線は、どの格子点にもぶつからないのです。

・・・と、ここまでは前置きで、次が本当の問題。

どんな角度で直線を引いたとしても、必ずどこかの点にぶつかるように、
上手い具合に点を並べることができるでしょうか?

碁盤の目のように点を並べたのでは、直線は隙間をすり抜けてしまいました。
ならば、隙間が全くできないように、びっちりと点を並べることができるか、という問題です。
例えば、点を四角に並べてダメなら、三角に並べてみたらどうでしょうか。

一辺の長さが1の正三角形の高さは √3/2 という無理数です。
なので、無理数の角度で引いた直線でも当たることがある?
残念ながら、点を三角に並べたとしても隙間はできてしまいます。
というのは、三角に並べた点を横にスライドするように変形すれば、四角と同じことになるからです。

もし三角形で隙間ができなかったのなら、四角形だって隙間無しになるはずでしょう。
同じような理由で、点を6角形に並べたとしても、平行四辺形に並べたとしても、
とにかくある一定パターンの単純な繰り返しであれば、隙間はどこかに空いてしまうのです。

ならば、遠くに行くほど点の間隔を狭くしていったらどうでしょうか。
例えば、スタート地点から見て1列目の点は、間隔1で打ちます。
2列目の点の間隔は、1列目の半分の 1/2 で打ちます。
3列目の点の間隔は、2列目のさらに半分の 1/4 にします。
この調子で、1/8, 1/16, 1/32 ・・・と、どんどん間隔を狭くしていけば、
いつかは隙間がほとんど無くなって、直線とぶつかるのではないでしょうか。
ところが、このように隙間をどんどん狭めていっても、その間をすり抜ける直線が依然、残ってしまうのです。
1/2, 1/4, 1/8, 1/16・・・という点とは、どういったものか。
それは、2進法で表した場合、小数点以下有限の桁数になる点のことです。
なので、直線とぶつかった点の縦横比(あるいは横縦比)は、有限桁数の2進法の整数分の1となるはずです。
ところが、数の中には繰り返しの無い無限桁数の2進法でないと表せないものもあります。
例えば、円周率πなどといった超越数は、このルールで表すことができません。
なので、点の間隔を 1/2 に狭めていっても、1/10 に狭めていっても、やはり隙間が残ってしまうのです。
(点の間隔を1/10 に狭めていった場合は、普通の10進法の小数で有限桁数という意味になります。)

それでは、もっと別のルールで点の間隔を狭めていったらどうでしょうか。
例えば、2列目の点の間隔を 1/2、3列目の点の間隔を 1/3、4列目の点の間隔を 1/4、、、
といった具合に、点の間隔を 1/n に狭めてみるとか。
なんとなく無駄が多いと感じたなら、点の間隔をN番目の素数P(n)の 1/P(n) に縮めてみるとか。
あるいは、無理数が気になるのであれば、
2列目の点の間隔は 1/√2、3列目の点の間隔は 1/√3、4列目の点の間隔は 1/√4、、、にするとか。

もっとずっと不規則な並べ方だってあるでしょう。
例えば円周率3.14159265358・・・を利用して、
・1点目は、スタート地点から角度31度、距離41のところに打つ。
・2点目は、1点目から角度プラス59度、距離26のところに打つ。
・3点目は、2点目から角度プラス53度、距離58のところに打つ。
・・・この手続きを、円周率に従って果てしなく、どこまでも続けてみる。
ここまでは円周率を2桁ずつ取ってきていたが、この桁数はもっと増やしていった方が良いでしょう。
例えば、手続きを1000回繰り返す毎に桁数を1つ増やして、
1001回目からは3桁ずつ取って処理を続ける。
2001回目以降は4桁ずつ取って処理を続ける・・・
こういった非常に複雑な点の打ち方をすれば、いつかはどんな直線も漏らすことなく、
どこかの点にぶつかるのではないでしょうか。
何せ、円周率は無限に続いているのです。
手続きをどこまでも、どこまでも無限に続けてゆけば、
いずれはあらゆる直線も尽くされてしまうように思えるのですが。。。

ところが驚いたことに、どれほど複雑巧妙な手続きであっても、
直線を漏らさず、全て尽くすことは不可能なのです。
というのは、あらゆる方向に引いた直線は実数の濃度を持つのに対し、
一定の手続きで打っていった点は、高々可算の濃度しか持たないからです。
 「全ての実数を、順序を付けて一列に並べることができない」
このことを前提として認めるならば、どんな手続きで点を集めてきても、
直線を埋め尽くせないことがわかります。
(前提の説明は省略。気になる人は「カントール対角線論法」とか、
「非加算集合」といったキーワードでググれ。)
ある特定の規則、あるいは一定の手続きで打った点というものには、
何らかの方法で1番、2番、3番・・・といった順番を付けることができます。
点の間隔を狭めつつ並べていく、という方法であっても、
・スタート地点に近い方が若い順番。
・同じ順序であれば、右側の方が左側よりも若い順番。
・同じ順序であれば、上側の方が下側よりも若い順番。
という3つのルールで、スタートに近い点から順番に番号を付けることができます。
そして、もし点と直線が必ずぶつかるのであれば、
ぶつかった点を基準として、直線にも順番を付けることができるはずです。
しかし、直線の縦横比は実数であり、本来順序付けができないものであるはず。
なので、順序付けできる点によって、あらゆる直線を漏らさず埋め尽くすことはできないのです。

結局のところ、一定のルールで点を打つならば、どのような方法であっても隙間ができてしまうのです。
ならば、繰り返しや、決まったルールを持たないような点の打ち方であったらどうでしょうか。
平面を埋め尽くす形は、必ずしも単純な繰り返しパターンであるとは限りません。
例えば「ペンローズタイル」という模様は、単純な繰り返しではない、非周期的なパターンで平面を埋め尽くします。

絵を見てわかるように、ペンローズタイルとは「完全なルールを持たない、半ば不規則なパターン」です。
このペンローズタイルを無限に敷き詰めたなら、どんな直線であっても、
必ずどこかのタイルの頂点にぶつかるのではないでしょうか。
考えられる可能性は3つあります。
A. どんな直線であっても、必ずペンローズタイルのどこかの頂点にぶつかる。
B. タイルの並べ方によって、全ての直線がぶつかる場合と、一部がすり抜ける場合がある。
C.どのようにタイルを並べても、頂点の間をすり抜ける直線が残ってしまう。
さて、答はどれでしょう?

正解はC.たとえ非周期的に並んだペンローズタイルであっても、全ての直線を尽くすことはできません。
ペンローズタイルの頂点の位置は全て、+−×÷の四則演算と、二乗とルート√によって計算することができます。
ところが実数の中には、四則演算と二乗とルートの有限回の演算によって計算できない数もあります。
例えば立方根3√2 などがそうです。

このように考えてゆくと、いかなる方法であっても、
点を並べて全ての直線を尽くすことは不可能であるように思えます。
単純に、点を並べていってスタート地点を取り囲む円を描くことができれば、
あらゆる直線を覆い尽くすことができるのですが、、、
どうやら「点」を1つずつ集めてきて、円という「線」を作るのは無理なことのようです。

もし、星というものが点だったとして、星が宇宙に無限にあるのだとしたら、
宇宙空間は真っ白に埋め尽くされるのではないだろうか・・・
しかしながら、たとえ点が無限にあったとしても、それが点である限り、どこかに必ず隙間が生じます。
そう思うと、実際に夜空の大部分が暗いということに、少しは納得がゆくような気がします。