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}
   := by
  rw [(Set.Subset.antisymm_iff ), (Set.subset_def), ]
  /- We introduce a variable that will be used
     in 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 LHS
     is 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⌋)*2
    norm_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-⌊α⌋)` then
       there 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$ ‹_›+1
  simp_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@c
  simp_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_all
        have:(c+1:ℝ)<=A*(l-⌊x⌋)+⌊x⌋+1:=by norm_cast
        simp_all
        cases 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 contradiction
           split 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_all
      nlinarith[(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]

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Framework AMS(11)广播组件分析-2(注册/注销流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读广播组件的动态注册/注销过程及静态注册过程。关注思维导图中左上侧部分即可。 有了前面startActivity流程和service组件启动流程分…

Llamaindex RAG 实践

大模型支持的最强大的应用程序之一是复杂的问答聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 &#xff08;RAG&#xff09; 的技术。 1. 什么是RAG&#xff1f; 当你需要给模型注入新的知识时&#xff0c;有两种方法&#xf…

C#基础入门--类的建立与使用

上周刚开C#&#xff0c;这门课&#xff0c;第一节课就感觉不对劲了&#xff0c;感觉跟java很像(上图C#&#xff0c;下图java),进来页面都差不多&#xff1a; 这里介绍以下我C#的第一个程序&#xff0c;以类的思想定义一个student类&#xff0c;用户输入类中的属性信息后&#x…

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例&#xff0c;以及提示模板&#xff0c;然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答&#xff0c;作为样本 samples [{"theme": &…

GNN系统学习:简单图论、环境配置、PyG中图与图数据集的表示和使用

Reference datawhale开源学习资料 开篇 1.1 为什么要在图上进行深度学习&#xff1f; 在过去的深度学习应用中&#xff0c;我们接触的数据形式主要是这四种&#xff1a;矩阵、张量、序列&#xff08;sequence&#xff09;和时间序列&#xff08;time series&#xff09;。然…

嵌入式面试八股文(六)·ROM和RAM的区别、GPIO的八种工作模式、串行通讯和并行通讯的区别、同步串行和异步串行的区别

目录 1. ROM和RAM的区别 2. GPIO的八种工作模式 3. 串行通讯和并行通讯的区别 3.1 串行通讯 3.2 并行通讯 3.3 对比 4. 同步串行和异步串行的区别 4.1 时钟信号 4.2 数据传输效率 4.3 应用场景 4.4 硬件复杂性 1. ROM和RAM的区别 ROM&#xff08;Read-O…

批量缓存模版

批量缓存模版 缓存通常有两种使用方式&#xff0c;一种是Cache-Aside&#xff0c;一种是cache-through。也就是旁路缓存和缓存即数据源。 一般一种用于读&#xff0c;另一种用于读写。参考后台服务架构高性能设计之道。 最典型的Cache-Aside的样例&#xff1a; //读操作 da…

Vue3学习笔记(上)

Vue3学习笔记&#xff08;上&#xff09; Vue3的优势&#xff1a; 更容易维护&#xff1a; 组合式API更好的TypeScript支持 更快的速度&#xff1a; 重写diff算法模板编译优化更高效的组件初始化 更小的体积&#xff1a; 良好的TreeShaking按需引入 更优的数据响应式&#xf…

SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记

这是一篇港科大学生在google research 实习期间发在ECCV2024的语义引导生成式修复的文章&#xff0c;港科大陈启峰也挂了名字。从首页图看效果确实很惊艳&#xff0c;尤其是第三行能用文本调控修复结果牌上的字。不过看起来更倾向于生成&#xff0c;对原图内容并不是很复原&…

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题&#xff1a;这篇文章要解决的问题是大型语言模型&#xff08;LLMs&#xff09;在生成输出时存在的事实不准确性&#xff0c;即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色&#xff0c;但当遇到超出训练语料库范围的新知识时&#xff0c;它们通常会生…

常见计算机网络知识整理(未完,整理中。。。)

TCP和UDP区别 TCP是面向连接的协议&#xff0c;发送数据前要先建立连接&#xff1b;UDP是无连接的协议&#xff0c;发送数据前不需要建立连接&#xff0c;是没有可靠性&#xff1b; TCP只支持点对点通信&#xff0c;UDP支持一对一、一对多、多对一、多对多&#xff1b; TCP是…

HashMap(深入源码追踪)

一篇让你搞懂HashMap的几个最重要的知识点,往源码跟踪可以让我们很轻松应对所谓的一些八股面试题. 一. 属性解释 先来解释HashMap中重要的常量属性值 DEFAULT_INITIAL_CAPACITY : 默认初始化容量,也就是如果不指定初始化的Map存储容量大小,默认生成一个存储16个空间的Map集合…

MySQL中的事务与锁

目录 事务 InnoDB 和 ACID 模型 原⼦性的实现 持久性的实现 ​隔离性的实现 锁 隔离级别 ​多版本控制(MVCC) 事务 1.什么是事务? 事务是把⼀组SQL语句打包成为⼀个整体&#xff0c;在这组SQL的执⾏过程中&#xff0c;要么全部成功&#xff0c;要么全部失败&#…

C#开发基础:WPF和WinForms关于句柄使用的区别

1、前言 在 Windows 应用程序开发中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;和 WinForms&#xff08;Windows Forms&#xff09;是两种常见的用户界面&#xff08;UI&#xff09;框架。它们各自有不同的架构和处理方式&#xff0c;其中一个显…

基于.NET开源、功能强大且灵活的工作流引擎框架

前言 工作流引擎框架在需要自动化处理复杂业务流程、提高工作效率和确保流程顺畅执行的场景中得到了广泛应用。今天大姚给大家推荐一款基于.NET开源、功能强大且灵活的工作流引擎框架&#xff1a;elsa-core。 框架介绍 elsa-core是一个.NET开源、免费&#xff08;MIT License…

.NET6中WPF项目添加System.Windows.Forms引用

.NET6中WPF项目添加System.Windows.Forms引用 .NET6的WPF自定义控件默认是不支持System.Windows.Forms引用的&#xff0c;需要添加这个引用方法如下&#xff1a; 1. 在项目浏览器中找到项目右击&#xff0c;选择编辑项目文件&#xff08;Edit Project File&#xff09;。 …

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制&#xff0c;怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili 目录 1.实行行为树实现拉怪机制 1.1行为树黑板 1.2获取施加伤害对象&#xff08;伤害源&#xff09; 2.修复原视频中&#xff0c;第二次攻击怪物后&#xff0c;怪物卡在原地不动的BUG 3.怪物攻击玩…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

Vue全栈开发旅游网项目(9)-用户登录/注册及主页页面开发

1.用户登录页面开发 1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传 1.1 创建版权声明组件Copyright 新建文件&#xff1a;src\components\common\Copyright.vue <template><!-- 版权声明 --><div class"copyright">copyright xx…

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…