coq tactic - How to introduce a new existential condition from a witness in Coq? -


my question relates how construct exist term in set of conditions/hypotheses.

i have following intermediate proof state:

x : type p : x -> prop h : (exists x : x, p x -> false) -> false x : x h0 : p x -> false ______________________________________(1/1) p x 

in mind, know because of h0, x witness (exists x : x, p x -> false), , want introduce name:

w: (exists x : x, p x -> false) 

based on above reasoning , use apply h in w generate false in hypothesis, , inversion false.

but don't know tactic/syntax use introduce witness w above. best can reach far check (ex_intro _ (fun x => p x -> false) x h0)). gives false.

can explain how introduce existential condition, or alternative way finish proof?

thanks.

p.s. have whole theorem prove is:

theorem not_exists_dist :   excluded_middle ->   forall (x:type) (p : x -> prop),     ~ (exists x, ~ p x) -> (forall x, p x). proof.   unfold excluded_middle. unfold not.    intros exm x p h x.    destruct (exm (p x)).     apply h0.     check (h (ex_intro _ (fun x => p x -> false)  x h0)). 

here, since know how construct term of type false, can add context using pose proof. gives:

pose proof (h (ex_intro (fun x => p x -> false)  x h0)) 

you can directly destruct term, solves goal.

destruct (h (ex_intro (fun x => p x -> false)  x h0)) 

another way finish proof prove false. can change goal false tactics exfalso or contradiction. approach, can use hypotheses of form _ -> false otherwise difficult manipulate. proof, can write:

exfalso. apply h. (* or directly, contradiction h *) exists x. assumption. 

Comments

Popular posts from this blog

javascript - Chart.js (Radar Chart) different scaleLineColor for each scaleLine -

apache - Error with PHP mail(): Multiple or malformed newlines found in additional_header -

java - Android – MapFragment overlay button shadow, just like MyLocation button -