Existe alguma tática em Coq que pode transformar uma expressão bool em Prop?

Sep 30 2020

Por exemplo, tenho esta hipótese no meu contexto:

Heq: (a =? b) &&
     (c =? d) &&
     (e =? f) = true

que eu gostaria de transformar para isso:

Heq: (a = b) /\
     (c = d) /\
     (e = f)

Eu vi essa tática pós- coq para substituir bools por Prop, mas não foi muito fácil para mim usar essas táticas porque não há nenhuma Is_trueexpressão em meu contexto.

Editar:

Heqé modificado adicionando = trueuma vez que cometi um erro ao lê-lo no contexto pela primeira vez.

Respostas

1 DanJohnson Oct 02 2020 at 04:59

Eu resolvi isso:

apply Bool.andb_true_iff in Heq.

que adiciona = trueàs duas últimas expressões booleanas e substitui a segunda &&por /\.

Em seguida, divido a Heqexpressão em duas subexpressões por:

destruct Heq as (HeqA & HeqB).

e fez a mesma coisa na subexpressão bool esquerda restante:

apply Bool.andb_true_iff in HeqA. 
destruct HeqA as (HeqA & HeqC).

Finalmente, converti a igualdade bool em igualdade Prop por:

apply beq_nat_true in HeqA.
apply beq_nat_true in HeqB.
apply beq_nat_true in HeqC.