2021-01-29: minicheckダメじゃん
やったこと
minicheck
何というかダメだーという気持ちになっている。
そもそも今のやり方だと 型の関数として 種類の値しか生成されないから、どうしても生成できない関数があるのが問題だということにもっと早く気付きたかった。
種類あるのは明らかなんだからどうにかしなきゃいけないと思われる‥‥がどうしようもない気もする。
例えば、(Boolean => Boolean) => Boolean の関数に対して、現在の方法だと次の6種類しか生成されないけど、この型の関数は全部で16通りあるはず。
id |
not |
const(true) |
const(false) |
|
|---|---|---|---|---|
(true, id) |
true |
false |
true |
false |
(false, id) |
false |
true |
true |
false |
(true, not) |
false |
true |
false |
true |
(false, not) |
true |
false |
false |
true |
(true, const(true)) |
true |
true |
true |
true |
(false, const(true)) |
true |
true |
true |
true |
(true, const(false)) |
false |
false |
false |
false |
(false, const(false)) |
false |
false |
false |
false |
よって、f(id) && f(not) && f(const(true)) && !f(const(false)) が true になるような関数とかが生成できなかったりする。
知能が足りない。
一応、:=> の table メソッドを使って、いくつかの値を乱数生成器に反映させるようにすればこういうのにもある程度は対処できそうだけど、本質的な解決にはなっていない気がする。
というかそれでどうやって縮小するんだ? できるか?
とはいえこの問題を解決できたらかっこいい。
がんばっていきたい。