我已经定义了一个运算符,+-
(忽略可怕的名字),如下:
infixr 10 +-
(+-) : Fin (S n) -> Fin (S m) -> Fin (S (n + m))
(+-) {n} {m} FZ f' = rewrite plusCommutative n m in weakenN n f'
(+-) {n = S n} (FS f) f' = FS (f +- f')
目的是它的行为与+
上定义的完全一样Fin
,但结果的上限更紧 1。据我所知,它可以正常工作。
我遇到的问题是试图证明(FZ +- f) = f
任何f : Fin n
. 我不希望这通常是真的,因为通常情况下FZ +- f
比f
调用weakenN
. 但是,在FZ
具有类型的特定情况下Fin 1
,类型(和值)应该匹配。
有没有办法向 Idris 表明我只想在特定情况下断言相等,而不是所有可能的类型FZ
?还是我应该采取完全不同的方法?