首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决伊莎贝尔星无码方程的缺陷

如何解决伊莎贝尔星无码方程的缺陷
EN

Stack Overflow用户
提问于 2022-05-02 03:18:26
回答 1查看 55关注 0票数 1
代码语言:javascript
运行
复制
theory AReg imports Main  begin

datatype ('v)regexp = Alp 'v| Alter "('v) regexp" "('v) regexp" (infix "||" 55) | Dot (".")|
                      Star "'v regexp" ("_*") | Plus "('v) regexp"("_+") | Ques "('v) regexp"("_?") 
              

inductive_set star :: "'a list set \<Rightarrow> 'a list set" 
  for r :: "'a list set" where
"[] \<in> star r"|
"x \<in> r\<Longrightarrow> x@x \<in> star r"

primrec sem_reg :: "('a) regexp \<Rightarrow> 'a \<Rightarrow> 'a list set" where 
"sem_reg (Alp a) v = (if a = v then {[v]} else {})"|
"sem_reg (Dot) a= {[a]}"|
"sem_reg (v1||v2) a = (sem_reg v1 a) \<union> (sem_reg v2 a)"|
"sem_reg (Star a) v = star (sem_reg a v)"|
"sem_reg (Plus a) v = star (sem_reg a v) - {[]}"|
"sem_reg (Ques v) a = {[]} \<union> (sem_reg v a)"

value "sem_reg (Star a) v"
value "sem_reg Dot (1::nat)"

我试图定义正则表达式的语义。但是当我测试星号函数时,它警告说没有恒星的代码方程。怎么修呢?

EN

回答 1

Stack Overflow用户

发布于 2022-05-02 08:46:12

错误信息告诉你,伊莎贝尔不知道如何计算星号。考虑到无穷大中的集合,您将无法定义返回所有可能值的函数。

一种可能的解决办法是使用另一种评估,即简化器:

代码语言:javascript
运行
复制
value [simp] "sem_reg (Star (a::nat regexp)) v"
value [simp] "sem_reg Dot (1::nat)"

这避免了对代码生成器的依赖。但是,正如你所期望的那样,星号并没有被评估。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72082036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档