首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >精益高尔夫小贴士

精益高尔夫小贴士
EN

Code Golf用户
提问于 2021-10-08 15:43:50
回答 3查看 421关注 0票数 9

精益是一种定理证明语言和编程语言。这也是写当月语言的时候!

人们对精益高尔夫有什么建议?和往常一样,小贴士应该专为精益而设。“删除注释”不是答案),并坚持每一个答案一个提示。

EN

回答 3

Code Golf用户

发布于 2021-10-08 15:59:30

介绍

如果您刚刚完成了自然数游戏,您可能熟悉intro的策略,这可以用来创建含义/函数。然而,这种策略很少是最高明的。

如果你的介绍是你证明的第一部分,那么隐含的表达可能会更好。比较:

代码语言:javascript
运行
复制
def q:list ℕ→ℕ:=by{intro x,induction x,exact 0,exact x_hd+x_ih}

使用

代码语言:javascript
运行
复制
def q(x:list ℕ):ℕ:=by{induction x,exact 0,exact x_hd+x_ih}

这常常是你最好的选择。但是,如果可以推断函数的类型,则还有其他选项。

代码语言:javascript
运行
复制
def f:ℕ→ℕ:=by{intro x,exact x+3}
def f(x:ℕ):ℕ:=by{exact x+3}
def f:=λx,by{exact x+3}
def f(x):=by{exact x+3}

这些是按长度排序的,因此隐式forall (最后一个选项仍然是隐式的)是最短的。但是,如果函数是提交的,lambda可以将def f:=表达式删除,使其在这种情况下是最短的。

票数 5
EN

Code Golf用户

发布于 2021-10-08 21:32:07

使用by而不是begin ... end

by可以短于beginend

代码语言:javascript
运行
复制
def foo(m:ℕ):m=m:=begin refl,end

长于

代码语言:javascript
运行
复制
def bar(m:ℕ):m=m :=by refl

你也可以用它来做多个战术,但是你需要用支撑套住战术,就像小麦向导指出的那样。例如,by{rw add_assoc,refl}begin rw add_assoc,refl end短。

票数 4
EN

Code Golf用户

发布于 2021-10-09 16:49:55

;<|>组合子.

;使得由最后一个策略创建的所有子目标都应用了下一个策略;例如,lemma asda (n : ℕ) : n = n := by { induction n; refl }是一个有效的证明。作为奖励,它还允许您不使用大括号(例如def k(n:ℕ):n=n:=by induction n;refl)。

<|>更加利基,但仍然很有用;它允许您执行一种策略,如果它失败,则另一种策略则相反。它也不允许大括号(虽然这比,长,所以不那么有用)。例如:

代码语言:javascript
运行
复制
example(x):0+x=x:=by induction x;refl<|>rw nat.zero_add
票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/236157

复制
相关文章

相似问题

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