日記 2021/03/22

今日はほぼなんもやってない。

朝ちゃんと起きられたのはいいが、数学をほんの少し(自然数の掛け算に関する命題の証明やって、帰納定理の拡張

 \forall S (\forall a \in S; \forall f:N \times S \rightarrow N; \\\ \exists ! g : N \rightarrow S; ( g(0) = a \land \forall n \in N; g(n') = f(n, g(n)) ) )

 の証明で詰まってしまった(参考書にしている「数学の基礎」島内 に書いてある証明は最初に帰納的に関数を定義して、「これは関数だ」と言い切っているが、その証明には疑問がある)。

それでパソコンに逃げたら一日が終わった。

一応述語論理の形式モデルをC++で組もうとしたがこれも詰まった(項のクラス(class Term)から名前クラス(class Name)、変項クラス(class Variable)、引数を適用させた演算子クラス(class AppliedOperator)を派生させて仮想関数として項クラスに自由変項の集合を返す関数と、束縛変項を返す関数を実装しようとして、返り値をstd::unorderd_set<Variable>にしたら当然のごとく失敗した。

まず、Variableはユーザ定義クラスだからハッシュの関数オブジェクトを用意する必要がある。これは別に問題ないが、問題は基底クラスが派生クラスを含む型の戻り値の関数を仮想関数として宣言していることによる。

どうにか回避できないか試したが、そもそも構造に無理があるっぽいので他の方法を考える必要がある。

ちなみに、std::unordered_set<std::shared_ptr<Variable>>にするとコンパイルはできるが重複(ポインタの重複はしないが、ポインタの指す値の重複は起きる)するのでだめ。

形式さえできれば自然演繹でもシーケントでもして証明の妥当性判断ができそうで面白いはずなのでどうにかしたい。

 

また、証明の妥当性判断はそれはそれで面白そうだが、数学的対象をごちゃごちゃするのはそれだけだと不十分な気がしていて(例えば群の計算とかやる)、有限の場合は普通に実装できそうだけど無限の集合の扱いがどうすべきか。考えることはたくさんある(コンテナみたいに実装するんじゃなくて、対象と対象の関係を実装すればよさそう?)。

日記 2021/03/21

今日は前日から徹夜してたんですが、眠くなって09:00~15:30の間寝た。

朝は置換をC++でごちゃごちゃするやつで、置換の符号sgnと、任意の置換を互換の積に分解する機能を実装した。

https://wandbox.org/permlink/KcjUrHGlwXJqzCym

午後はコードがクソ汚いが命題論理のモデルを実装した。

https://wandbox.org/permlink/pgXlYQJQD7tLt2Q4

 

他に何もやってないのがまずい。ARCにも参加していない。

 

あと早めに寝たい。

日記 2021/03/20

今日は17時に起きたのがよくなさすぎた。

そのままよるご飯食べて風呂入って、ABC195に参加した。

A, B, C, Eが解けた。このコンテストで緑になった。

Dが解けなかったのはカス。反省ポイント。

FはFFTらしいので、要勉強。

 

あと、数学の勉強が進んでない。