¿Cuál es la diferencia entre las tácticas `destruct` y` case_eq` en Coq?

Entendídestruct ya que rompe una definición inductiva en sus constructores. Recientemente vicase_eq y no pude entender lo que hace de manera diferente?

1 subgoals
n : nat
k : nat
m : M.t nat
H : match M.find (elt:=nat) n m with
    | Some _ => true
    | None => false
    end = true
______________________________________(1/1)
cc n (M.add k k m) = true

En el contexto anterior, si destruyoM.find n m divide H en verdadero y falso mientras quecase_eq (M.find n m) deja H intacto y agrega una propuesta separadaM.find (elt:=nat) n m = Some v, que puedo reescribir para obtener el mismo efecto que destruct.

¿Puede alguien explicarme la diferencia entre las dos tácticas y cuándo se debe usar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta