Sve*_*mir 5 theorem-proving idris
我想验证假设当然也是的Ring
实例。在 Abelian Group 之前这很容易,但在实例中发生了一些奇怪的事情:Data.Complex.Complex t
t
Ring
Ring
VerifiedRing t => VerifiedRing (Complex t) where
ringOpIsAssociative (l :+ li) (c :+ ci) (r :+ ri) =
?VerifiedRing_rhs_1
Run Code Online (Sandbox Code Playgroud)
现在 Idris 自己进行了一些扩展,并且该洞得到以下类型:
(l <.> (c <.> r <+> inverse (ci <.> ri)) <+> inverse (li <.> (c <.> ri <+> ci <.> r))) :+ (l <.> (c <.> ri <+> ci <.> r) <+> li <.> (c <.> r <+> inverse (ci <.> ri))) =
((l <.> c <+> inverse (li <.> ci)) <.> r <+> inverse ((l <.> ci <+> li <.> c) <.> ri)) :+ ((l <.> c <+> inverse (li <.> ci)) <.> ri <+> (l <.> ci <+> li <.> c) <.> r)
Run Code Online (Sandbox Code Playgroud)
我认为为了证明相等性我需要跳过一些括号。所以我从左边的第一个开始:
rewrite ringOpIsDistributiveL l (c <.> r) (inverse (ci <.> ri)) in
?VerifiedRing_rhs1
Run Code Online (Sandbox Code Playgroud)
伊德里斯对此回应称:
rewriting l <.> (c <.> r <+> inverse (ci <.> ri)) to l <.> (c <.> r) <+>
l <.>
inverse (ci <.>
ri) did not change type (l <.>
(c <.>
r <+>
inverse (ci <.>
ri)) <+>
inverse (li <.>
(c <.>
ri <+>
ci <.>
r)) ...
Run Code Online (Sandbox Code Playgroud)
请注意,后面的类型did not change the type
与之前建议的类型不同。我不明白为什么它会改变,以及为什么重写在它应该起作用的时候却不起作用。
归档时间: |
|
查看次数: |
190 次 |
最近记录: |