Zulip Chat Archive

Stream: lean4

Topic: I want to prove that b_i divides m. Why does the error ​​'ty


grandxuan pan (Aug 05 2025 at 14:18):

image.png

Kenny Lau (Aug 05 2025 at 14:19):

please copy your code (#backticks, #mwe)

grandxuan pan (Aug 05 2025 at 14:19):

import Mathlib.Algebra.Group.Defs  -- 群论基础

import Mathlib.Data.Real.Basic     -- 实数理论

import Mathlib.Analysis.Calculus.Deriv.Basic  -- 微积分

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic  -- 提供 Finset 和最小公倍数支持

import Mathlib.Data.Fintype.Basic  -- 提供有限类型支持

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List  -- 打开List命名空间

open Finset Nat

open Nat

namespace NumberTheory

-- 定义命名空间下全局变量和假设

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk0 : 0 < k := Nat.lt_of_lt_of_le (by decide) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k  → ℕ)

variable (ha_range : ∀ i, i ∈ Set.Icc (1 : ℕ) k)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)

variable (ha_inj : Function.Injective a)

variable (ha_inji : Function.Injective b)

def a₀ : ℕ := a ⟨0, hk0⟩

def b₀ : ℕ := b ⟨0, hk0⟩

def a_i (i : Fin k) : ℕ := a i

def b_i (i : Fin k) : ℕ := b i

example (i : Fin k) : ℕ := a i  -- aᵢ

example (i : Fin k) : ℕ := b i  -- bᵢ

variable (h_coprime : ∀ (i : Fin k), gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values : Finset ℕ := Finset.image b (indices k)

def m (k : ℕ) (b : Fin k → ℕ): ℕ :=  Finset.fold lcm 1 b (indices k)
-- 步骤4: 证明每个bᵢ整除m

lemma b_dvd_m (i : Fin k) : b i ∣ m k b:= by

unfold m

have mem_b : b i ∈ b_values k b := by

{unfold b_values

unfold indices

rw [Finset.mem_image]

use i

constructor

· exact List.mem_finRange i  -- i在finRange中

· rfl}

exact dvd_lcm

end NumberTheory

Kenny Lau (Aug 05 2025 at 14:21):

#backticks

grandxuan pan (Aug 05 2025 at 14:37):

import Mathlib.Algebra.Group.Defs  

import Mathlib.Data.Real.Basic    
import Mathlib.Analysis.Calculus.Deriv.Basic  

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic

import Mathlib.Data.Fintype.Basic

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List  

open Finset Nat

open Nat

namespace NumberTheory

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk0 : 0 < k := Nat.lt_of_lt_of_le (by decide) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k  → ℕ)

variable (ha_range : ∀ i, i ∈ Set.Icc (1 : ℕ) k)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)

variable (ha_inj : Function.Injective a)

variable (ha_inji : Function.Injective b)

def a₀ : ℕ := a ⟨0, hk0⟩

def b₀ : ℕ := b ⟨0, hk0⟩

def a_i (i : Fin k) : ℕ := a i

def b_i (i : Fin k) : ℕ := b i

example (i : Fin k) : ℕ := a i  -- aᵢ

example (i : Fin k) : ℕ := b i  -- bᵢ

variable (h_coprime : ∀ (i : Fin k), gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values : Finset ℕ := Finset.image b (indices k)

def m (k : ℕ) (b : Fin k → ℕ): ℕ :=  Finset.fold lcm 1 b (indices k)

'''

lemma b_dvd_m (i : Fin k) : b i ∣ m k b:= by

unfold m

have mem_b : b i ∈ b_values k b := by

{unfold b_values

unfold indices

rw [Finset.mem_image]

use i

constructor

· exact List.mem_finRange i  -- i在finRange中

· rfl}

exact dvd_lcm

'''

end NumberTheory

Kenny Lau (Aug 05 2025 at 14:40):

#backticks

Ruben Van de Velde (Aug 05 2025 at 14:45):

To clarify, that's a link. Follow it and follow the instructions

grandxuan pan (Aug 05 2025 at 14:49):

Apologies, this is my first time asking questions on Zulip.please bear with my newbie status.

grandxuan pan (Aug 05 2025 at 15:03):

import Mathlib.Algebra.Group.Defs

import Mathlib.Data.Real.Basic

import Mathlib.Analysis.Calculus.Deriv.Basic

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic

import Mathlib.Data.Fintype.Basic

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List

open Finset Nat

open Nat

namespace NumberTheory

variable (k : ) (hk : 1  k)

variable (hk₀ : 0 < k := Nat.lt_of_lt_of_le (Nat.zero_lt_one) hk)

variable (i : Fin k)

variable (a : Fin k  ) (b : Fin k  )

variable (ha :  i, a i > 0) (hb :  i, b i > 0)

variable (h_coprime :  i, gcd (a i) (b i) = 1)

def indices (k : ) : Finset (Fin k) := Finset.univ

def b_values (b : Fin k  ) : Finset  := Finset.image b (indices k)

def m (b : Fin k  ) :  := Finset.fold lcm 1 b (indices k)

lemma b_dvd_m (i : Fin k) : b i  m b := by

  have mem_b : b i  b_values b := by

    rw [Finset.mem_image]

    use i

    constructor

    · exact List.mem_finRange i

    · rfl

  exact dvd_lcm  -- Error occurs here

end NumberTheory

Aaron Liu (Aug 05 2025 at 15:04):

Can you post the code block without using no-break spaces?

grandxuan pan (Aug 05 2025 at 15:18):

'''

import Mathlib.Algebra.Group.Defs  -- 群论基础

import Mathlib.Data.Real.Basic     -- 实数理论

import Mathlib.Analysis.Calculus.Deriv.Basic  -- 微积分

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic  -- 提供 Finset 和最小公倍数支持

import Mathlib.Data.Fintype.Basic  -- 提供有限类型支持

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List  -- 打开List命名空间

open Finset Nat

open Nat

namespace NumberTheory

-- 定义命名空间下全局变量和假设

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk0 : 0 < k := Nat.lt_of_lt_of_le (by decide) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k → ℕ)  -- 修复箭头前的不间断空格

variable (ha_range : ∀ i, i ∈ Set.Icc (1 : ℕ) k)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)
-- 添加必要的类型类声明

variable (N : Type) [CancelCommMonoidWithZero N] [NormalizedGCDMonoid N]
-- 添加这些实例声明 ↓

variable [inst1 : CancelCommMonoidWithZero N]

variable [inst2 : NormalizedGCDMonoid N]

variable (ha_inj : Function.Injective a)

variable (ha_inji : Function.Injective b)

def a₀ : ℕ := a ⟨0, hk0⟩

def b₀ : ℕ := b ⟨0, hk0⟩

def a_i (i : Fin k) : ℕ := a i

def b_i (i : Fin k) : ℕ := b i

example (i : Fin k) : ℕ := a i  -- aᵢ

example (i : Fin k) : ℕ := b i  -- bᵢ

variable (h_coprime : ∀ (i : Fin k), gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values : Finset ℕ := Finset.image b (indices k)

def m (k : ℕ) (b : Fin k → ℕ) : ℕ := Finset.fold lcm 1 b (indices k)  -- 修复定义后的空格
-- 步骤4: 证明每个bᵢ整除m

lemma b_dvd_m (i : Fin k) : b i ∣ m k b := by  -- 修复冒号后的空格

unfold m

have mem_b : b i ∈ b_values k b := by

{unfold b_values

unfold indices

rw [Finset.mem_image]

use i

constructor

· exact Finset.mem_univ i  -- 修复:应该是mem_univ而不是range

· rfl}

exact dvd_lcm mem_b  -- 修复dvd_lcm前的空格

end NumberTheory'''

grandxuan pan (Aug 05 2025 at 15:21):

'''import Mathlib.Algebra.Group.Defs  -- 群论基础

import Mathlib.Data.Real.Basic     -- 实数理论

import Mathlib.Analysis.Calculus.Deriv.Basic  -- 微积分

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic  -- 提供 Finset 和最小公倍数支持

import Mathlib.Data.Fintype.Basic  -- 提供有限类型支持

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List  -- 打开List命名空间

open Finset Nat

open Nat

namespace NumberTheory
-- 定义命名空间下全局变量和假设

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk0 : 0 < k := Nat.lt_of_lt_of_le (by decide) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k → ℕ)  -- 修复箭头前的不间断空格

variable (ha_range : ∀ i, i ∈ Set.Icc (1 : ℕ) k)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)
-- 添加必要的类型类声明

variable (N : Type) [CancelCommMonoidWithZero N] [NormalizedGCDMonoid N]
-- 添加这些实例声明 ↓

variable [inst1 : CancelCommMonoidWithZero N]

variable [inst2 : NormalizedGCDMonoid N]

variable (ha_inj : Function.Injective a)

variable (ha_inji : Function.Injective b)

def a₀ : ℕ := a ⟨0, hk0⟩

def b₀ : ℕ := b ⟨0, hk0⟩

def a_i (i : Fin k) : ℕ := a i

def b_i (i : Fin k) : ℕ := b i

example (i : Fin k) : ℕ := a i  -- aᵢ

example (i : Fin k) : ℕ := b i  -- bᵢ

variable (h_coprime : ∀ (i : Fin k), gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values : Finset ℕ := Finset.image b (indices k)

def m (k : ℕ) (b : Fin k → ℕ) : ℕ := Finset.fold lcm 1 b (indices k)  -- 修复定义后的空格
-- 步骤4: 证明每个bᵢ整除m

lemma b_dvd_m (i : Fin k) : b i ∣ m k b := by  -- 修复冒号后的空格

unfold m

have mem_b : b i ∈ b_values k b := by

{unfold b_values

unfold indices

rw [Finset.mem_image]

use i

constructor

· exact Finset.mem_univ i  -- 修复:应该是mem_univ而不是range

· rfl}

exact dvd_lcm mem_b  -- 修复dvd_lcm前的空格

end NumberTheory'''

grandxuan pan (Aug 05 2025 at 15:23):

'''

import Mathlib.Algebra.Group.Defs  

import Mathlib.Data.Real.Basic    

import Mathlib.Analysis.Calculus.Deriv.Basic  

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic  

import Mathlib.Data.Fintype.Basic  

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List  -- 打开List命名空间

open Finset Nat

open Nat

namespace NumberTheory

-- 定义命名空间下全局变量和假设

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk0 : 0 < k := Nat.lt_of_lt_of_le (by decide) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k → ℕ)  

variable (ha_range : ∀ i, i ∈ Set.Icc (1 : ℕ) k)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)

variable (N : Type) [CancelCommMonoidWithZero N] [NormalizedGCDMonoid N]

variable [inst1 : CancelCommMonoidWithZero N]

variable [inst2 : NormalizedGCDMonoid N]

variable (ha_inj : Function.Injective a)

variable (ha_inji : Function.Injective b)

def a₀ : ℕ := a ⟨0, hk0⟩

def b₀ : ℕ := b ⟨0, hk0⟩

def a_i (i : Fin k) : ℕ := a i

def b_i (i : Fin k) : ℕ := b i

example (i : Fin k) : ℕ := a i  -- aᵢ

example (i : Fin k) : ℕ := b i  -- bᵢ

variable (h_coprime : ∀ (i : Fin k), gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values : Finset ℕ := Finset.image b (indices k)

def m (k : ℕ) (b : Fin k → ℕ) : ℕ := Finset.fold lcm 1 b (indices k)  

lemma b_dvd_m (i : Fin k) : b i ∣ m k b := by  

unfold m

have mem_b : b i ∈ b_values k b := by

{unfold b_values

unfold indices

rw [Finset.mem_image]

use i

constructor

· exact Finset.mem_univ i  

· rfl}

exact dvd_lcm mem_b  

end NumberTheory'''

Henrik Böving (Aug 05 2025 at 15:30):

You want to use three backticks: ```, not the normal ticks ''', according to Wikipedia it should be on the top left key of most (but not all) chinese keyboards.

grandxuan pan (Aug 05 2025 at 15:36):

import Mathlib.Data.Real.Basic

import Mathlib.Analysis.Calculus.Deriv.Basic

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic

import Mathlib.Data.Fintype.Basic

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List

open Finset Nat

open Nat

namespace NumberTheory

variable (k : ℕ) (hk : 1 ≤ k)

variable (hk₀ : 0 < k := Nat.lt_of_lt_of_le (Nat.zero_lt_one) hk)

variable (i : Fin k)

variable (a : Fin k → ℕ) (b : Fin k → ℕ)

variable (ha : ∀ i, a i > 0) (hb : ∀ i, b i > 0)

variable (h_coprime : ∀ i, gcd (a i) (b i) = 1)

def indices (k : ℕ) : Finset (Fin k) := Finset.univ

def b_values (b : Fin k → ℕ) : Finset ℕ := Finset.image b (indices k)

def m (b : Fin k → ℕ) : ℕ := Finset.fold lcm 1 b (indices k)

lemma b_dvd_m (i : Fin k) : b i ∣ m b := by

have mem_b : b i ∈ b_values b := by

rw [Finset.mem_image]

use i

constructor

· exact List.mem_finRange i

· rfl

exact dvd_lcm  -- Error occurs here

end NumberTheory```

Aaron Liu (Aug 05 2025 at 15:38):

You should put a newline between the three backticks and your first import statement

grandxuan pan (Aug 05 2025 at 15:42):

import Mathlib.Data.Real.Basic

import Mathlib.Analysis.Calculus.Deriv.Basic

import Mathlib.Data.Nat.Basic

import Mathlib.Data.Nat.GCD.Basic

import Mathlib.Data.Finset.Basic

import Mathlib.Data.Fintype.Basic

import Mathlib.Algebra.BigOperators.Intervals

import Mathlib.Algebra.GCDMonoid.Finset

open List

open Finset Nat

open Nat

namespace NumberTheory

variable (k : ) (hk : 1  k)

variable (hk₀ : 0 < k := Nat.lt_of_lt_of_le (Nat.zero_lt_one) hk)

variable (i : Fin k)

variable (a : Fin k  ) (b : Fin k  )

variable (ha :  i, a i > 0) (hb :  i, b i > 0)

variable (h_coprime :  i, gcd (a i) (b i) = 1)

def indices (k : ) : Finset (Fin k) := Finset.univ

def b_values (b : Fin k  ) : Finset  := Finset.image b (indices k)

def m (b : Fin k  ) :  := Finset.fold lcm 1 b (indices k)

lemma b_dvd_m (i : Fin k) : b i  m b := by

have mem_b : b i  b_values b := by

rw [Finset.mem_image]

use i

constructor

· exact List.mem_finRange i

· rfl

exact dvd_lcm  -- Error occurs here

end NumberTheory

Aaron Liu (Aug 05 2025 at 15:52):

When I click on the link to go the web editor the error I get is

Application type mismatch: In the application
  m b
the argument
  b
has type
  Fin k → ℕ : Type
but is expected to have type
  ℕ : Type

Last updated: Dec 20 2025 at 21:32 UTC