ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

やはり数学力がない

群・環・体ですが、三月はまったく勉強をせず、四月に入っても前半は勉強をせず数日前になってようやく再開したんですが、しばらく勉強しないと理解力が衰えるもんですね。

久しぶりに本を開いたら意味不明でビビりました。
まあ、2回目以降はそれなりに理解力も復活してきましたけどね。


前回記事「将来の夢について書く」で数学科の大学教授になりたいと書きましたが、このごろ自分の数学力のなさを再認識させられて、やっぱり無理じゃねえかなと思ってしまいますね~。

いや、何度も申しますが理論を読んで理解するのは大丈夫なんです。
しかしその理論に関する証明問題などの問題を出されると、もう出来ないと。

大学で数学科に入ったら、講義で教えている理論をちゃんと理解しているかどうかを確認するために証明問題などを出題するということがよくあると思うんですが、そういうのは多分、私にはなかなか出来ないんじゃないかと思いますね。

問題が解けなければ、「こいつは理論を理解していない」と判断されかねないですが、決して理論を理解していないわけではないんですけどね。
ただ私の脳に入り込んで理論を理解しているかどうかをチェックするなんて無理なんで、問題を出すという方法でチェックするしかない。

なかなか、つらいですね…。


昔も書いたかもしれないですが、理論をどうやって重ねていくかの道筋を立てることが出来ないわけです。
スタートから一気にゴールに行けるような証明を考えるんですが、そんなのあるわけないと。

あと、普通の人って紙などにちょっとずつ思考している内容を記録していくみたいに、紙を使って証明するということも多いと思いますが、それが私には無理なんですよね。

頭の中のイメージをどのように紙に記せばいいのか戸惑いますし、戸惑っている間に考えていたことを忘れてしまうのです。
さらに、もし紙に記せたとしても、そこから元のイメージを復元するのに時間がかかる。

だから、それでスタートからゴールに一気に行かざるをえないというのもありますね。


証明を組み立てる力って身に付くんですかね。

私にとっては論理の世界というのはすごくぼんやりしていて、なんの目印もない広大な砂漠を歩いているようなもので、どこを歩けばいいのやら分からないですが、

数学の教授や数学が得意な人は、正しい歩き方を知っているのでしょうか。

続きを読む

tag: 数学 プログラミング 勉強 能力 幾何学 目標 大学

F#の基礎勉強まとめ (後編)

記事「F#の基礎勉強まとめ (前編)」の続きです。
前編を読んでいない場合は、F#の知識がない限り前編から読むことをお奨めします。

今回は、かなり長くなることが予想されますね。


最初に、前編で書いたことの訂正というか、多相型についての発見があったので記しておきます。

まず、多相型の名前は'aのようにシングルクォーテーションとアルファベットだと説明しましたが、実際はシングルクォーテーションと任意の名前で多相型を表せるようです。
処理系が多相型であると推論したときは自動的にアルファベット一文字が使われるというだけのことで、自分で書く多相型の名前はなんでもありです。


そして、関数の引数が多相型になる場合があると説明しましたが、引数の型が多相型であると明示できるようです。
そのためには後述するパターンの型注釈を使用して、型名を多相型にします。

let func (x:'a) = x

しかし、多相型の引数であると明示したとしても、たとえば

let func2 (x:'a) = x + 1

と書いたらxはint型しかありえません。
このように型を限定するようなコードを書いたら多相型がもっと狭い型へと“制約”されてしまうので、なんでもかんでも多相型に出来るわけではありません。

さらに言ってしまえば変数でも型注釈で多相型に出来てしまうのですが、値を入れた段階で多相型がその型へ“制約”されてしまうので、多相型の変数というのも宣言できません。


また、同じスコープ内で複数回、同じ名前の多相型を使う場合、それら全てが同一の型であるという前提のもとで上手な型推論が行われます。

たとえば
let func3 (x:'a) = let val:'a = x in val
これはvalの型はxと同じで、xは多相型ですからxに与えた引数によってvalの型や戻り値の型が決まるようなジェネリックな関数です。

let func4 (x:'a) = let val:'a = 3 in val
これはvalの宣言によって'aがint型に“制約”されるので、この関数に与える引数はint型でなければなりません。


この話題は依然として謎深く、個人的にさらなる研究が必要そうです。

続きを読む

tag: プログラミング F# 関数型 勉強まとめ 例外 リスト ジェネリックス パターン

近況報告というか話題のちゃんぽん

ただいま、記事「F#の基礎勉強まとめ (前編)」の後編を執筆中であります。
途中つなぎの記事を書くほど大規模なブログ記事を書くのは久しぶりですね。

現在、リスト、配列、タプル、レコードまで書き終わったのですが、判別共用体、パターンマッチ、例外を書いて手短に終わろうと思います。

ただし、パターンマッチが本当に内容的に濃い!
大変ですね。

さて、上記リンクの記事でも書いてあるように、F#の文法は解説しても、実際にプログラム書いたことがほぼ無いんですよね~。

というわけで、ちょっと前ですが、なにかプログラムを書こうということで、なんともベタなじゃんけんのプログラムを書きました。

せっかくなのでYahoo!ボックスに上げておきましたから、ご覧ください。
なにせF#の経験が浅いので、変な箇所があるかもしれませんが、ぷぷぷ~と笑ってないでコメントにてご指摘下さいませ。

Janken.txt (Yahoo!ボックス)
http://yahoo.jp/box/_9_RYk


このプログラムを書きながら思ったのですが、関数に引数として別の関数の戻り値を渡してもいいし、
関数に直接、別の関数を渡しちゃって、むこうの関数で引数を与えて戻り値を作ってもいい、というこの関数と値の区別のルーズさは特徴的ですね。

今回の場合は逆にそれがややこしくなって、変なプログラムになってしまったかもしれませんが…。

続きを読む

tag: プログラミング F# 数学 証明 論理学 勉強 群環体 結合法則 Nexus iPad

F#の基礎勉強まとめ (前編)

ついにやってまいりました。
今までF#の勉強をしてきたわけですが、勉強に使っているサイトで基礎編とされている部分を読んでいまして、とうとう読み終わったので内容をご紹介したいと思います。

学んだ文法を使って実際にプログラムを書けるかというと、まだちゃんとしたプログラムを書いたことはないし、正直、書ける気がしないんですけどね…。
記事「2017年 新年のご感想」でも書きましたが、文法を学ぶことと実際にプログラムを書くスキルを身につけることは別物なんだと思います。

それも含めて自然言語と人工言語という違いはあれど、新しいプログラミング言語を学ぶことは英語などの外国語を学ぶことと似ていると、今回F#の勉強をして思いましたね。

新しい言語機能を覚えれば新しい表現が可能なこと、それは他の言語機能で代用しても近い表現をすることは出来るのですが、新しい言語機能を使うほうが便利です。


というわけで、実践的なプログラムの解説をすることはスキル上の問題で出来ませんが、文法の解説をしていきます。

なお、めちゃくちゃ長くなることが予想されたので前編と後編に分けることにしました。

続きを読む

tag: プログラミング F# 関数型 関数 勉強まとめ

コンピュータは数学をできるか

あのアインシュタインは「本で調べればわかるものを暗記する必要はない」と言っていたそうです。

たしかに暗記というのは、まあ人間のすごいところで現在置かれている状況と記憶を照らし合わせて最適な知識を引き出す、みたいな人間の検索能力も合わせて考えれば価値のある行為だと思うんですが、

ただ覚えるだけという暗記自体の価値はあんまり…ないかなという印象を持ちますね。
それは、メモ帳などのツールを使えばいいじゃん、という話で済むからです。


一方で、物事を考えるという行為はなかなかツールで代替するということができませんでした。

たとえば私の好きな数学も論理的思考をするというのが基本ですので、これは機械にはこなせない仕事だということで数学者たちは誇りをもって数学をやっていたと思います。

まあ時にそれは、以前もブログに書いたかもしれませんが、記憶力、知識力メインでやってる学問に従事する人を見下すというか、
「覚えてないことは本とかネットで調べればいいじゃん。まあ数学は俺らにしかできないけどねー君たちは本やネットで代用できる能力身に付けて嬉しいの?」(私の若干の悪意によって誇張されてしまったセリフですが…)
と思ってる側面があるんですけどね。まあそれはいいとして。


しかしながら、この頃はコンピュータを使用してAI(人工知能)のプログラムを走らせることによって、コンピュータに物事を考えさせるということが可能になってきました。

たとえば将棋なんかもコンピュータがだいぶ強くなってきましたよね。

そして機械にはできない学問の代表格であった数学でさえも、まだ遠い未来の話ではあると思うんですが、思うにオワコン化が始まっているというか、コンピュータにその仕事を奪われる時代が到来するのではないかと感じました。

私はAIに詳しくないので、細かいことはよくわからないのですが、コンピュータに定理を証明させることが可能です。

たとえばCoqとかいうやつを使えば証明させられるんじゃないですかねぇ。
(意識低い系発言。Coqもやってみるべきだろうか…)

実は数理論理学によって論理の仕組みをかなり機械的に考察できるようになったことで、数学みたいな論理を軸にした学問はコンピュータによる代替の恰好の餌食になっている、と思います。


ただ、コンピュータに難しそうなのは数学の中で得られた知見を現実世界の何に応用できるか考えることや、逆にそもそも現実世界に応用することを目的にして数学の研究をすることですね。

現実世界も論理で割り切れないということは決して無いと思うんですが、なんにせよ複雑ですから、数学の中だけでゲームみたいにやるほうがよほど簡単だと思いますね。

あとプログラミングも、計算機科学の枠組みだけでやるならコンピュータにも簡単になる時代が来ると思うんですが、人間にわかりやすいシステムを作るとなると機械には理解できないことが多くて難しいのではないでしょうか。


やはり人間の気持ちを理解するというのはコンピュータには難しいでしょうね。
ですから、数学がコンピュータに仕事を奪われてもなお、カウンセラーみたいな職業は人間が担当することになると思います。

心理学も統計ゲーみたいなところがあるようですので、一部をコンピュータで代替するというのも不可能ではないと思いますけどね。

というわけで、まともな記事を書くにはあまりにも知識がなさすぎる状態でこんな記事を書いて、やっぱりまともな記事を書くことはできませんでした。


しかし、私のようにプログラミングだとか数学をやってる人も機械に仕事を奪われると思うと、安心できませんよね~。

まあ遠い未来だとは思うので、少なくとも我々が死ぬまでこういう職業が人間にしかこなせない高貴な職業であれば嬉しいんですけどね。

tag: コンピュータ 人工知能 論理学 プログラミング 数学 証明 暗記 クソ記事

2017年 新年のご感想

あけましておめでとうございます!!!!!!


新年のご感想を記事にします!!
天皇陛下かよ!!

昨年末の記事でも同じネタを書いて使いまわしですが、時事ネタを今年は記事タイトルに使ってみました。

新年の記事は1月3日までに書きたいと姉妹ブログ「サイバー少年のつまらない事ですが」に書きましたが、ほんのちょっと遅れてしまいましたね。

まあこの記事を書き始めた時刻はギリギリ3日なので、セーフでしょう。


新年、2017年が始まりましたね~。
あらためまして、あけましておめでとうございます。

去年を振り返るというのは昨年末の記事でやりましたし、近況報告というか最近に興味のある物事を書くというのも、昨年12月の記事「何番煎じだ!?近況報告」でやってしまったので、今回書くことがないんですよね。

記事にするネタのなさから近況報告を記事にしてしまいましたが、頑張って他のネタでつなぐべきだったな~。


こうなってしまうと新年の抱負を書いてネタにするかとも思うのですが、去年と同じように特に抱負を設定しないというスタンスを踏襲したいんですけどね。
(記事「2016年 新年のご挨拶&去年の抱負大懺悔式典」を参照)

まあ、軽い目標程度は書きますか。

続きを読む

tag: 新年 目標 数学 F# 論理学 自然演繹 プログラミング コンピュータ 勉強 モチベーション

気がつけば年の暮れ 2016

こんばんは。真夜中ですね~。
生活リズムがぐちゃぐちゃですね~。
よろしいことではない…。

今年も終わりますね~。
今年は本当に早かったですね。

最近、なんとも年寄りじみた発言ですが、目まぐるしく時が過ぎていくので今年が西暦何年とかすぐに答えられるかと問われますと、危うくなってきました。

西暦はまだいいですが、和暦なんてもう出ないですね。
その西暦優位の感覚はちょっと若いのかな。
そうそう、あと、自分の年齢も同じように、すぐに出ないですよね。


当記事の本題に入る前にざっと年末の近況報告をしますが、前回記事「何番煎じだ!?近況報告」で書いた群・環・体のモチベーションが上がらないというのが、なんとまだ続いております。

さすがにヤバいですね…。
まあ上記記事でも書いた(さらに前の記事を引用した)のですが、ダラダラが続いてヤバいなと思い始めるのが、次の勉強を頑張る時期へと突入する原動力になるんですけどね。


一方でF#は、上記記事で書いたとおり勉強の頻度が少ないことを無視すれば順調…かと思われるのですが、姉妹ブログにも書きましたが最近なんか難しくなってきました。

次は判別共用体というのを勉強するんですが以前に内容をざっと見てみたら、今までで一番、難しそうでしたので理解できるかどうか不安ですね。

ただまあ、もし順調に事が運べば本年末に勉強したことまとめを書いて、来年に新年の挨拶記事なんかを書いて、来年の通常の記事の一発目はF#の勉強内容をまとめる記事になるんじゃないですかねぇ(他人事)。

続きを読む

tag: 数学 プログラミング 論理学 F# 群環体 勉強 パソコン 新年 目標

数学の学問としての位置づけとは?? ~ プログラミングも ~

数学をやらぬ者に数学が語れるか。
こんなメタな考察をする前に数学の記事を書けと言われるかもしれませんが、こちらのほうが書くのが楽なのであえて数学という学問自体への考察を行ってみます。

こういう考察を行うのは哲学の分野でわりと行われているのかなというイメージですね。
科学哲学というのかな。

まあ私はそんな科学哲学ガチ勢ではないので、テキトーに思ったことを綴るだけです。


数学とはどういう学問なのでしょうか。

学校の数学だけやってると、ひたすら計算する学問なのかなという印象を持ってしまいますが、
たしかに計算するという側面もあるけれど、そのバックボーンには理論だとか概念を扱う側面がなければならないわけで、後者の側面を“数学”と呼ぶのが良いんじゃないかと私は思います。

つまり、数学というのは理論だとか概念を扱う学問だということです。


そして、どのような“理論だとか概念”を扱うのかという問題に対して、私のやってる数学の分野に起因する考えかもしれませんが、

何らかの数量の間の関係を扱うだけではなく、はたまた図形についての性質を扱うだけではなく、実は何でも扱えてしまう超万能な学問が数学なのではないかと思います。

それはどういうことかというと、物理学は現実世界の形而下の物事を扱いますし、たいていの学問には扱う領域があって、それはこの世の森羅万象と比べてみれば大変狭い領域なわけですが、

数学というのは“人間の思考”というものが扱う領域なんだろうと思うのです。

人間はあらゆる学問において、この世の物事を見て、思考するという工程があるわけで、思考した結果のアウトプットを学問の内容といいますか理論にするわけですから、思考というものを制する数学は最強ですね。


ただし思考を扱うというのは、色々なアプローチがあると思うのです。

たとえば私は言語学について全く知らないので的はずれなことを言っていたら恐縮ですが、人間は言語を使って物事を思考するので、その言語というものを扱う言語学も数学と並んで人間の思考を扱う学問でしょう。

むしろ、数学は数学という言語を使って物事を考察していると考えることもできますね。
それならば真に最強な学問は言語学ということになりますが、なにせ言語学について知らないので、そう考えるのはやめておきましょう。


数学は思考を扱うアプローチとして主に集合や写像などを使います。
これらは、概念や、イメージの手段を抽象化した道具であると言えると思います。

他にも数学といえばそりゃ数値というのを使いますが、これも数量という概念を数値というものに落とし込んでいるわけですね。
ときにそれは数というのは集合なんだという話に昇華しますが、まあ数が集合であっても数であっても抽象的な道具であることには変わりないのでいいでしょう。

ようするに、思考についての物事をある別のものに対応付けたのが数学ですね。
あーでも、それだとやっぱり数学は言語だということになるなあ。

まあ言語学が(完璧に妄想ですが)物事の表し方に主眼をおいているのに対して、数学は表された物事と物事の間の関係に主眼をおいている気がします。


あとさらに詳細には、表された物事を意味も含めて扱う意味論というのと、単純に記号としてのみ扱う構文論という二つのアプローチが、数学にも言語学にも存在しますね。

ただ数学においては意味論がベースになってくると思います。
それは具体的な思考対象があっての数学なわけですから、意味が存在してくるわけですね。

構文論っていうのは数学においては、単なる思考を単純化するツールみたいなものかなと、素人ながらに思います。

続きを読む

tag: 数学 プログラミング 形而 哲学 学問 言語学 理系 考察

F#の勉強を始めた感想

最近、数学が好きなわけですが関数型言語は数学に近いようなので、ずっと新しいプログラミング言語を覚えるのは新年の抱負とかいうやつで目標にしていたわけですし、
関数型言語を覚えよう!と思いまして、.NET系列ということで手の届きやすいF#の勉強を、ぼちぼちと始めました。

というわけでF#の記事をいくらか書くかもしれないので「F#」カテゴリを作成。


そういえば昔、当ブログも、Microsoft MVP for F#を受賞されていて恐らく日本のF#業界の第一人者であろう“いげ太”さんからコメントもらったことありましたね。
(記事「Twitter上の有名人に見られている…!?」を参照)

当時はF#なんて興味ありませんでしたが、あの時に色々聞いておけばよかったな~と思います。

SwiftとかはAppleがメインで推しているので情報も多いのかと思いますが、Microsoftがメインに位置づけているのはC#であって、F#って少しマイナーなので日本語の情報が少ないんですよね。

スペシャリストの“いげ太”さんなら何でも知っていたであろうと…。


さて、F#って今は開発環境がVisual Studioに標準でインストールされていたりして、わりと楽に始められます。

私はコンパイラでやってますが、F#の解説サイトはコンパイラが標準搭載される前から存在していたからか、一行ずつ実行する対話型のインタプリタを使っての解説となっているんですよ。

だから、文の終わりのセミコロンとか、コンパイラとは微妙に書き方が違う部分があるんじゃないかな。
だから、そういう些細な違いが私のような初学者にはキツいですよね~。


私がF#を勉強していて現状、一番わからないのは文法機能じゃなくて、
ここはセミコロン1つでいいのに、ここは2ついるとか、でもここで2つ書いたらエラーになるとか、セミコロン要らない場所もあるとか。
letで宣言したあとセミコロンを書かないといけなかったりinを書かないといけなかったりとか、

どう表現するべきかよくわかりませんけども、文の構成に苦戦していますね。

続きを読む

tag: プログラミング 数学 F# 関数型 MicrosoftMVP 勉強 再帰 カリー化

近況報告&雑筆

ブログのネタがない!ということで、近況をご報告いたしたいと思います。

しかし、最近はネタが本当に無いですね~。
ちょうどこの記事みたいに意義のないクソ記事を量産するしかないのですが…。

その背景にはモチベーションの低下がありますね。
あんまり知的な活動をしないから、特別書くこともないわけですね。


一応、最近は数学をぼちぼちやってるつもりではあるのですが、まあそこまで本腰入れてないですけども。

論理学の勉強がまだ少し、テキストとしてはシークエント計算の章が残ってはいるんですが、
なんか論理学の勉強終わったよね感が出てしまっていて、もっと他の数学をやろうかなと思ったりしています。


最近は抽象代数学というんですか、いわゆる群・環・体に少し興味があります。

なんか抽象的な方面が好きなのかもしれないですね。

最近は情報系の学問から浮気して数学に興じているわけですけども、
なんかやってる数学が比較的、情報系に近い感じがするものばっかりなんですよね。

数学っていうと連続性とか線形性?というのかよくわかりませんけども、そういう性質をもつ分野がこれぞ数学って感じがしないですかね。


結局数学なんて数の学問なんですかね。
集合だとか数じゃないものは、良くも悪くも“数の学問”の後ろでそれを支えているだけという。

私は集合とか数じゃないものが好きなわけですが、それがどちらかといえば情報系に近い分野ということです。

例を挙げるとしたら、論理学とかグラフ理論とか圏論?ですか。

結局のところプログラミングから入門した私の脳みそは情報系なのかもしれません。

続きを読む

tag: 雑記 近況報告 数学 情報学 プログラミング 勉強 ブログ 将来 パソコン

次のページ

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。