我试图定义有助于语句/代码/程序/算术/布尔表达式的配置,但是我发现自己必须为每种类型定义一个配置,这似乎是不必要的。是否可以在Coq中合并所有不同的案例?
$.ajax({
type: 'GET'
url: 'http://localhost:8000/users',
success: function(response) {
console.log(response);
},
error: function(xhr, status, err) {
console.log(xhr.responseText);
}
});
然后我注意到对于大步和小步,我也有单独的配置。是否可以将它们合并为1个单一配置?
Inductive BigConfig : Type :=
| B_AExpConf : AExp -> State -> BigConfig
| B_BExpConf : BExp -> State -> BigConfig
| B_StmtConf : Statement -> State -> BigConfig
| B_BlkConf : Block -> State -> BigConfig
| B_StateConf : State -> BigConfig
| B_PgmConf : Program -> BigConfig.
答案 0 :(得分:0)
正如我在评论中说的,BigConfig
是SmallConfig + State
,这意味着,如果您像这样定义SmallConfig
:
Inductive SmallConfig : Type :=
| S_AExpConf : AExp -> State -> SmallConfig
| S_BExpConf : BExp -> State -> SmallConfig
| S_StmtConf : Statement -> State -> SmallConfig
| S_BlkConf : Block -> State -> SmallConfig
| S_PgmConf : Program -> SmallConfig.
然后定义BigConfig
的一种方法是:
Definition BigConfig : Type := sum SmallConfig State.
然后,您必须在BigConfig
(sum
/ inl
上进行模式匹配,而不是对inr
构造函数(不再存在)进行模式匹配。和SmallConfig
情况下的inl
构造函数。
match bconf with
| inl (S_AExpConf a s) => ...
| inl (S_BExpConf b s) => ...
...
| inr s (* this represents B_StateConf *) => ...
end