陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆

这篇具有很好参考价值的文章主要介绍了陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我还做了一个视频专门讲解哦,有空支持一下点个赞:

陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆_哔哩哔哩_bilibili

import Paperproof

import Mathlib.LinearAlgebra.Matrix.Adjugate

import Mathlib.Data.Real.Sqrt

-- set_option trace.Meta.synthInstance true

-- 要解释每一个名词的实际数学意义,别忘了提一下gpt的帮助,虽然不能直接用,但是大致代码是有的。

namespace Matrix

-- universe u2 u2' v2

def m2 : Type := ℕ

def n2 : Type := ℕ

def α2 : Type := ℝ

variable

-- {m2 := ℕ } --三个类型

-- {n2 : ℕ }

-- {α2 : ℝ }

-- Fintype α意思是α是有限的(即只有有限多个不同的类型元素α)。

[Fintype n2]

-- 断言α具有可判定的相等性(即对全部a b : α,a = b是可判定的)

[DecidableEq n2]

-- 交换的环,例如实数R

-- 一个带有两个二元运算的集合 R 是环,即将环中的任意两个元素变为第三个的运算。

-- 他们称为加法与乘法,通常记作 + 与 ⋅ ,例如 a + b 与 a ⋅ b。

-- 为了形成一个群这两个运算需满足一些性质:

-- 环在加法下是一个阿贝尔群(即满足交换律),

-- 在乘法下为一个幺半群,使得乘法对加法有分配律,即 a ⋅ (b + c) = (a ⋅ b) + (a ⋅ c)。

-- 关于加法与乘法的单位元素分别记作 0 和 1。

-- 另外如果乘法也是交换的,即a ⋅ b = b ⋅ a,环 R 称为交换的。

[CommRing α2]

-- open Equiv Equiv.Perm Finset Function --这个不用

-- ---/ 引入MainGoal需要定义的变量

variable (A : Matrix n2 n2 α2) (B : Matrix n2 n2 α2)

-- ---/

-- 先看几个前置知识,然后后面涉及到的不懂的其实可以忽略,抓住形式化证明的核心,就是“一样的形式,可以rfl替换”

-- 实际案例:

def matrix1 : Matrix (Fin 2) (Fin 2) ℝ :=

![![1, 2],

![3, 4]]

def matrix2 : Matrix (Fin 2) (Fin 2) ℝ :=

![![5, 6],

![7, 8]]

def matrixUnit : Matrix (Fin 2) (Fin 2) ℝ :=

![![1, 0],

![0, 1]]

-- def matrix3 : Matrix (Fin 2) (Fin 3) ℝ :=

-- ![![1, 2, 3],

-- ![4 ,5, 6]]

-- #eval matrix3 1 0


 

-- #check A * B

def matrix1_adjugate : Matrix (Fin 2) (Fin 2) ℝ := adjugate matrix1

def matrix1_det := matrix1.det

-- #eval matrix1

-- [ 1 2

-- 3 4 ]

-- #eval matrix1_adjugate -- 伴随矩阵(伴随矩阵即每一项先变余子式行列式,再加正负号(定义为-1的i+j次方),再转置)

-- [ 4 -2

-- -3 1 ]

-- #eval (matrix1_adjugate * matrix1) -- 伴随矩阵 矩阵乘 矩阵

-- [ -2 0

-- 0 -2 ]

#eval matrix1_det -- 矩阵的行列式,是一个实数

-- (-2)

-- #eval matrix1_det • matrixUnit -- 矩阵的行列式 数乘 矩阵

-- [ -2 0

-- 0 -2 ]

-- 可以看出matrix1_adjugate * matrix1 和 matrix1_det • matrixUnit 结果相等



 

-- Finset.sum Finset.univ的使用:

def my_set := (Finset.univ : (Finset (Fin 2)))

-- #eval my_set -- {0, 1}

-- Finset.sum需要两个参数:

-- 1.一个有限集合,表示对该集合中的元素进行求和。

-- 2.一个返回可相加的类型(即带有has_add类型类)的函数表达式,用于指定如何将集合中的元素相加。

def sum_of_numbers : ℕ

:= Finset.sum (Finset.range 11) (fun x => x) -- 也就是x为0到10自然数,f(x)=x求和

-- #eval sum_of_numbers -- 55

def sum_of_numbers2 : ℕ

:= Finset.sum my_set (fun x => x) -- 也就是x为{0, 1},f(x)=x求和

-- #eval sum_of_numbers2 -- 1

-- cramer 的使用

def matrixb : Fin 2 → ℝ :=

![5, 6]

#eval matrixb

def cramer001 := (cramer matrix1 matrixb)

-- 可以看成一个n*1维的矩阵;也可以看成Fin 2 → ℝ,类似于数列;相当于 A.det • x ; 比如这里![8 -9]里,8就是matrix1第一列换成matrixb之后的矩阵,计算出来的行列式;9就是第2列替换matrixb后计算的行列式

#eval cramer001

def solution := (matrix1_det) • (cramer matrix1 matrixb)

-- 如何表示除法要有理数才行的

#eval solution -- 解应该是x=![-4 4.5]



 

-- Pi.single 的使用

def matrixPiSingle : Matrix (Fin 3) (Fin 3) ℝ :=

![![1, 2, 3],

![4, 5, 6],

![7, 8, 9]]

#eval matrixPiSingle 0 0

#eval matrixPiSingle 0 1

#eval matrixPiSingle 2 0

-- def Single001 (i k:Fin 3):= Pi.single k (matrixPiSingle i k)

-- def Single001 (A : Matrix n2 n2 α2) (i k:n2)

-- :n2 → α2

-- := (Pi.single k (A i k))

def Single001 (i k j:Fin 3)

:Fin 3 → ℝ

:= Pi.single j (matrixPiSingle (i-1) (k-1)) -- 这里j是标志判断位,

#eval (Single001 3 1 2) 2 --最后一个输入2才是重点,如何和j相同,就输出预设好的(matrixPiSingle (i-1) (k-1))的值,否则输出0






 

-- 抽象证明:

-- 四个领域 1.adjugate 2.cramer 3.det 4.Pi.single

-- 1↔2,4 2↔3,4 1↔3

-- #check (cramer Aᵀ) --: (n2 → α2) →ₗ[α2] n2 → α2

-- 1↔2,4的桥梁

lemma mul_adjugate_apply2 (A : Matrix n2 n2 α2) (i j k) :

(A i k) * (adjugate A k j) = (cramer Aᵀ) (Pi.single k (A i k)) j

:= by

have test: (cramer Aᵀ) (A i k • Pi.single k 1) j

= (A i k • (cramer Aᵀ) (Pi.single k 1)) j

:= by

simp only [SMulHomClass.map_smul]---我知道了,你要知道f代表什么,f代表(cramer Aᵀ) (参数一) j

rw [

← smul_eq_mul,

adjugate, -- 1↔2,4 伴随矩阵的定义来的。伴随矩阵即每一项先变余子式行列式,再加正负号(定义为-1的i+j次方),再转置

-- asfsadf,

of_apply,

← Pi.smul_apply,

← test,

]

rw [← Pi.single_smul',

smul_eq_mul,

mul_one]

done

-- 1↔3 的桥梁(由1↔2,4 和 2↔3,4 和 4↔null 得到)

lemma mul_adjugate2

(A : Matrix n2 n2 α2)

: A * adjugate A = A.det • (1 : Matrix n2 n2 α2)

:= by

-- have h1:= A * adjugate A -- : Matrix n n α

-- have h2:= A.det • (1 : Matrix n2 n2 α2) -- : Matrix n2 n2 α2

ext i k

rw [

mul_apply, -- 作用:(M * N) i k = Finset.sum Finset.univ fun j ↦ M i j * N j k

-- 将 (A * adjugate A) i k

-- 其中 M=>A, N=>adjugate A

-- 变成了等号右边 (Finset.sum Finset.univ fun j ↦ A i j * adjugate A j k)

Pi.smul_apply, -- 作用:(b • x) i = b • (x i)

-- 将 (det A • 1) i k

-- 其中 b=>det A,x=>1,i=>i

-- 变成了 ( det A • (1 i) ) k

-- * 暂时理解成OfNat.ofNat 1 就是 1的单位矩阵(1 : Matrix n n α)

Pi.smul_apply,

-- 再作用一次 (b • x) i = b • (x i)

-- 其中 b=>det A,x=>(1 i),i=>k

-- 变成了det A • (1 i k)

one_apply,

smul_eq_mul,

mul_boole]

simp only [mul_adjugate_apply2] -- 1↔2,4的桥梁

simp only [sum_cramer_apply]

-- have :sorry:=sorry

simp only [Finset.sum_pi_single] -- Pi.single就是一个按特定索引得到单值,其他索引得到0 ; 这里理解是:

-- 首先对于Finset.sum Finset.univ fun x ↦ Pi.single x (A i x) j 我们知道x会进行遍历n2,其实只有x=j时有值,其余为0,所以j是否属于n2就决定了一切

simp only [Finset.mem_univ]

simp only [ite_true]

-- simp only [ne_eq, Finset.sum_pi_single, Finset.mem_univ, ite_true]

simp only [cramer_transpose_row_self] --好像是这么一回事,这就是行列式有两列相等,行列式就是0 -- 2↔3,4的桥梁 --单独cramer Aᵀ是再穿一个系数矩阵b,就得到由行列式组成的n*1维矩阵或看成数列

simp only [Pi.single_apply] -- 4↔null的桥梁

simp only [eq_comm]

done

-- 1↔3 的桥梁

theorem MainGoal [Invertible A.det] : A * (⅟(det A) • adjugate A) = (1 : Matrix n2 n2 α2)

:= by

rw [

mul_smul_comm,

mul_adjugate2,

smul_smul,

invOf_mul_self,

one_smul]

done


 

end Matrix文章来源地址https://www.toymoban.com/news/detail-769183.html

到了这里,关于陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

    、 大家好,我是微学AI,今天给大家介绍一下人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况,深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基础,需要掌握这些数学知识:向

    2024年02月21日
    浏览(75)
  • 人工智能中的数学计算和数学思想

    在人工智能(AI)领域,数学计算扮演着至关重要的角色,支撑着众多算法的设计与实现。以下是一些人工智能中常见的数学计算: 线性代数 : 向量和矩阵运算:用于表示和处理高维数据,例如神经网络中的权重、输入输出向量、卷积运算等。 特征值和特征向量:在主成分

    2024年04月16日
    浏览(41)
  • 人工智能的数学基础

    2023年09月13日
    浏览(70)
  • 人工智能之数学基础【牛顿法】

    简述 牛顿法常用来求解无约束非线性规划问题,它利用目标函数的二次泰勒展开式构造搜索方向。 无约束非线性规划问题 : m i n f ( x ) , x ∈ R n min f(x),quad x in R^n min f ( x ) , x ∈ R n 。如果目标函数 f ( x ) f(x) f ( x ) 在 R n R^n R n 上具有 连续的二阶偏导数 ,其中 Hessian矩阵正定

    2024年02月20日
    浏览(46)
  • 【可乐荐书】人工智能数学基础

    本栏目将推荐一些经典的、有趣的、有启发性的书籍,这些书籍涵盖了各个领域,包括文学、历史、哲学、科学、技术等等。相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力。 今天给大家推荐的书籍是:《人工智能数学基础》 凡事都要打好基础,

    2024年02月07日
    浏览(45)
  • 人工智能中的数学基础

    2023年09月11日
    浏览(58)
  • 【人工智能】AI写作能力大比拼:《人工智能的数学基础》写下这本书的目录。

    《人工智能的数学基础》 第一章 人工智能与数学基础 1.1 人工智能简介 1.2 数学在人工智能中的作用 1.3 本书内容概述 第二章 线性代数基础 2.1 向量与矩阵 2.2 行列式与矩阵计算 2.3 线性方程组 2.4 矩阵分解与特征值分析 第三章 微积分基础 3.1 导数与微分 3.2 积分学基础 3.3 常

    2024年02月09日
    浏览(67)
  • 人工智能之数学基础【最小二乘法】

    原理 最小二乘法由勒让德(A.M.Legendre)于1805年在其著作《计算彗星轨道的新方法》中提出,主要思想是最小化误差二次方和寻找数据的最佳匹配函数,利用最小二乘法求解未知参数,使得理论值与观测值之差(即误差,或称为残差)的二次方和达到最小,即: E = ∑ i = 1 n

    2024年02月21日
    浏览(49)
  • 人工智能之数学基础【共轭梯度法】

    简述 共轭梯度法是利用目标函数的梯度逐步产生 共轭方向 并将其作为搜索方向的方法。 共轭梯度法是针对二次函数 f ( x ) = 1 2 x T Q x + b T x + c , x ∈ R n f(x)=frac{1}{2}x^TQx+b^Tx+c,x in R^n f ( x ) = 2 1 ​ x T Q x + b T x + c , x ∈ R n 的 无约束优化问题 。此方法具有 存储变量少 和 收敛速

    2024年02月20日
    浏览(50)
  • 【人工智能】关于人类大脑模型的一些数学公式

    关于人类大脑建模的数学公式主要涉及到神经元网络、激活函数、学习算法等方面。这里是一些常见的数学公式(使用Markdown和LaTeX语法)。 神经网络的万能逼近定理(Universal Approximation Theorem)是关于在一定条件下神经网络能够逼近任意连续函数的定理。有多个版本的定理针

    2024年02月07日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包