Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Jikka.Core.Convert.EqualitySolving #135

Merged
merged 9 commits into from
Aug 5, 2021

Conversation

hotman78
Copy link
Contributor

@hotman78 hotman78 commented Aug 3, 2021

close #126

特にList周りについて合ってるのか不安なのですが、一人で悩んでも埒が明かなそうなのでpull requestとして投げさせて頂きました。

@hotman78
Copy link
Contributor Author

hotman78 commented Aug 3, 2021

作成中にわからない点がいくつか出てきてしまったので質問させていただいてよろしいでしょうか
a==b

a-b==0
に変える変換は<=等でも成り立つ気がしますがこれは別のファイルでやるべきということですか?

単射の関数として
例えば
(a^b)-(c^b)==0 を a-c に変える変換等は行うべきですか?

@hotman78 hotman78 marked this pull request as draft August 3, 2021 12:05
@kmyk
Copy link
Collaborator

kmyk commented Aug 3, 2021

<=等でも成り立つ気がしますがこれは別のファイルでやるべきということですか?

同じファイルでも別ファイルでもどちらでも構いません。やりやすい方で大丈夫です

(a^b)-(c^b)==0 を a-c に変える変換等は行うべきですか?

単射性を使った変換はなし (あるいは簡単にできるところまで) で大丈夫です

(#126 のチェックリストはとりあえず思い付いたものを列挙してみただけなので、リストにないものでも、あった方がよさそうなら足しておいてくれるとうれしい。逆に、リストに書かれてても、なくてもよさそうなものは無視してしまってください)


examples/dp_z-kubaru.py の変換が壊れてしまってるみたいです。
$ stack run convert examples/dp_z-kubaru.py とか $ python3 scripts/integration_test.py -k dp_z-kubaru とかすると詳細が出てくるので確認してみてほしい。

Equal' t (Minus' (BitNot' a) (BitNot' b)) Lit0 -> Just $ Equal' t (Minus' a b) Lit0
Equal' t (Minus' (Fact' a) (Fact' b)) Lit0 -> Just $ Equal' t (Minus' a b) Lit0
-- unpack list equality
Equal' _ (Nil' _) _ -> Just LitFalse
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この行は間違えていそう。
nil == nil の場合は Equal' _ a b | a == b -> Just LitTrue があるので大丈夫なのですが、たとえば nil == (let xs = nil in xs) みたいな場合に False になってしまいます。

Copy link
Contributor Author

@hotman78 hotman78 Aug 4, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

examples/dp_z-kubaru.pyの変換エラーですが、Jikka.Core.Convert.EqualitySolvingより少し上流で起こってる気がしてきました
例えば
return (-n)*(n+1)

return -n+n*n
に変換されてます
もうちょっと調べてみます

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(-n)*(n+1)-n-n*n に変換するための rule は src/Jikka/Core/Convert/ArithmeticalExpr.hs にあって、その本体は src/Jikka/Core/Language/ArithmeticalExpr.hs にあります。その感じだとこいつらがバグってそう (すまん……)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます!
おそらく原因特定できました。

@kmyk
Copy link
Collaborator

kmyk commented Aug 5, 2021

@hotman78 まだ Draft になってるけど、バグなく動いてそうだし、ひとまずマージしてしまうのはどうだろう? まだやることがあったりなかったりするかもだけど、必要なら後から追加でやればよいので

@hotman78
Copy link
Contributor Author

hotman78 commented Aug 5, 2021

ありがとうございます!!
ちょうど単射のやつをどこまでやるか悩んでいた所なので、そうさせていだだきます!!

@hotman78 hotman78 marked this pull request as ready for review August 5, 2021 04:01
@kmyk kmyk merged commit b5b510d into kmyk-jikka:master Aug 5, 2021
@kmyk
Copy link
Collaborator

kmyk commented Aug 5, 2021

マージしました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

等式を解くことを試みる
2 participants