kmyk-jikka / Jikka

an automated solver for problems of competitive programming
https://kmyk-jikka.github.io/Jikka/playground
Apache License 2.0
152 stars 11 forks source link

既存の古い rewrite rules を新形式で書き直す #158

Closed kmyk closed 2 years ago

kmyk commented 2 years ago

古い書き方だと rewrite rule は構文木を手動で丁寧に組み換えて書いていたのですが、#133 でもっと簡単に書けるようになりました。

旧:

simpleRewriteRule $ \case
  Map' t1 t2 f (Reversed' _ xs) -> return' $ Reversed' t2 (Map' t1 t2 f xs)
  _ -> Nothing

新:

[r| "map/reversed" forall f xs. map f (reversed xs) = reversed (map f xs) |]

古い書き方だと (Jikka の本体の) コンパイル時にその rewrite rule が正しいか検査されなくてバグりがちなのですが、新しい書き方だとコンパイル時に型検査まで走るので安全でバグりにくいです。 なので、できるものはすべて新しい書き方で書き直したい。