Coq 如何将重写应用于条件的右侧而不拆分它?
我在想,如果我能以某种方式仅在右侧应用Coq 如何将重写应用于条件的右侧而不拆分它?,coq,Coq,我在想,如果我能以某种方式仅在右侧应用IHl,那么我就可以应用HL来解决这个问题,但我不知道如何解决 如果我在这里使用split,那么我将失去解决这个问题的能力,因为我必须在假设的分支中证明x=a,反之亦然。注意几点: 首先,你的证明太长了。再多想一想,特别是看看你是否在错误的地方做了太多的诱导或分裂 其次,这类重写有点难,但其中一些重写可以通过“Setoids”和iff实现。您可能对或\u iff\u compat\l引理感兴趣: A : Type x : A l, l' : l
IHl
,那么我就可以应用HL
来解决这个问题,但我不知道如何解决
如果我在这里使用split,那么我将失去解决这个问题的能力,因为我必须在假设的分支中证明x=a
,反之亦然。注意几点:
- 首先,你的证明太长了。再多想一想,特别是看看你是否在错误的地方做了太多的诱导或分裂
- 其次,这类重写有点难,但其中一些重写可以通过“Setoids”和iff实现。您可能对
或\u iff\u compat\l
引理感兴趣:
A : Type
x : A
l, l' : list A
a : A
HL : x = a \/ In a l
IHl : In a l -> In a (l ++ l')
============================
x = a \/ In a (l ++ l')
或\u iff\u compat\u l:forall A B C:Prop,B C->A\/B A\/C
- 实际上,有些库更喜欢使用布尔版本的
/\
和\/
来改进重写
- 最后,如果您销毁
HL
,您的目标将立即得到证明
有几个注意事项:
- 首先,你的证明太长了。再多想一想,特别是看看你是否在错误的地方做了太多的诱导或分裂
- 其次,这类重写有点难,但其中一些重写可以通过“Setoids”和iff实现。您可能对
或\u iff\u compat\l
引理感兴趣:
A : Type
x : A
l, l' : list A
a : A
HL : x = a \/ In a l
IHl : In a l -> In a (l ++ l')
============================
x = a \/ In a (l ++ l')
或\u iff\u compat\u l:forall A B C:Prop,B C->A\/B A\/C
- 实际上,有些库更喜欢使用布尔版本的
/\
和\/
来改进重写
- 最后,如果您销毁
HL
,您的目标将立即得到证明
or_iff_compat_l : forall A B C : Prop, B <-> C -> A \/ B <-> A \/ C