コラッツ予想がとけたらいいな その2
■ このスレッドは過去ログ倉庫に格納されています
偶数は「最小でない反例」の可能性があるのですね。
失礼しました。
>>604-606は無しでお願いします。 >>603を証明します。
拡張完全割数列のうちで、後ろに無限に長く、base caseである21[6]にたどり着かない、
最小反例cを考えます。
「cは奇数」であり、「c≠3」「c≠9」とします。
「c≡3 mod 9」「c≡6 mod 9」「c≡0 mod 9」で場合分けをします。
・c≡3 mod 9のとき
star変換B[1,-2]をおこないます。変換関数はy=c/6-1/2
入力は
c=9t+3 (t≦0) から始めて
cは奇数なので c=18t'+3 (t'≦0)
cは3ではないので c=18t'' +21 (t''≦0)
変換関数に代入すると
y=3t'' +3 < c より小さい反例が得られました。
・c≡6 mod 9のとき
star変換D[3,-2]をおこないます。変換関数はy=(2/3)c-1
入力は
c=9t+6 (t≦0) から始めて
cは奇数なので c=18t'+15 (t'≦0)
変換関数に代入すると
y=12t' +9 < c より小さい反例が得られました。 ・c≡0 mod 9のとき
star変換E[2,-4]をおこなうと、分数になる場合があります。
なので入力を分割します。
c=9t+9 (t≦0) を
c1=36t'+9 (t'≦0) 9を除いて36t'' +45 (t''≦0)
c2=36t'+18 (t'≦0) 偶数なので除外
c3=36t'+27 (t'≦0)
c4=36t'+36 (t'≦0) 偶数なので除外
・c1のときはE[2,-4]をおこなう
y=c1/12-3/4 = 3t'' +3 < c1 より小さい反例が得られました。
・c3のときは、以下をそれぞれF後のmod9に応じておこないます。
F → C (1/3)((8/3)c3-3)-2 = (8/9)c3 -3 < c3
F → B (1/6)((8/3)c3-3)-1/2 = (4/9)c3 -1 < c3
F → E (1/12)((8/3)c3-3)-3/4 = (2/9)c3 -1 < c3
どの場合も、より小さい反例が得られました。
なお、F → Eのときは循環する可能性がありますが、
y=(8/3)(27+36t')-3 = 72+96t'-3 = 27+ 42+96t'
42+96t' = 36t'' とおくと、一次不定方程式になりますが、
42はgcd(96, 36)=12 の倍数ではないので、この式は整数解を持ちません。
よって、27+36t' ―F→ 27+36t'' になることはありません。
いずれの場合も、より小さい反例が得られたので、
最小反例cは存在しません。 拡張完全割数列に対して、無限項のものがないと分かりました。
よって、全ての項が正である、通常の完全割数列に限定しても、無限項のものはありません。
以上より、全ての3の倍数の奇数は、1に辿り着くことが言えました。 えっ
ちょい待ち
全ての6n-3が1を含む枝に属する事が証明できた?
コラッツ予想の証明完了じゃん >>608で、c=18t''+21 から y=3t''+3 への変換で
対応する割数列の変換が本当に B[1,-2] になってるかが怪しいような。 >>614
c=18t''+21 ーB[1,-2]→ y=3t''+3 を
先頭5個を手計算してみました。
21[0,6] → 3[1,4]
39[0,1,1,2,1,... → 6[1,-1,1,2,...
57[0,2,1,2,2,... → 9[1,0,1,2,...
75[0,1,2,8] → 12[1,-1,2,8]
93[0,3,1,5,4] → 15[1,1,1,5,4]
ひとまずうまくいっているようです。 c≡0 mod 9のときに不備がありそうです。
調査します。 0 や負の項を許しているのを失念していました。
ただそうすると、一つの数に対して複数の数列が対応することになります。
c=18t''+21 の割数列に変換 B[1,-2] を施すと、y=3t''+3 の拡張完全割数列の一つが得られますが、
それは y=3t''+3 の通常の割数列と同じとは限らず、通常の割数列が無限に長いとは言い切れない、
すなわち反例になっているとは言い切れないと思います。 せっかく解けない問題があるんだから、何かに使えないんでしょうか
数独のようなパズルを作る
乱数を作る
暗号システムを作る >>617
入力も拡張完全割数列にすればどうでしょう。
図を書いてみました。
https://github.com/righ1113/CollatzMod/blob/master/picture/divSeq_logic.jpg
反例を、
「ある3の倍数のコラッツ値を表す、拡張完全割数列の少なくとも一つが無限項である」
と定義します。これならどうでしょうか。 最小反例が 3 である可能性がありますね。
その場合、コラッツ値をより小さくすることはできず、矛盾は生じません。 そうですねぇ、だめですね……
ありがとうございました。 レベルというものを導入します。
6x+3のコラッツ値で、全ての項が正の完全割数列のみがあらわす
ものを、レベル0のコラッツ値とします。
レベル0のコラッツ値と、全ての項が正の完全割数列は、
1対1対応しています。
レベル0のコラッツ値を、0,負も認めたstar変換を1,2,3回施した
ものを、レベル1のコラッツ値とします。
レベル1のコラッツ値で、最小反例が無い事を証明します。
・レベル1のコラッツ値3が最小反例でない事
3から、star変換を逆に施していきます。
それぞれ、1,2,3回逆に施したところで、レベル0に戻るので、
1対1対応した割数列を割り当てます。
有限個の割数列が得られるので、1つ1つ有限項か計算すれば良いです。 プログラムを使って説明します。
コラッツ値をあらわす割数列を列挙する関数allDivSeqを考えます。
第一引数は、コラッツ値です。
第二引数は、star変換を施した回数です。
allDivSeq 3 1を例にとって説明します。
star変換を1回施して、コラッツ値が3になるものを考えて、
allDivSeq 3 1
= B[1,-2] ++ allDivSeq 21 0
, C[4,-4] ++ allDivSeq 15 0
, D[3,-2] ++ allDivSeq 6 0
, E[2,-4] ++ allDivSeq 45 0
と再帰的に表せます。
第二引数が0になった所で、そのコラッツ値があらわす、
全ての項が正の完全割数列を当てはめます。偶数は無視します。
allDivSeq 3 1
= B[1,-2] ++ [6]
, C[4,-4] ++ [1,1,1,5,4]
, D[3,-2] ++ Nothing
, E[2,-4] ++ [3,2,3,4]
と、有限項の割数列で列挙できました。 レベル1のコラッツ値3x+3に、最小反例が存在しない事を証明します。
3と9はallDivSeqを使って、
残りの数は、>>608-609を手直ししたものを使います。 3の倍数に0も含めることにします。
3も9もstar変換で0になって、小さくなるのでOKとします。
レベル1のコラッツ値3xに、最小反例が存在しない事を証明します。(後日)
0はallDivSeqを使って、
残りの数は、>>608-609を手直ししたものを使います。 見直しというか、証明の形式化にチャレンジしています。
Idrisというマニアックな言語を使っています。Coqみたいな事ができます。
型を合わせるのがめんど……いや、難しいですね。 場合分けが尽くせてないですが、Ver0.1をリリースします。
https://github.com/righ1113/collatzProof_DivSeq
最終的な定理はProofColDivSeqMain.idrにあって、以下です。
allDivSeqInfFalse : (n:Nat)
-> any unLimited (allDivSeq (n+n+n) 0) = False
これは、3の倍数の奇数の完全割数列が全て、有限項である(1に辿り着く)
事を示しています。 数学の60年来の難問を、「不老不死研究」の生物医学者がこうして解き明かした
https://wired.jp/2018/08/02/a-decades-old-math-problem/
押しても引いてもだめなら、まったく違う方面からのほうがいいのかもね >>637
はー、なるほど。分かったような、分からないような。 一つ注意点があります。
プログラムでの証明中に、postulate(無条件の仮定)を使っています。
なので、完全な形式化という訳ではないです。
postulateな命題については、紙の上で証明すれば良いと考えています。 なにげに結構なボリュームあるな
普通にすごいわ
内容的にただしいのか俺の実力じゃジャッジできないけど DIR EN GREYのアルバムを買った。
これを聴いて証明を頑張ろう。 紙の証明 第二部が作成完了しました。
良かったら見てみて下さい。
第2部 レベル0のallDivSeqは、全て有限項 (これが言えればコラッツ予想も真)
https://github.com/righ1113/collatzProof_DivSeq/wiki 正直、1000万円くらいの懸賞かかっててもいいと思うけどね そうですよね。100万でも「おおっ」ってなります。 懸賞かかってなくてもコラッツとけたら年収1000万の職につけないかなぁ? 証明は出来たのですか?
完全に素人質問で悪いのですが、証明の全容をここに載せたら盗まれる可能性があるのではないでしょうか?
arXivに上げるなどして正式に発表したほうがいいのでは…と思ってしまいます。 >>654
ありがとうございます。
証明はほぼ完成しています。
https://github.com/righ1113/collatzProof_DivSeq
arXivに投稿するには、endorser裏書人が必要なので、難しいかなと思っています。 >>655
そのページは情報が欠けていて論理を追うことができません。 / ̄`Y  ̄ヽ、
/ / / / l | | lヽヽ
/ / // ⌒ ⌒ヽ
| | |/ (●) (●)
(S|| | ⌒ ・ィ ヽ 芸能人が吹き替えに挑戦というのは
| || | ト-=-ァ ノ
| || | |-r 、/ /|
| || | \_`ニ'_/ |
(( ( つ ヽつ、
. 〉 i ))
(__ノ^(_)
/ ̄`Y  ̄ヽ、
/ / / / l | | lヽヽ
/ / // ⌒ ⌒ヽ
| | |/ (●) (●)
(S|| | ⌒ ・ィ ヽ 許せないという気持ちが分かる
| || | ト-=-ァ ノ
| || | |-r 、/ /|
| || | \_`ニ'_/ |
⊂/ ⊂ )
i ヽ
(( (_)^ヽ.__) )) 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) この証明の鍵は、star変換によってコラッツ列の無限性を維持しつつ元の整数を小さくできるとする主張にあります。
しかし変換の定義から そのようなことが常に可能とは思えない というのが私の直感です。
まず確認ですが、star変換によって割数列に負の項が出てくることを許しているわけではない ですよね?
各chapterを一読しましたが、『計算上は合う』というコメントもあり判然としません。
プログラムを読めば分かるのかもしれませんが素人なのでお許しを。
[chapter3より引用]
> 変換後のコラッツ値が、負数や分数になるものを禁止すれば、
> この変換は、3の倍数から3の倍数に写ります。
> これで得られる割数列を 「拡張完全割数列」 と呼ぶ事にします。
割数列の定義から負の項は存在できません。
たとえ最終計算が合っていたとしても、2を掛ける操作はコラッツ列の生成ルールにはありませんから、
負の項が出現するような変換は許されません。『拡張列』としてそれを 考えるだけ なら構いませんが、
拡張列から元の整数を復元する操作を統一的に行うことは許されないはずです。 >>658
詳細なコメントありがとうございます。
すぐには答えられないので、じっくり考えてみます。 例を挙げておきます。
[Chapter7より]
> コラッツ値がcである無限項の割数列を仮定して、コラッツ値が小さくなるようなstar変換を施します。
ここで筆者は、0(mod9)である36t+9なる整数に対しE[2,-4](y=x/12−3/4)を施すと変換後は3t<36t+9になると主張する。
t=1とすれば、36t+9の割数列は[3,2,3,4]であり、E[2,-4]をそのまま施すと[2,-1,2,3,4]となり負の項が現れる。
この第2項『-1』を『2を掛ける操作』と解釈すれば、[2,-1,2,3,4]が表す整数は確かに3tになる。
しかしコラッツのルールに『2を掛ける操作』は存在しないので、本問題でそのような解釈はできない(※)。
3tに対応する割数列はコラッツのルールで一意に決まる[1,4]であり[2,-1,2,3,4]ではない。
コラッツのルールに則れば、
『負の項を持つ割数列に対応する整数は存在しない』
としか言えない。
(※)
負の項を持ちうる拡張割数列を元の整数に対応づける解釈を行うことは
・2で割る、2を掛ける、3を掛けて1を足すという3つの操作を別のルールに則って行う。
・各操作後の値は整数とは限らない。
このような拡張されたコラッツ問題を考えることに相当する。
その拡張されたルールを前提とすれば、[1,4]と[2,-1,2,3,4]は共に3tに対応する。
言えるのはこれだけのように思える。 そもそもcoq使うなら全部coqにしなきゃ意味ないと思うが >>658,660
以下3つをおこなえば良いのではないかと考えています。
◆定義1 拡張コラッツ予想
6t+3(t≦0)を用意する。(ここからコラッツ操作すれば通常のコラッツ予想になる)
一度コラッツ操作を施したものをαとおく。
6t+3から1~3回star変換をおこなう。
そこから拡張コラッツ操作をおこなう。αに戻ったところで通常のコラッツ操作に切り替える。
これを拡張コラッツ予想と名付ける。
※拡張コラッツ操作
コラッツ値xに対し、(3x+1)/2^pを施す。pは割数列の初項(0や負も取りうる)。
◆定理1
あるコラッツ値(一度コラッツ操作したものをα)からstar変換したものを、
2回拡張コラッツ操作すると、αに戻る
◆定理2
拡張コラッツ予想が真 ⇒ コラッツ予想も真 ◆定理1
あるコラッツ値(一度コラッツ操作したものをα)からstar変換したものを、
2回拡張コラッツ操作すると、αに戻る
・1つのパターン
x=9t+3 [3, *,...]
を1回コラッツ操作すると、(3(9t+3)+1)/8 = (27t+10)/8 になります。
xに A[6,-4] y=(4/3)x-7 でstar変換すると
12t-3 [6, -1, *,...] になります。
拡張コラッツ操作1回目で (3(12t-3)+1)/2^6 = (9t-2)/2^4
拡張コラッツ操作2回目で (3((9t-2)/2^4)+1)2
= (27t+10)/8 になって二つは一致します。
残りはGitHubでやります。 ◆定理2
拡張コラッツ予想が真 ⇒ コラッツ予想も真
star変換したものから拡張コラッツ操作を繰り返すと、
定理1より、全ての6t+3から遷移するαと同じものが、
欠けることなく得られます。
よって、拡張コラッツ予想が真ならば、
後方を共有する、通常のコラッツ予想も真になります。 >>664-666
その方針でこの問題が簡単化されるとは思いませんが。
righ1113さんの腕の見せ所ですね。
がんばってください。 自然数xに対してコラッツ展開に似た数列collatz_array(x)を次のようなrubyプログラムで定義する。
def collatz_array(x)
if(x==1)
then
return []
elsif(x%2==0)
return [0]+col(x/2)
else
return [1]+col((x*3+1)/2)
end
end
collaz_array(x)をビット列とみなして2進数の整数に直したものをcollatz_number(x)とする。
collatz_numberはrubyプログラムで次のように定義される。
def collatz_number(x)
res=0;
x.each_with_index{|v,i|res+=v*(2**i)}
return res
end
3の倍数でない、かつx==collatz_number(x)となるような自然数xは存在するか? ちょっと言ってることがおかしいかもしれない。
ようするにコラッツ展開に対する不動点みたいなものはあるか?という話をしたいのだが 朝の6時にスレチェックかよwすげえw
まあ俺も人のこと言えないけどwお疲れ様です。 新たな不動点が見つかったら新たなループが見つかるみたいな方向に持っていけたらベストなんだけど。
まあまだぼんやりしたイメージがあるだけです。 うーん、collatz_arrayの停止条件がx==1だとあんまり意味のない議論になってしまうかもしれないorz x==collatz_number(x)をチェックすると
3*2^tは該当するみたい。そりゃそうか。
あと、「先頭nビットが一致する」だと意味ないかな? >>679
意味ないかどうかはまだわかりませんが、先頭nビットについては>>528のような割とはっきりした規則性があるようなので、
規則性の見えなくなる後ろのほうのビットのふるまいを何とかできないかという思いはあります。 あ、でもnを増やしていったらなんか出てくるんだろうか? ちなみに勢いで書いちゃったけど仮に不動点が見つかったとして、それをどう生かせばいいかまだ全然見えてませんw 不動点というキーワードでコラッツ展開をみたときに、
ちょうど3が不動点になっていたのでこれが1,4,2のループを表しているのでは?
という思い付きというか期待から書き込んでしまいました。 コラッツ展開は01の無限列なので2-進整数に対応させるのはどうだろう
整数は2-進整数に埋め込めるし、コラッツ展開は2-進整数に自然に拡張できる
以下、簡略表記として左を下位、繰り返しを()で括る、とすると
0=(0)…
-1=(1)…
はコラッツ展開が自身と一致する
1=1(0)… のコラッツ展開は (10)…
(10)…は×3で(11)… = -1 なので
(10)…のコラッツ展開は 1(0)… で元に戻る 見捨てられた過疎スレかと思ってたら
意外とそうでもないのか 2進整数とやらを標準ライブラリで持ってるプログラム言語はありますか? >>686
Mapleにありそうだけど
Mapleってフリーじゃないもんね 無限桁の2進数みたいなものだから、プログラムで扱うのは難しいのでは?
有限桁以降が繰り返しのものに限定すれば扱えるのかな
(10)…と-1/3、(100)…と-1/7、みたいに、
理論上は(分母の素因数に2を含まない)有理数に対応するはず とりあえず、2-進整数の厳密な定義ってどこかにあります?
四則演算とかも含めて。 ハスケルは遅延評価があるんでしたっけ?
ルビーにもあったかな? >>690
Haskellはデフォルトで遅延評価です。
Rubyも遅延評価がありそうですが、僕は詳しくないです。 2-進整数、使えそうなら使いたいですね
でも2-進整数にしちゃうと不動点のアイディアをどう扱えばいいかわからなくなるかなぁ? とりあえずwikipediaよりp進数(p-adic number)
https://ja.m.wikipedia.org/wiki/P%E9%80%B2%E6%95%B0
「定義」の最後にあるp進整数環でpが2のものを考えてるんですが、付値やら完備化や、専門的過ぎてたぶんわけわからんと思います
計算だけなら「略式の解説」のこの辺
> 整数側に無限桁加えたもの、例えば …1246328.125 のようなものが p 進数であると解釈できる。
> p 進数の中でも、小数点以下がない …1246328 のようなものは p 進整数と呼ばれるものに対応する。
> p 進数同士の足し算、引き算、掛け算は、p 進表記の有理数における通常のアルゴリズムを自然に無限桁に拡張することで得られ、割り算は掛け算の逆演算として定義される。 まともにやるとクソ難しそうなのでとりあえずコラッツ展開を分数で表現してみた
def collatz_rational(x)
l=x.length
res=0r
x.reverse.each_with_index{|v,i|res+=v*(1/2r)**(i+1)}
res+=((1/2r)**l)*1/3r
return res
end
def collatz_rational_array(x,l)
res=[]
(0...l).each{|i|
if(x>=1/2r)
then
x-=1/2r
res<<1
else
res<<0
end
x*=2r
}
return res.reverse
end
(1..1000).each{|x|
a=collatz_array(x)
l=a.length
r=collatz_rational(a)
b=collatz_rational_array(r,l)
if(a!=b)
then
print "#{x} #{r} #{a} #{b}\n"
end
} でも分数にしたところで不動点のアイディアとどう結び付けていいかわからぬw
まあもともと不動点はそれほど目があるアイディアじゃないかもだけど スタートは不動点だったはずだが脱線してしまったなw
うーん、どうしよう 不動点ではないですが、
x == collatz_number(collatz_array(y))
y == collatz_number(collatz_array(x))
のように、相互に参照しあっているものを考え中です。
ちゃんとしたものは後日upします。
https://i.imgur.com/7VUP2CA.jpg 2-進整数の計算についての補足
桁が繰り返しである2-進整数に限ると、
繰り返しが1で埋まれば-1であることを利用して
以下のように有理数との対応がわかります
(1)…=-1/(2^1-1)
(10)…=-1/(2^2-1)
(100)…=-1/(2^3-1)
途中から繰り返す場合についても、例えば
1(100)…=1+2(-1/7)=5/7
のようになります
そして、このようなものに限ると有理数としての加減乗除でまったく問題なかったりします
循環小数=有理数、みたいなもんですね 不動点ということは繰り返し処理をかけても変わらないということですが、
コラッツ展開に対してさらにそのコラッツ展開を求めることに何の意味があるのかが不明瞭なのが現状痛いですね。
そこに何らかの意味が見いだせればもう少し面白くなるのですが 特に何か得られた訳ではないですが、upします。
https://github.com/righ1113/CollatzMod/tree/master/190421
気がついた事は、(不動点じゃないですが)
例えばxが17~31の奇数の区間で、コラッツ展開先頭5ビットが1~31の奇数を、
コラッツ3x+1と3x-1で分けあうことです。 >>705
書いてから思ったのですが、
>>528と関連があるのかどうか、というところですかね。 ■ このスレッドは過去ログ倉庫に格納されています