目前共有7篇帖子。 內容轉換:不轉換▼
 
點擊 回復
120 6
lean4的简单程序
初級魔法師 四級
1樓 發表于:2024-5-3 01:13
-- 两横线后面是注释-- 计算#eval 12+12 -- 计算,结果是24

-- 类型检查
def f (x :ℕ) :=  x + 3
#check f -- 类型检查,结果是ℕ→ℕ
#check 2 + 2 = 4 -- 类型检查,结果是Prop,即命题
def FermatLastTheorem :=  ∀ x y z n : ℕ, n > 2 ∧ x * y * z ≠ 0 → x ^ n + y ^ n ≠ z ^ n
#check FermatLastTheorem --类型检查,结果是Prop,即命题

theorem easy : 2 + 2 = 4 :=  rfl
#check easy -- 类型检查,结果是2+2=4,即命题2+2=4的证明
theorem hard : FermatLastTheorem :=  sorry -- sorry表示暂时跳过证明
#check hard -- 类型检查,结果是FermatLastTheorem,即命题FermatLastTheorem的证明


-- 定理证明
import Mathlib.Data.Real.Basic-- An example.

example (a b c : ℝ) : a * b * c = b * (a * c) := by

  rw [mul_comm a b]  -- 用乘法交换律,把a * b改写为b*a

  rw [mul_assoc b a c] -- 用乘法结合律,把(b * a) * c改写为b * (a * c)


-- rw即“重写”,是一种证明策略,把一个表达式替换为相等的表达式




初級魔法師 四級
2樓 發表于:2024-5-3 01:18
-- 一部分换行丢了。。重新发
-- 两横线后面是注释
-- 计算#eval 12+12 -- 计算,结果是24

-- 类型检查

#check 3 -- 类型检查,结果是ℕ
def f (x :ℕ) :=  x + 3
#check f -- 类型检查,结果是ℕ→ℕ
#check 2 + 2 = 4 -- 类型检查,结果是Prop,即命题
def FermatLastTheorem :=  ∀ x y z n : ℕ, n > 2 ∧ x * y * z ≠ 0 → x ^ n + y ^ n ≠ z ^ n
#check FermatLastTheorem --类型检查,结果是Prop,即命题

theorem easy : 2 + 2 = 4 :=  rfl -- 证明2+2=4,rfl表示直接计算的策略
#check easy -- 类型检查,结果是2+2=4,即命题2+2=4的证明
theorem hard : FermatLastTheorem :=  sorry -- sorry表示暂时跳过证明
#check hard -- 类型检查,结果是FermatLastTheorem,即命题FermatLastTheorem的证明

-- 定理证明
import Mathlib.Data.Real.Basic -- 导入mathlib中的实数理论

example (a b c : ℝ) : a * b * c = b * (a * c) := by
  rw [mul_comm a b]  -- 用乘法交换律,把a * b改写为b*a
  rw [mul_assoc b a c] -- 用乘法结合律,把(b * a) * c改写为b * (a * c)


-- rw即“重写”,是一种证明策略,把一个表达式替换为相等的表达式


 
執行總編 二十一級
3樓 發表于:2024-5-3 06:39
看来在lean4中,#没有注释的作用
 
啊啊是谁都对:回复 @悄悄打开魔盒:原来如此,那看来和一般的编程程序还不太一样
  2024-5-3 07:18 回復
悄悄打开魔盒:两横线 -- 是注释, 井号后面一般是关键字,比如说#check,#eval
  2024-5-3 07:12 回復
初級魔法師 四級
4樓 發表于:2024-5-3 07:51
import Mathlib.Data.Real.Basic

-- 一个稍复杂一些的例子,使用intro策略给各个假设命名
theorem my_lemma : ∀ x y ε : ℝ, 0 < ε → ε ≤ 1 → |x| < ε → |y| < ε → |x * y| < ε := by  

  intro x y ε epos ele1 xlt ylt  

  calc    |x * y| = |x| * |y| := by exact abs_mul x y    

  _ ≤ |x| * ε := by

    apply mul_le_mul     

    · apply le_refl      

    · exact le_of_lt ylt      

    · exact abs_nonneg y      

    · exact abs_nonneg x    

  _ < 1 * ε := by      

    rw [mul_lt_mul_right]      

    · apply lt_of_lt_of_le xlt ele1      

    · exact epos    

  _ = ε := by rw [one_mul]

 
執行總編 二十一級
5樓 發表于:2024-5-4 23:22
感谢整理
本帖已收录于【整理】布拉斯侃吧现存的知识相关帖子链接合集
地址:https://zh.purasbar.com/post.php?t=26891
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:120 回複數:6
評論數: ?
作者:悄悄打开魔盒
最後回復:啊啊是谁都对
最後回復時間:2024-5-4 23:22
 
©2010-2024 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。