coq - Ltac:在每个目标中做一些不同的事情
问题描述
我有一个证明脚本,我正在探索多个案例,目前速度很慢,因为我有许多解决目标的策略,并且我正在尝试每个案例中的每一个。
我知道在某些情况下我需要应用某些策略,但我不确定如何做到这一点。
这是我现在拥有的:
induction e;
intros;
pose (bool_dec (is_v_of_expr e1)) as ve1; destruct ve1;
[> thing1 | thing 2].
这给出了错误Incorrect number of goals (expected 26 tactics, was given 2)
。
对于归纳产生的每种情况,我都试图thing1
在第一个目标destruct
和thing2
第二个目标中做。destruct
问题是,induction
生成 13 个子目标,每个子目标被分成 2 个destruct
。本地选择器[> thing1 | thing2 ]
试图匹配所有子目标,而不仅仅是特定破坏产生的子目标。
我如何对策略进行排序,以便destruct
在归纳生成的每个案例上thing1
运行,然后在第一个破坏生成的目标上thing2
运行,然后在第二个生成的目标上运行,对于每个归纳案例。
解决方案
你有两个问题:(1)分号默认是左结合的,(2)
(正如杰森所指出的,这种解释是不正确的,但答案仍然有效:)[> ]
语法适用于所有重点目标,而不仅仅是前一种策略产生的目标。
您可以通过将分号与括号更改并右关联[> ]
来解决这些问题:[ ]
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]).
推荐阅读
- ruby-on-rails - Rails - 测试作用域destroy_all忽略作用域
- wordpress - WordPress REST API - 超过 10 个帖子
- java - 使用不同于默认的事务隔离创建休眠事务
- react-native - undefined 不是函数(评估 '_reactNativeNavigation2.default.startTabBasedApp') startTabs StartMainTabs.js
- html - 如何去除图片下方的空白?
- ruby-on-rails - Rails 使用类方法打印 JSON
- c++ - C++ 预处理器:测试类是否存在
- realm - 领域通知导致异常:对象已被删除或无效
- javascript - 使用 flexbox 在容器中动态调整盒子
- r - 按组 ID 变量分组的单个变量的条形图,以实现一个条形图,其中包含每个特定组的所有值