設置 | 登錄 | 註冊

目前共有7篇帖子。

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中,#沒有注釋的作用
悄悄打开魔盒兩橫線 -- 是注釋, 井號後面一般是關鍵字,比如說#check,#eval
啊啊是谁都对回復 @悄悄打開魔盒:原來如此,那看來和一般的編程程序還不太一樣
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

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。