Coq中Hypothesis合取式无法拆分的报错原因及解决方案求助
报错原因
你的假设H最外层是带参数n的全称量词命题,合取结构位于前提0 <= INR n < 10的结论内部,并非H的最外层结构。直接执行destruct H时,Coq需要先为全称量词的变量n指定具体实例才能访问到内部的合取,它无法自动推断要传入的n值,因此触发该报错。
另外你要拆分的第二个条件完全不依赖n,因此不需要绑定到特定n即可提取。
可行解决方法
方法1:分步断言拆分
通过assert分别声明你需要的两个假设,再逐步证明提取:
(* 提取第一个条件H1 *) assert (H1: forall n : nat, 0 <= INR n < 10 -> My_first_condition n). intros n H_range. specialize (H n H_range). destruct H as [H1 _]. exact H1. (* 提取第二个条件H2,只需传入任意满足范围的n即可,这里用0举例 *) assert (H2: forall x : R, In x ls -> My_second_condition x). specialize (H 0 ltac:(lia)). (* 若未引入lia策略,手动补充0满足范围的证明即可 *) destruct H as [_ H2]. exact H2.
方法2:一行快速提取
直接使用合取投影函数proj1、proj2不需要新开证明目标,直接得到结果:
pose proof (fun n H_range => proj1 (H n H_range)) as H1. pose proof (proj2 (H 0 ltac:(lia))) as H2.
内容的提问来源于stack exchange,提问作者Musher Soccoli
相关产品推荐
相关产品推荐

