我想知道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
的效果吗?
答案 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;
策略暴露的方式