COQ中的简化策略是什么?

时间:2016-01-24 13:40:15

标签: coq

我想知道simpl策略在COQ中是如何运作的 假设以下引理:

Parameter n:nat. 
Lemma test: S n + 0 = S (n+0).

现在,simpl.策略产生了

S (n + 0) = S (n + 0)

我的理解是simpl执行一系列的 转化cbv beta, delta, iota次。 我试过了,但无法获得与simpl相同的结果。基本问题是,在cbv delta扩展后,plus字词会不断扩展。如何对其进行去扩展,即重新替换扩展定义的plus名称?
或者,有人能告诉我如何通过手动执行更基本的战术来获得simpl的效果吗?

1 个答案:

答案 0 :(得分:2)

我认为仅使用simpl模仿cbv策略是不可能的,因为确实cbv delta不允许您选择要替换的事件,而simpl仅限simpl当它导致iota步骤时执行delta减少。 (参见https://coq.inria.fr/distrib/current/refman/Reference-Manual010.html#hevea_tactic135

因此,即使非正式地我们可以说cbv执行这样一系列调用,它似乎可以访问执行这些减少的低级方法,而不是library IEEE; use IEEE.STD_LOGIC_1164.ALL; use work.package_log.all; use IEEE.NUMERIC_STD.ALL; entity mux_generic is generic(N : natural :=8; M : natural := 8); -- N: number of inputs -- M: bit per input/output Port ( input : in STD_LOGIC_VECTOR (N*M-1 downto 0); sel: in STD_LOGIC_VECTOR (log2ceil(N)-1 downto 0); output : out STD_LOGIC_VECTOR (M-1 downto 0)); end mux_generic; architecture DataFlow of mux_generic is begin output <= input(M*(to_integer(unsigned(sel))+1) - 1 downto M*(to_integer(unsigned(sel)))); end DataFlow; 策略暴露的方式