我想验证Ring
的{{1}}实例,当然当然Data.Complex.Complex t
也是t
。直到Abelian Group都很容易,但是对于Ring
实例,发生了一些奇怪的事情:
Ring
现在Idris自己进行一些扩展,孔得到以下类型:
VerifiedRing t => VerifiedRing (Complex t) where
ringOpIsAssociative (l :+ li) (c :+ ci) (r :+ ri) =
?VerifiedRing_rhs_1
我认为为了证明平等,我需要跳过一些括号。所以我从左边的第一个开始:
(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)
伊德里斯对此回应:
rewrite ringOpIsDistributiveL l (c <.> r) (inverse (ci <.> ri)) in
?VerifiedRing_rhs1
请注意,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)) ...
之后的类型与之前建议的类型不同。我不知所措,为什么要更改它,以及为什么改写在肯定应该进行的情况下不起作用。