視頻鏈接:
陶哲軒必備助手之人工智能數(shù)學驗證+定理發(fā)明工具LEAN4 [線性代數(shù)篇2]矩陣乘積的行列式變形(上篇)_嗶哩嗶哩_bilibili
import Mathlib.LinearAlgebra.Matrix.Determinant
import Mathlib.GroupTheory.Perm.Fin
import Mathlib.GroupTheory.Perm.Sign
import Mathlib.Data.Real.Sqrt
import Mathlib.Data.List.Perm
-- 本文件最終目標是證明行列式中矩陣相乘的運算規(guī)律:第二篇
-- det (M * N) = det M * det N
universe u v w z
open Equiv Equiv.Perm Finset Function
namespace Matrix --目的是避免模糊定義mul_apply
open Matrix BigOperators
variable {m n : Type*} [DecidableEq n] [Fintype n] [DecidableEq m] [Fintype m]
variable {R : Type v} [CommRing R]
local notation "ε " σ:arg => ((sign σ : ?) : R) -- “元編程”,創(chuàng)造新符號,ε 接收一個參數(shù),結果就是sign σ
set_option linter.unusedVariables false --
-- 沒講到的部分會分別用“前置知識”視頻發(fā)出來,先記???
?
def detRowAlternating2
: AlternatingMap R (n → R) R n --- 最后這個參數(shù)n屬于補充說明,實際形式上只需傳三個參數(shù)即可
:=
MultilinearMap.alternatization ( -- ???基本的要素都齊了,求和,連乘,全體置換,置換的符號。具體邏輯還不懂
(MultilinearMap.mkPiAlgebra R n R).compLinearMap
LinearMap.proj)
abbrev det2 (M : Matrix n n R): R :=
(detRowAlternating2) M
def printPerms (n : ?) : List (List ?) :=
List.map List.reverse (List.permutations (List.range n))
-- Perm n
-- #eval printPerms 4
-- #eval printPerms 3
?
-- 正式開始:
lemma MainGoal_1 (M N : Matrix n n R):
det (M * N)
= ∑ p : n → n,
∑ σ : Perm n,
(ε σ)
*
∏ i,
M (σ i) (p i) * N (p i) i
:= by
simp only [det_apply']
simp only [mul_apply]
simp only [prod_univ_sum] -- ???與"先連加,再連乘,等于,先連乘,再連加",還有笛卡爾積“全覆蓋”,相關的定理
-- 如何理解Fintype.piFinset t
-- 假設 t 是一個從集合 {1, 2} 到有限集合的映射,其中 t(1) = {a, b},t(2) = {x, y}。
-- 那么 Fintype.piFinset t 就表示集合 {(a, x), (a, y), (b, x), (b, y)},即這兩個集合的笛卡爾積。
-- 舉例說明prod_univ_sum
-- 首先,讓我們假設集合α包含元素1和2,對應的集合分別為t1和t2。而且我們有以下映射關系:
-- t1 = {a, b}, t2 = {x, y}
-- 對應的函數(shù)f如下:
-- f(1, a) = 2, f(1, b) = 3, f(2, x) = 1, f(2, y) = 4
-- 現(xiàn)在我們來計算左側和右側的值。
-- 左側:(∏ a, ∑ b in t a, f a b)
-- = (∑ b in t1, f(1, b)) * (∑ b in t2, f(2, b))
-- = (f(1, a) + f(1, b)) * (f(2, x) + f(2, y))
-- = (2 + 3) * (1 + 4)
-- = 5 * 5
-- = 25
-- 右側:∑ p in Fintype.piFinset t, ∏ x, f x (p x)
-- = f(1, a) * f(2, x) + f(1, a) * f(2, y) + f(1, b) * f(2, x) + f(1, b) * f(2, y)
-- = 2 * 1 + 2 * 4 + 3 * 1 + 3 * 4
-- = 2 + 8 + 3 + 12
-- = 25
-- 因此,根據(jù) Finset.prod_univ_sum 定理,左側和右側的值相等,都等于25。
simp only [mul_sum] --???用gpt舉個例子來理解
simp only [Fintype.piFinset_univ] --???Fintype.piFinset的使用 -- 1,2,3 =》 3,2,1
rw [Finset.sum_comm] --???兩階求和順序互換的相關定理
done
lemma MainGoal_2 (M N : Matrix n n R):
∑ p : n → n,
∑ σ : Perm n,
ε σ
*
∏ i,
M (σ i) (p i) * N (p i) i
= ∑ p in (@univ (n → n) _).filter Bijective,
∑ σ: Perm n,
(ε σ)
*
(∏ i,
M (σ i) (p i) * N (p i) i)
:= by
apply Eq.symm
apply sum_subset --s? ? s?, x ∈ s?, x ? s?的情況為0,則可以直接去掉
· intro h1 h2
exact mem_univ h1
· intros h3 h4 h5
apply det_mul_aux -- ???這個先不理解,后面專門出一個視頻來教如何讀證明并且分解證明成策略模式。
-- 一個先連乘,再連加的東西,結果是0,關鍵是非雙射導致的,有點意思
-- 舉個例子,p=[1,1],Perm 2只有兩個變換:1.恒等變換,簡稱id;2.換位變換,簡稱swap
-- ε id * (M (id 1)(p 1) * N (p 1)1) * (M (id 2)(p 2) * N (p 2)2)
-- = 1 * (M 1 1 * N 1 1) * (M 2 1 * N 1 2)
-- = M 1 1 * N 1 1 * M 2 1 * N 1 2
-- ε swap * (M (swap 1)(p 1) * N (p 1)1) * (M (swap 2)(p 2) * N (p 2)2)
-- = -1 * (M 2 1 * N 1 2) * (M 1 1 * N 1 1)
-- = -M 2 1 * N 1 2 * M 1 1 * N 1 1
simp only [mem_filter] at h5 -- 就是filter的定義唄,是屬于某個集合里面的,而且滿足條件1
simp only [mem_univ] at h5
simp only [true_and_iff] at h5
set h6 := fun x ? h3 x -- 寫這個h6,h7是為了補充說明,其實這里h6就是和h3同一個映射,寫法不一樣而已
-- have h7: h6=h3 -- 為了讓大家理解
-- := by
-- exact rfl
exact h5
done
lemma MainGoal_3 (M N : Matrix n n R):
∑ p in (@univ (n → n) _).filter Bijective,
∑ σ: Perm n,
ε σ
*
(∏ i,
M (σ i) (p i) * N (p i) i)
=
∑ τ : Perm n,
∑ σ : Perm n,
(ε σ)
*
(∏ i,
M (σ i) (τ i) * N (τ i) i)
:= by
rw [sum_comm]
rw [sum_comm] -- 這兩步sum_comm相當于沒變,只改成了x,y
refine' sum_bij _ _ _ _ _ -- ???這個需要問一下gpt找到數(shù)學世界里的對應定理名稱。
-- 不一樣的定義域s、t,不同的函數(shù)f、g,求和相同,需要什么條件呢。5個條件
-- 舉例:
-- 假設我們有以下集合和映射:
-- 令 α = {1, 2, 3},即集合 {1, 2, 3}。
-- 令 β = {a, b, c},即集合 {a, b, c}。
-- 令 γ = {x, y, z},即集合 {x, y, z}。
-- 定義函數(shù) f: α → β 和 g: γ → β 如下:
-- 對于 f,我們定義 f(1) = a,f(2) = b,f(3) = c。
-- 對于 g,我們定義 g(x) = a,g(y) = b,g(z) = c。
-- 接下來,定義函數(shù) i: α → γ 如下:
-- i(1) = x
-- i(2) = y
-- i(3) = z
-- 現(xiàn)在,我們可以檢查定理的條件是否滿足:
-- 映射關系 (h): 對于所有 a 屬于 {1, 2, 3},我們有 f a = g (i a)。
-- 這是滿足的,例如,對于 a = 1,我們有 f(1) = a 和 g(i(1)) = g(x) = a。
-- i 是單射 (i_inj): 如果 i a? = i a?,則 a? = a?。
-- 這是滿足的,因為 i 的定義是一對一的,不同的 a 映射到不同的 γ 中的元素。
-- i 是滿射 (i_surj): 對于任意 b 屬于 {x, y, z},存在 a 屬于 {1, 2, 3},使得 b = i a。
-- 這也是滿足的,因為 i 的定義覆蓋了整個 γ。
-- 如果這些條件滿足,我們可以應用定理,從而得出:
-- [
-- \prod_{x \in {1, 2, 3}} f(x) = \prod_{x \in {x, y, z}} g(x)
-- ]
-- 即,
-- [
-- abc = abc
-- ]
· intros ih1 ih2 -- 這里ih1潛臺詞是隨機的ih1
have ih3:= (mem_filter.mp ih2).right
have ih4:= ofBijective ih1 ih3 --???現(xiàn)實中的意義有待
simp only [Perm]
exact ih4 -- 如果這里定義錯了,下面滿盤皆輸
-- 注意不能像以下這樣定義
-- intros ih1 ih2
-- have ih3:= Equiv.refl n
-- simp only [Perm]
-- exact ih3
· intro h1
intro h2 --原來這里會用到refine1的證明
simp only [mem_univ]
· intros h_1 h_2
have h_3:= mem_filter.1 h_2
obtain ?h_4,h_5? := h_3
simp only [id_eq]
set h_6 := ofBijective h_1 h_5 -- h_1和h_6相等嗎?,由ofBijective的toFun定義知道就是h_1
-- have h1_equal_h6 : h_1=h_6 -- 為了說明而寫的,因為ofBijective的實際效果是和toFun相同的,是定義導致的相同
-- := by
-- exact rfl
rfl
· intros inj_1 inj_2 inj_3 inj_4 inj_5
simp only [id_eq] at inj_5 -- 看起來很明顯,但就是完成不了
ext x
have inj_6:= ofBijective_apply inj_1
have inj_7:= ofBijective_apply inj_2
have bij_inj_3:= (mem_filter.mp inj_3).right
rw [← inj_6]
rw[inj_5,
inj_7]
done
· intros b x
refine' Exists.intro b _ -- 要證明存在某個原始使得某個命題成立,只需要,給出例子,然后讓例子代入后面描述的命題中,該命題為真即可。
-- 比如這里就是把a全部替換成了b
-- 如果第二個參數(shù)中不用直接替換的,比如下面這行,就直接證明第二個參數(shù)代表的命題即可
refine' Exists.intro _ _ -- 比如這里ha在第二個參數(shù)中沒有需要替換的,直接證明第二個命題即可
· refine' mem_filter.mpr _
constructor
· refine' mem_univ (↑b)
· exact Equiv.bijective b
· refine' coe_fn_injective _ --在外層套了一個不變的映射
simp only [id_eq]
simp only [FunLike.coe_fn_eq]
refine' Equiv.ext _
intros x2
-- ↑(ofBijective ↑b (_ : Bijective ↑b))前面這個和↑b作用效果一樣嗎?查一下ofBijective的toFun := f定義就知道,就是f本身
-- 下面是進一步的探究,不看了
-- have equalTest: (ofBijective ↑b (_ : Bijective ↑b)) = b
-- := by
-- refine ((fun {α β} {e? e?} ? Equiv.coe_inj.mp) rfl).symm
rfl
done
done
?文章來源:http://www.zghlxwxcb.cn/news/detail-774710.html
end Matrix文章來源地址http://www.zghlxwxcb.cn/news/detail-774710.html
到了這里,關于陶哲軒必備助手之人工智能數(shù)學驗證+定理發(fā)明工具LEAN4 [線性代數(shù)篇2]矩陣乘積的行列式變形(上篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!