2026年6月16日 第2回
Pythonプログラム、 その出力の定義について、 自分は正しく動作しない=未定義と解釈しましたが、 等価であるためには、 P_1(I)とP_2(I)が未定義となるため、 実際にプログラムの等価性を確認するには、 異なる挙動を示す例外的な入力が存在しないことを確かめる必要があるため、 デバッグのような大変な作業だと感じました。
私がコメント内容を理解できていないかもしれませんが,
実際に確認をすることはないと思いますが,
そうなると思います.
久々にPythonに触れた。
引数名や関数名が直観的で、
些細なことではあるが、
可読性をたかめることは重要であると再認識した。
不可能なプログラム(他のプログラムを解析するプログラム)について、
調べた際に、
ライスの定理というものを知り、
今回の授業内容の理解が深まった。
また、
実際の開発現場で使われている静的解析ツールはどの程度までプログラムの振る舞いを予測できるのか気になった。
可能であれば、
各ソースファイルを、
webclassにアップロードしてほしい。
特に'maybeLoop.py'の文字数が正確に、
奇数が偶数かを判断するのが難しいです。
アップしても良いのですが,正確にカウントするのが目的ではないので...
今回の講義では、
プログラムを文字列として扱い、
そのプログラム自身を入力として与えることで起こる問題について学んだ。
最初は containsGAGA などの簡単なプログラムの説明だったので理解しやすかったが、
yesOnSelf や notYesOnSelf が出てきたあたりから少し難しく感じた。
特に、
あるプログラムが「yes」を返すかどうかを判定する万能なプログラムを仮定すると、
自己参照によって矛盾が生じるという流れは興味深かった。
notYesOnSelf に自分自身を入力したときに矛盾が発生する部分は理解できたものの、
それがなぜ「完全なバグ検出プログラムは存在しない」という結論につながるのかはまだ十分に理解できていない。
今回扱った例以外にも同じ考え方が適用できるのか気になった。
講義を通してコンピュータには何でも計算できるわけではなく、
理論的に解けない問題が存在し、
まだまだ発展の余地が大いにあることに驚いた。
今後は停止性問題や自己参照の考え方についてもう少し復習し、
自分の言葉で説明できるようになりたいと思った。
自分で考えたのであれば良いですが,
今日はまだ,ここまで進んでいないですね.
プログラムの実行時に必ず同じ結果を出すプログラムを決定性プログラムということや、 タイミングによって異なる結果を出すプログラムを非決定性プログラムということがわかりました。 また、 "yes"/"no"を返す判定プログラムやプログラムの等価性について理解できました。
よろしいと思います.
なぜチューリングマシンが要るのかの説明が分かりやすかったです。
また、
不可能なプログラムの部分は、
いきなり背理法に入らずに牛乳などのアリバイの例があって頭に入りやすかったです。
そうですか.それならば良かった.
理解してくれたようで良かったと思います.
今回の講義では、 Pythonプログラムを文字列として扱い、 ある入力に対して yes / no を返すプログラムについて考える流れが理解できました。
理解できましたか.よろしいと思います.
コンピュータには論理的に解決できない問題が存在する」という計算機科学の限界を、 背理法を用いて論理的に理解することにあると読み取れた。
そうですね.大切な部分ですね.
今回の講義では、 コンピュータプログラムで何が計算できるのかを理解した。 特に今回は、 yesかnoで答えを返せるものが一つとしてあることを知った。
一つとしてある?
今回の講義では、
Pythonプログラムの初歩から文字列の処理、
そして背理法を用いた論理的な証明まで、
幅広い内容を学びました。
特に、
テキストファイルから長い文字列を読み込んで、
特定の文字の並びが含まれているかを判定したり、
行数や一番長い単語を数えたりするプログラムは、
実際のデータ処理の仕組みがよく分かり非常に興味深かったです。
また、
文字コードの仕組みや、
無限ループなどの問題のあるプログラムの例、
そして後半に学んだ「絶対に作ることが不可能なプログラム」に関する背理法の解説など、
プログラミングに必要な論理的思考力を深く学べる大変有意義な授業でした。
有意義であったのであれば,良かったと思います.
プログラムの動作を具体的な例で確認していく内容で、 意外と細かいところまで考えないといけないと感じた。 背理法の説明はアリバイや素数など身近な例から入っていてわかりやすかった。 プログラムと数学的な証明がつながっているのが新鮮だった。
数学と繋がっていますね.意外でしたか?
本日の講義では、 Pythonを用いた文字列処理や、 プログラム自身をデータとして扱う考え方について学んだ。 特に、 yesOnStringやyesOnSelfの例を通して、 プログラムの動作を判定することの難しさや、 停止問題の考え方を理解することができた。 無限ループが発生する例は興味深く、 単純なプログラムでも実行が終了しない場合があることを学んだ。 まだ完全には理解できていない部分もあるため、 配布資料を見直して理解を深めたい。
自分で考えたのであれば良いですが,
今日はまだ,ここまで進んでいないですね.
本日の講義を聞いて面白いと思ったことはプログラムのコードであっても一種のテキストデータだとみなすことが出来るので入力文字列にソースコードを採用しても良いということです。 また数学的にチューリングマシンを用いなくても具体的なプログラミング言語で任意のコンピュータで正しく動作すればプログラムとして等価としてよいという性質が、 実際にチューリングマシンの理論を経由せずに実機で計算不能問題の観察を可能としているので便利だと感じました。
そうですね.何を考えなくては行けないのかを理解しやすいので, まずは実際に,計算不能な例を見ることができると思います. 次回お話しできるでしょう.
今回の講義では、
ちょうど大学1年生のプログラミングの授業で習ったようなASCIIコードや、
Pythonについての話が主で、
よく理解できた。
Pythonのメモリ管理はどのように管理されるのか疑問に感じた。
自分で調べてみてください.
今日の講義では、
判定プログラムとプログラムの等価性について学びました。
判定プログラムは、
入力に対して必ず“Yes”または“No”を返すプログラムであり、
ある入力を受理するか拒否するかを考えるものだと理解しました。
また、
二つのプログラムがすべての入力に対して同じ出力を返す場合、
それらは等価であるという定義も分かりました。
特に印象に残ったのは、
Pythonプログラムのような実際のプログラムを、
そのまま考えるのではなく、
ASCII文字列や2進文字列として表すことで、
数学的に扱えるようにする点です。
また、
Turing Machineという抽象的な計算モデルを使うことで、
プログラムの性質をより一般的に考えられることも理解できました。
よく理解できていると思います.
containsGAGAやmultiplyAllなどの関数は、 文字列を受け取って処理し文字列を返すという構造が統一されていて、 「判定プログラム」の概念につながる設計だと理解できた。 utils.pyのreadFile関数をrfという短い名前でエイリアスする工夫も実用的だと感じた。
そうですね.便利ですね.
今回の講義ではpythonの基本文法について再び復習することができた。 また、 講義前の戦争と数学の話など非常に興味深かったです。
そうですか.ちょっと余計な話をしすぎましたかね.
アリバイや素数は無限に存在するという例のおかげで、
背理法の考え方は理解しやすかったです。
判定プログラムがすべての入力に対して必ず停止し、
yesかnoを返すものという定義もよく分かりました。
maybeLoop.pyのように無限ループに陥るプログラムがこの条件を満たさない点も納得できました。
納得してくれたのは良かったと思います.
構文エラー、 ゼロ除算無限ループといった「問題のあるプログラム」の具体的なパターンと、 数学や日常の例を通じた背理法の基本的な論理の進め方について理解できました。 資料内でASCIIコード表が取り上げられていましたが、 プログラムが他のプログラムをテキストとして読み込んで解析する際、 文字コードの違いによって意図しない解析結果を生むようなケースは、 実際のシステム開発などでも起こり得る問題なのでしょうか。
ASCIIに限定しているのであれば,問題は起きないと思いますが, そうでない場合はちょっとややこしいですね.
今回の講義では不可能なプログラムの導入として背理法を学んだ。
授業全体を通して様々な話題に触れていただいたが、
その中でも特に印象に残ったのは、
背理法が数学の特別な技法ではなく、
日常的な推論と地続きであるという点だった。
アリバイの例で「A 氏が犯人だと仮定すると同一時刻に二か所に存在することになり矛盾する、
よって犯人ではない」という流れを聞いたとき、
自分も普段似たような考え方をしていることに気づかされ、
こんな方法もあったなと改めて論法として意識できた。
そうですね.実際,普段の生活で明示的でないかもしれませんが, 考えていますね.
今日の講義では、 pythonの定義について学ぶことができた。 pythonを使用したことはあったが、 細かい定義や文字列としての扱いを学ぶことができて良かった。 今日の内容を復習し、 次回以降の計算不可能問題について考えたいと思った。
ぜひ考えてください.