val:nat l:list nat

val=f l->

val>0.

I am confuse here ,i should apply destruct command on l or val ?

If i apply induction on l then f[] will be 0.

val=0 val>0 is contradiction.

In second case

val= f[n::t]

val>0.

On the other hand val=0 & val>0 also gives same result.

In this case what would be better option to apply destruct command on l or val which leads contradiction.

& f[n::t]

Posting the coq code itself could make the question clearer.

What Julin said, and depending on what f is, the goal might be unprovable or false

Also, a mistake: if you apply induction on l, you'll get val = 0 -> val > 0 which isn't a contradiction (that lets you close the goal), just an unprovable goal.

In fact, if f [] = 0, then l := [] is a case where your goal is false.

Last updated: Oct 04 2023 at 20:01 UTC