如何使用带有匹配模式的定理

How to use a theorem with a match pattern

基本上,我有一个函数,以及关于这个函数的一些属性的定理。

该函数具有以下签名:

Fixpoint compute_solution (s : list nat) : (option list nat) := 
...=> None
...=> Some l

定理是:

Theorem solution_is_correct:
  forall (s : list nat), length s = 9 * 9 ->
       match compute_solution s with
         None => forall s1, length s1 = 9 *9  -> ~ nice_property s1
       | Some s1 => nice_property s1
       end.

现在,当我试图证明一个附加定理时,我遇到了以下情况:

s: list nat
Hs: length s = 9 * 9
prem: list nat
sol: compute_solution s = Some prem
...
================================
nice_property prem

如何利用solution_is_correct来证明目标?

感谢您的帮助。

这应该有效

pose proof (solution_is_correct s Hs) as Tmp.
rewrite sol in Tmp.

但我宁愿修改定理以使其更有用,例如

thm1 : forall s l, ... -> compute_solution s = Some l -> nice_property l
thm2 : forall s, ... -> compute_solution s = None -> ...