伊德里斯:证明复数乘法是有关联的

时间:2019-03-02 11:40:53

标签: idris theorem-proving

我想验证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)) ... 之后的类型与之前建议的类型不同。我不知所措,为什么要更改它,以及为什么改写在肯定应该进行的情况下不起作用。

0 个答案:

没有答案