AlphaProof IMO 2024 P1 in LEAN 之 简介

        AlphaProof 是用于进行数学证明的人工智能,其中,对于 IMO 2024 中的6道题中的 4 道。本系列博文,就 AlphaProof 对于 IMO 2024 P1 给出的答案进行详细讲述。这里是此系列的第一篇。

IMO 2024 P1

        题目如下:

IMO 2024 P1 答案

        α 为 偶整数 (Even Interger)。

P1问题与答案在LEAN 中的形式化(Formalization)

        如上图,IMO 2024 P1 在 LEAN 的定义,其中,表达了,两集合的相等。即 对于所有的实数α,使得,对于任一正整数(大于0的自然数)n,有 对于 i ∈ [0, n],所有 i *  α 的 floor 值之和 是 正整数 n 的倍数。与 所有偶整数的集合 相等。

        这里, {(α : ℝ) | P α } 是集合定义的一种语法。

        等号前边的 P 是

∀ (n : ℕ), 0 < n → (n : ℤ) ∣ (∑ i in Finset.Icc 1 n, ⌊ i * α ⌋ )

        等号右边的 P 是

 ∃ k : ℤ, Even k ∧ α = k

        意思是,被定义集合的元素来自于实数集中,满足谓词命题(Predicate)P,的所有元素

        这样,能明确,在LEAN中,IMO 2024 问题一 是如何定义的。后面的 := 符号,引出该两集合相等的证明。 而 by 关键字 引出了 使用 LEAN 中的 Tactic 机制进行证明。

        后续,本系列博文会对该证明过程,代码分析,进行尽可能清晰的讲解,希望大家关注。下面就列出,具体的证明代码,如下:

theorem imo_2024_p1 :{(α : ℝ) | (∀ (n : ℕ), 0 < n → (n : ℤ) ∣ (∑ i in Finset.Icc 1 n, ⌊i * α⌋))}= {α : ℝ | ∃ k : ℤ, Even k ∧ α = k}:= byrw [(Set.Subset.antisymm_iff ), (Set.subset_def), ]/- We introduce a variable that will be usedin the second part of the proof (the hard direction),namely the integer `l` such that `2l = ⌊α⌋ + ⌊2α⌋`(this comes from the given divisibility condition with `n = 2`). -/exists λx L=>(L 2 two_pos).rec λl Y=>?_use λy . x=>y.rec λS p=>?_· /- We start by showing that every `α` of the form `2k` works.In this case, the sum simplifies to `kn(n+1)`),which is clearly divisible by `n`. -/simp_all[λL:ℕ=>(by norm_num[Int.floor_eq_iff]:⌊(L:ℝ)*S⌋=L* S )]rw[p.2,Int.dvd_iff_emod_eq_zero,Nat.lt_iff_add_one_le,<-Finset.sum_mul,←Nat.cast_sum, S.even_iff, ←Nat.Ico_succ_right,@ .((( Finset.sum_Ico_eq_sum_range))),Finset.sum_add_distrib ]at*simp_all[Finset.sum_range_id]exact dvd_trans ⟨2+((_:ℕ)-1),by linarith[((‹ℕ›:Int)*(‹Nat›-1)).ediv_mul_cancel$ Int.prime_two.dvd_mul.2<|by ·omega]⟩ ↑↑(mul_dvd_mul_left @_ (p))/- Now let's prove the converse, i.e. that every `α` in the LHSis an even integer. We claim for all such `α` and `n ∈ ℕ`, we have`⌊(n+1)*α⌋ = ⌊α⌋+2n(l-⌊α⌋)`. -/suffices : ∀ (n : ℕ),⌊(n+1)*x⌋ =⌊ x⌋+2 * ↑ (n : ℕ) * (l-(⌊(x)⌋))· /- Let's assume for now that the claim is true,and see how this is enough to finish our proof. -/zify[mul_comm,Int.floor_eq_iff] at this-- We'll show that `α = 2(l-⌊α⌋)`, which is obviously even.use(l-⌊x⌋)*2norm_num-- To do so, it suffices to show `α ≤ 2(l-⌊α⌋)` and `α ≥ 2(l-⌊α⌋)`.apply@le_antisymm/- To prove the first inequality, notice that if `α > 2(l-⌊α⌋)` thenthere exists an integer `N > 0` such that `N ≥ 1/(α - 2(l -⌊α⌋))`.By our assumed claim (with `n = N`), we have`⌊α⌋ + 2(l-⌊α⌋)N + 1 > (N+1)α`, i.e.`⌊α⌋ + (2(l-⌊α⌋) - α)N + 1 > α`,and this implies `⌊α⌋ > α`; contradiction. -/use not_lt.1 (by cases exists_nat_ge (1/(x-_)) with|_ N =>nlinarith[ one_div_mul_cancel $ sub_ne_zero.2 ·.ne',9,Int.floor_le x, this N])/- Similarly, if `α < 2(l-⌊α⌋)` then we can find a positive natural `N`such that `N ≥ 1/(2(l-⌊α⌋) - α)`.By our claim (with `n = N`), we have`(N+1)α ≥ ⌊α⌋ + 2(l-⌊α⌋)N`, i.e.`α ≥ ⌊α⌋ + (2(l-⌊α⌋) - α)N`,and this implies `a ≥ ⌊α⌋ + 1`; contradiction. -/use not_lt.1 (by cases exists_nat_ge (1/_:ℝ)with|_ A=>nlinarith[Int.lt_floor_add_one x,one_div_mul_cancel$ sub_ne_zero.2 ·.ne',this A])/- Now all that's left to do is to prove our claim`⌊(n + 1)α⌋ = ⌊α⌋ + 2n(l - ⌊α⌋)`. -/intro-- We argue by strong induction on `n`.induction‹_› using@Nat.strongInductionOn-- By our hypothesis on `α`, we know that `(n+1) | ∑_{i=1}^(n+1) ⌊iα⌋`specialize L$ ‹_›+1simp_all[add_comm,mul_assoc,Int.floor_eq_iff,<-Nat.Ico_succ_right, add_mul,(Finset.range_succ), Finset.sum_Ico_eq_sum_range]revert‹ℕ›/- Thus, there exists `c` such that`(n+1)*c = ∑_{i=1}^{n+1} ⌊iα⌋ = ⌊nα+α⌋ + ∑_{i=1}^n ⌊iα⌋`. -/rintro A B@csimp_all[ Finset.mem_range.mp _,←eq_sub_iff_add_eq',Int.floor_eq_iff]/- By the inductive hypothesis,`∑_{i=0}^{n-1}, ⌊α+iα⌋ = ∑_{i=0}^{n-1}, ⌊α⌋+2*i*(l-⌊α⌋)`. -/suffices:∑d in .range A,⌊x+d*x⌋=∑Q in .range A,(⌊x⌋+2*(Q * (l-.floor x)))· suffices:∑d in ( .range A),(((d)):ℤ) =A * ( A-1)/2· have:(A : ℤ) * (A-1)%2=0· cases@Int.emod_two_eq A with|_ B=>norm_num[B,Int.sub_emod,Int.mul_emod]norm_num at*norm_num[ Finset.sum_add_distrib,<-Finset.sum_mul, ←Finset.mul_sum _ _] at*rw[eq_sub_iff_add_eq]at*/- Combined with`∑_{i=0}^{n-1},⌊iα+α⌋ = (n+1)c - ⌊nα+α⌋`,we have `⌊nα+α⌋ = (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋)`, so`⌊nα+α⌋ ≥ (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋)`and`⌊nα+α⌋ < (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋) + 1`.Also, since `2*l = ⌊α⌋ + ⌊2α⌋`, we have`2α+⌊α⌋-1 < 2*l ≤ 2α+⌊α⌋.`-/zify[←mul_assoc, this,←eq_sub_iff_add_eq',‹_ =(@ _) /@_›,Int.floor_eq_iff] at *zify[*]at*-- We will now show that `c = n*(l-⌊α⌋) + ⌊α⌋`.cases S5:lt_or_ge c (A * (l-.floor ↑x)+⌊x⌋ + 1)· simp_allhave:(c+1:ℝ)<=A*(l-⌊x⌋)+⌊x⌋+1:=by norm_castsimp_allcases this.eq_or_lt· /- For if `c = n*(l-⌊α⌋) + ⌊α⌋`, then```⌊(n+1)α⌋ = (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋)= (n+1)(n(l - ⌊α⌋) + ⌊α⌋) - n⌊α⌋ - n(n-1)(l-⌊α⌋)= 2n(l-⌊α⌋) + ⌊α⌋```as desired. -/repeat use by nlinarith/- Now, we show `c = n*(l-⌊α⌋) + ⌊α⌋` via contradictionsplit into two cases. First suppose `c ≤ n(l - ⌊α⌋) + ⌊α⌋ - 1`.```(n+1)α < (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋) + 1≤ (n+1)(n(l-⌊α⌋) + ⌊α⌋ - 1) - n⌊α⌋ - n(n-1)(l-⌊α⌋) + 1= 2n(l-⌊α⌋) + ⌊α⌋ - n= 2ln - 2n⌊α⌋ + ⌊α⌋ - n≤ (2α+⌊α⌋)n - 2n⌊α⌋ + ⌊α⌋ - n= nα + n(α-⌊α⌋-1) + ⌊α⌋n + α.```contradiction. -/nlinarith[(by norm_cast at* :(A*(l -⌊x⌋):ℝ)+⌊(x)⌋ >=(c)+01),9,Int.add_emod ↑5,Int.floor_le (@x : ℝ),Int.lt_floor_add_one (x:)]/- Next, suppose `c ≥ n(l - ⌊α⌋) + ⌊α⌋ + 1`.```(n+1)α ≥ (n+1)c - n⌊α⌋ - n(n-1)(l-⌊α⌋)≥ (n+1)(n(l-⌊α⌋) + ⌊α⌋ + 1) - n⌊α⌋ - n(n-1)(l-⌊α⌋)= 2n(l-⌊α⌋) + ⌊α⌋ + n + 1= 2ln - 2n⌊α⌋ + ⌊α⌋ + n + 1> (2α+⌊α⌋-1)n - 2n⌊α⌋ + ⌊α⌋ + n + 1= nα + n(α-⌊α⌋) + ⌊α⌋ + 1> n + α```contradiction. -/simp_allnlinarith[(by norm_cast:(c:ℝ)>=A*(l-⌊_⌋)+⌊_⌋+1),Int.floor_le x,Int.lt_floor_add_one x]rw [←Nat.cast_sum, mul_sub, Finset.sum_range_id]cases A with|_=>norm_num[mul_add]use Finset.sum_congr rfl <| by simp_all[add_comm,Int.floor_eq_iff]

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11362.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CANFD与CAN区别

CANFD帧的帧格式相比于传统CAN帧的帧格式多了以下的不同的&#xff1a; 1.CANFD帧中用RRS位替换了CAN帧中的RTR位&#xff0c;CAN报文中的RTR&#xff08;Remote Transmission Request&#xff09;位是远程帧发送请求位&#xff0c;当RTR位为显性&#xff08;0&#xff09;时&…

并发编程设计模式——Balking模式(三十九)

Balking 模式 多线程下&#xff0c;维护一个共享状态满足某个条件时&#xff0c;执行业务逻辑&#xff1b;当不满足时则立即放弃。通常用互斥锁来确保共享状态线程安全&#xff0c;如果不需要保证共享状态原子性&#xff0c;也可以用 volitle 修饰&#xff0c;替换互斥锁。 Bal…

了解Synchronized与Lock的区别

前言&#xff1a; 在多线程编程中&#xff0c;保证线程安全是至关重要的。Java提供了两种主要的同步机制&#xff1a;synchronized关键字和Lock接口。尽管它们都是为了解决多线程并发访问共享资源的问题&#xff0c;但在使用方式和特性上存在一些显著的差异。 synchronized&am…

DOM操作和事件监听综合练习:利用JS实现图片轮播

我们经常会看到购物网页上有商品图片在自动循环播放&#xff0c;这就是图片轮播&#xff0c;图片轮播‌是一种常见的网页设计元素&#xff0c;用于在网页上自动切换显示多张图片或内容。它通过JavaScript来实现图片的自动轮播效果&#xff0c;结合HTML和CSS来完成布局和样式设置…

Spark 新作《循序渐进 Spark 大数据应用开发》简介

《循序渐进Spark大数据应用开发》由清华大学出版社出版&#xff0c;已于近期上市。该书基于Spark 3.5.1编写&#xff0c;提供24个实战案例26个上机练习&#xff0c;可谓是目前市面上最新的Spark力作。 本文对《循序渐进Spark大数据应用开发》一书做个大致的介绍。 封面部分 …

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计&#xff08;MLE&#xff09; 二、最大后验估计&#xff08;MAP&#xff09; 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时&#xff0c;MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频&#xff1a; 贝叶斯解释“L1和L2正则化”&#xff…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…

【国产桌面操作系统开发】制作桌面快捷方式

前言 目前使用最广的国产桌面操作系统是麒麟kylin操作系统和统信UOS操作系统&#xff0c;在国产系统上开发应用&#xff0c;需要在桌面提供一个快捷方式给用户使用&#xff0c;国产系统是Linux阵营&#xff0c;与window系统是有差异的。 国产系统桌面 国产系统桌面是一个xxx.d…

AndroidStudio-常用布局

一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时&#xff0c;内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时&#xff0c;内部视图在垂直方向从上往下排列。 如果不指定orientation属性&#xff0c;…

UEditor(百度开源的在线编辑器,修改版)

dc-UEditor&#xff0c;rich text 富文本编辑器&#xff0c;基于百度UEditor 1.4.3.3-utf8-php版修改。 修复了Uploader.class.php的安全隐患。 新增了以下功能&#xff1a; 1、上传图片是否加水印。 2、新增了单独调用上传的接口。 3、表情本地化&#xff0c;预防百度UEd…

Docker安装部署RabbitMQ

1. Docker环境准备 1.1 安装Docker 在开始Docker安装部署RabbitMQ之前&#xff0c;确保您的系统环境已经满足Docker的运行要求。以下是在不同操作系统上安装Docker的步骤和命令行演示。 对于Linux系统 在基于Debian的系统&#xff08;如Ubuntu&#xff09;上&#xff0c;您…

通义千问API调用测试 (colab-python,vue)

文章目录 代码&#xff08;来自官网&#xff09;colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面&#xff0c;点击API示例 前端调用直接在前端调用的优缺点以vue为例&#xff08;代码是基于官网node.js的代码转换而来&#xf…

BLDC基础知识复习【一】

焊接DDR的时候用镊子轻轻抖动一下&#xff0c;能晃动后复位代表焊接成功&#xff1b;用棉签和洗板水清洗板子&#xff0c;不要用纸擦 无刷没有定子和换向器&#xff0c;转子和定子反过来了&#xff1a; KV值越大&#xff0c;电机转速越大。电机转速 KV * 供电电压 外转子电机…

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进&#xff0c;当前主流设备采用LTPO屏幕&#xff08;可变刷新率屏幕&#xff09;&#xff0c;此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容&#xff0c;如射击游戏&#xff0c;交互动画等&#xff0c;显示帧率越高&#xff0…

递归写斐波那契数

在思考一些C语言编程题的解法时我们经常会碰到的一种算法是递归&#xff0c;递归的字面意思是传递回归&#xff0c;会用例子来解释和运用。 递归 例&#xff1a;在控制台输出指定项数的斐波那契数 斐波那契数列数列是指&#xff1a;1,1,2,3,5,8,13,21,34......从第三项开始等…

手写JDK动态代理实现AOP

AOP底层&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;在 Java 中的实现有多种方式&#xff0c;其中使用 JDK 动态代理和 CGLIB 代理较为常见。 当你的应用程序遵循面向接口编程的原则时&#xff0c;JDK 动态代理是一个自然的…

Gin框架

GoWeb框架 GIN框架 基于httprouter开发的Web框架 安装与使用 安装 下载并安装GIN go get -u github.com/gin-gonic/gin 示例 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET&#xff1a;请…

nodejs - nodejs安装步骤

安装 NodeJS 1.下载 NodeJS下载官网&#xff1a;https://nodejs.cn/download/ 2.验证 下载后解压安装&#xff0c;运行如下命令验证安装是否成功&#xff1a; node -v npm -v3.查看默认存放位置 查看npm默认存放位置&#xff0c;运行命令如下&#xff1a; npm get prefix…

Spring Boot框架:计算机课程管理的工程认证之光

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

游戏设计:推箱子【easyx图形界面/c语言】

在之前写程序设计的大作业时&#xff0c;在哔哩哔哩上跟着一个视频的学习的成果【第一个练习的】 今天整理文件的时候看到的&#xff0c;就发出来一下【CSDN和B站都有详细教程】 不是大项目&#xff0c;只有两个界面 这个代码只有两百行不到&#xff0c;但通过这个把基本的运…