Coq Ltac:在每个目标中做些不同的事情
我已经有了一个证明脚本,我正在探索多个案例,目前进展相当缓慢,因为我有很多解决目标的策略,我正在每个案例中尝试每一个 我知道我需要在某些情况下运用某些策略,但我不确定如何做到这一点 以下是我现在拥有的:Coq Ltac:在每个目标中做些不同的事情,coq,dependent-type,theorem-proving,coq-tactic,ltac,Coq,Dependent Type,Theorem Proving,Coq Tactic,Ltac,我已经有了一个证明脚本,我正在探索多个案例,目前进展相当缓慢,因为我有很多解决目标的策略,我正在每个案例中尝试每一个 我知道我需要在某些情况下运用某些策略,但我不确定如何做到这一点 以下是我现在拥有的: induction e; intros; pose (bool_dec (is_v_of_expr e1)) as ve1; destruct ve1; [> thing1 | thing 2]. 这导致了错误错误的进球数(预计26个战术,得到2个) 对于归纳法生
induction e;
intros;
pose (bool_dec (is_v_of_expr e1)) as ve1; destruct ve1;
[> thing1 | thing 2].
这导致了错误错误的进球数(预计26个战术,得到2个)
对于归纳法生成的每个案例,我试图在第一个目标中从destruct
做thing1
,在第二个目标中从destruct
做thing2
问题是,inclusion
生成13个子目标,每个子目标通过destruct
分解为2个。本地选择器[>thing1 | thing2]
正在尝试匹配所有子目标,而不仅仅是特定析构函数生成的子目标
我如何对战术进行排序,以便对归纳法生成的每个案例运行destruct
,然后对第一个destruct生成的目标运行thing1
,对第二个生成的目标运行thing2
,对于每个归纳法案例。您有两个问题:(1)默认情况下分号保持关联,以及(2)[>]
语法适用于所有重点目标,而不仅仅是前一种策略产生的目标。
(正如Jason所指出的,这种解释是不对的,但答案仍然有效:)
您可以通过将[>]
更改为[]
并将分号与括号右键关联来解决这些问题:
Goal ((True /\ True) /\ (True /\ True) /\ (True /\ True)).
Fail (split; [|split]); split; [> exact I | exact I].
(split; [|split]); (split; [exact I | exact I]).
Qed.
在您的示例中:
induction e; intros;
pose (bool_dec (is_v_of_expr e1)) as ve1;
(destruct ve1; [thing1 | thing 2]).
实际上,
代码>是完全关联的,并且;[…]
绑定比更松散代码>并且是左关联的。此外,所有战术都隐含着多目标,并适用于所有当前关注的目标。