Coq 中是否有任何策略可以将 bool 表达式转换为 Prop 表达式?
is there any tactic in Coq that can transform a bool expression to a Prop one?
例如,我在我的上下文中有这个假设:
Heq: (a =? b) &&
(c =? d) &&
(e =? f) = true
我想转换成这个:
Heq: (a = b) /\
(c = d) /\
(e = f)
我看过这个post
coq tactic for replacing bools with Prop
但使用这些策略对我来说并不是很简单,因为在我的上下文中表达式中没有 Is_true
。
编辑:
Heq
通过添加 = true
进行修改,因为我第一次从上下文中读取它时犯了一个错误。
我已经解决了:
apply Bool.andb_true_iff in Heq.
将 = true
添加到最后两个 bool 表达式并将第二个 &&
替换为 /\
.
然后我将 Heq
表达式分成两个 sub-expressions 通过:
destruct Heq as (HeqA & HeqB).
并对剩下的左边布尔值做同样的事情 sub-expression:
apply Bool.andb_true_iff in HeqA.
destruct HeqA as (HeqA & HeqC).
最后,我通过以下方式将 bool 相等性转换为 Prop 相等性:
apply beq_nat_true in HeqA.
apply beq_nat_true in HeqB.
apply beq_nat_true in HeqC.
例如,我在我的上下文中有这个假设:
Heq: (a =? b) &&
(c =? d) &&
(e =? f) = true
我想转换成这个:
Heq: (a = b) /\
(c = d) /\
(e = f)
我看过这个post
coq tactic for replacing bools with Prop
但使用这些策略对我来说并不是很简单,因为在我的上下文中表达式中没有 Is_true
。
编辑:
Heq
通过添加 = true
进行修改,因为我第一次从上下文中读取它时犯了一个错误。
我已经解决了:
apply Bool.andb_true_iff in Heq.
将 = true
添加到最后两个 bool 表达式并将第二个 &&
替换为 /\
.
然后我将 Heq
表达式分成两个 sub-expressions 通过:
destruct Heq as (HeqA & HeqB).
并对剩下的左边布尔值做同样的事情 sub-expression:
apply Bool.andb_true_iff in HeqA.
destruct HeqA as (HeqA & HeqC).
最后,我通过以下方式将 bool 相等性转换为 Prop 相等性:
apply beq_nat_true in HeqA.
apply beq_nat_true in HeqB.
apply beq_nat_true in HeqC.