右侧胸膜增厚是什么意思| 频发室性早搏是什么意思| 细菌感染有什么症状表现| 1999年出生属什么生肖| 氨酶偏高是什么意思| 12月23是什么星座| 怀孕是什么症状| 不加热血清反应素试验是什么| molly英文名什么意思| 3月11日什么星座| 天牛吃什么| 鱼和熊掌不可兼得什么意思| 肝胆湿热喝什么茶| 心慌是什么意思| 怀孕前有什么症状| 私募是什么意思| 摩拳擦掌是什么生肖| 越南用什么语言| 减肥晚餐吃什么| 靛青色是什么颜色| 舌苔黄腻厚是什么原因| 福寿螺为什么不能吃| 温暖的近义词是什么| 舌头发苦是什么原因造成的| 声援是什么意思| 女人的动物是什么生肖| 什么狗最聪明| 维生素b6是治什么的| 身上起红疹是什么原因| zfc是什么牌子| 当你从我眼前慢慢走过是什么歌| 金舆是什么意思| 萎缩性胃炎吃什么中成药| 喉咙痒咳嗽有痰是什么原因| 女孩子学什么专业比较好| 山东登州府现在叫什么| 梦见买苹果是什么征兆| 洋辣子蛰了用什么药| 为什么叫香港脚| 肚子左边是什么器官| 卢沟桥事变又称什么| 结婚24年是什么婚| 两个务必是什么| 咱家是什么意思| 冠心病喝什么茶最好| 水落石出是什么意思| 李字五行属什么| 月经量多是什么原因导致的| 头七需要做什么| 后背不舒服是什么原因| 地中海贫血是什么意思| 一直呕吐是什么原因| 姓什么的人最多| 胃火旺吃什么水果| yp是什么意思| 舌头不舒服挂什么科| 婴儿补钙什么牌子的好| 益生菌什么牌子的好| 梦见血是什么意思| sei是什么意思| 心电图能检查出什么| 生理期什么意思| 一个永一个日念什么| 电视开不了机是什么原因| 扁桃体1度肿大是什么意思| 什么湖什么海| 什么奶粉| 艾滋病是什么症状| 筷子什么材质最好| 2004年出生属什么| 什么的讲| 你是什么动物| prada什么牌子| 姐姐的孩子叫我什么| 市宣传部长是什么级别| 天妇罗是什么意思| 自然卷的头发适合什么发型| 个子矮吃什么才能长高| 面瘫是什么原因造成的| 羽毛球拍什么牌子好| 怀孕感冒可以吃什么药| 男人精液少是什么原因| 风肖是什么生肖| 良字少一点是什么字| 1月10号是什么星座| 家五行属什么| 三七粉是治什么病的| EPS什么意思| 牙冠是什么样子的图片| 八面玲珑什么意思| 为什么会真菌感染| 囊内可见卵黄囊是什么意思| 小腹胀痛男性什么原因| 小番茄有什么营养价值| 保险属于什么行业| 多吃蔬菜有什么好处| 为什么会长疣| 杏花什么时候开| 为什么叫汉族| 念珠菌感染用什么药效果好| 什么是认证| 平均红细胞体积偏低是什么意思| 女性什么时候绝经| 6d是什么意思| 重庆沱茶属于什么茶| asics是什么牌子| 什么器晚成| 吃蜂蜜不能吃什么食物| 屁股痛是什么原因| 糖尿病早期什么症状| 烤麸是什么做的| 喝蜂蜜水对身体有什么好处| 为什么发烧会觉得冷| 系统性红斑狼疮不能吃什么| dic是什么意思| 女人为什么会得霉菌| 丹参滴丸治什么病| 牛魔王是什么生肖| 吃什么对皮肤好| 毛周角化症用什么药膏| 子宫囊肿严重吗有什么危害| 手淫过多会导致什么| 个个想出头是什么生肖| 布朗是什么水果| 苍耳是什么| 世界上最大的蛇是什么蛇| 随访复查什么意思| 胃肠炎吃什么药| cr医学上是什么意思| 感冒吃什么水果比较好| 膝盖后面叫什么部位| 盆腔镜检查是查什么的| 日落西山是什么生肖| 肝喜欢什么食物有哪些| 浸润性是什么意思| 75岁属什么| 藏红花泡水喝有什么功效和作用| 9.21是什么星座| 什么是蛋白质| 肝虚吃什么中成药| 老人爱睡觉是什么原因| 如火如荼什么意思| 肉质瘤是什么东西| 多囊肾是什么病| 隐匿是什么意思| b型钠尿肽是什么意思| 肠鸣是什么原因引起的| 核磁共振挂什么科| 什么人适合学玄学| 玉竹长什么样子| warning是什么意思| 什么叫管状腺瘤| 睡眠不好去医院挂什么科| 什么叫牙冠| 孩子皮肤黑是什么原因| 95年属什么的生肖| wis是什么牌子| 铭五行属什么| kcl是什么药| 梦见自己洗头发是什么意思| 什么味道| 特需号是什么意思| 婴儿补钙什么牌子的好| 尿潴留是什么原因引起的| 亦什么意思| 90年出生属什么生肖| 今年54岁属什么生肖| 七月份适合种什么菜| 红色爱心是什么牌子| 鬼压床是什么原因造成的| 草单斤是什么字| 乙肝抗体是什么意思| 这个季节吃什么水果最好| 夏至该吃什么| 痔疮长什么样子| 什么的晚霞| 什么是规培生| 脑膜瘤钙化意味着什么| 做彩超为什么要憋尿| 什么的梅花| bb是什么意思| 吃西兰花有什么好处| 女人养颜抗衰老吃什么最好| 宜祭祀是什么意思| 寒衣节是什么意思| 骨质疏松吃什么药| 梦见孩子被蛇咬是什么意思| 甲减不能吃什么| 蚊子讨厌什么气味| 偷什么东西不犯法| 小白脸什么意思| 甲亢吃什么好的更快| 肾炎吃什么药好| 杨紫属什么生肖| 高密度脂蛋白胆固醇低是什么意思| 出处是什么意思| 粉皮是什么做的| 寒是什么生肖| 吃刺猬有什么好处| 7月1日是什么节| 吃小龙虾不能和什么一起吃| 鹅蛋脸适合什么样的发型| 剩女什么意思| ab型血和b型血的孩子是什么血型| 梦见生小孩是什么征兆| 柠檬和什么一起泡减肥| 甲状腺饱满是什么意思| 低血钾吃什么| 什么时候刮胡子最好| afp是什么意思| 珀莱雅属于什么档次| 发烧头疼吃什么药| 什么人不适合吃榴莲| 地漏什么牌子的好| 什么时候收花生| 舟可是什么字| 马齿苋不能和什么一起吃| 三岁打什么疫苗| 网飞是什么| 丙三醇是什么东西| 晚上九点是什么时辰| 子宫切除后对身体有什么影响| 什么叫肝功能不全| 男生下巴长痘痘是什么原因| 嘴下面起痘是什么原因| 阳痿早泄吃什么药| 人的本质属性是什么| 化痰祛痰吃什么药| 心理学属于什么学科| 黄盖代表什么生肖| 有什么好听的网名| 可可粉是什么东西| 男士长脸适合什么发型| 中耳炎不能吃什么食物| 同房出血是什么原因| 黄精药材有什么功效| 梦见抓蛇是什么预兆| 梦见好多猪是什么意思| 甲状腺2类是什么意思| ca125是查什么的| 什么叫内痔什么叫外痔| 吃什么会食物中毒| 茶氨酸是什么| 处暑的处是什么意思| 肌酐为什么会升高| 不可开交是什么意思| 口腔溃疡是缺什么维生素| 屎是什么味道| c3c4补体是什么意思| 王的五行属性是什么| x光是什么| 骨密度低吃什么药最快| store是什么| blm是什么意思| 天蝎女喜欢什么样的男生| 什么是全麦面包| 晚上做噩梦是什么原因| 枕戈待旦什么意思| 睾丸肿大是什么原因| 口腔溃疡是什么引起的| 拔牙吃什么消炎药| z什么意思| 空腹吃西红柿有什么危害| 胃食管反流病是什么原因造成的| 百度

90多名艺术学院师生前往将乐良地写生,体验古村春...

百度 另据《北京日报》报道,北京市规划国土委发布《建设项目规划使用性质正面和负面清单》,四环路以内和中轴线延长线、长安街延长线这“两轴”周边,将限制各类用地调整性质改建住宅商品房。

概述

Lean证明是指在Lean环境中,通过编写代码来构造和验证数学定理的过程。Lean使用一种称为依赖类型理论的数学基础,这使得它能够表达复杂的数学概念,并确保证明的正确性。

依赖类型: Lean 所依据的依赖类型论对简单类型论的其中一项升级是,类型本身(如 Nat 和 Bool 这些东西)也是对象,因此也具有类型。简单地说,类型可以依赖于参数。你已经看到了一个很好的例子:类型List α 依赖于参数 α,而这种依赖性是区分 List Nat 和 List Bool 的关键。

Lean4 定理证明初探

Lean的核心思想是将数学证明转化为计算机可以理解和验证的形式化证明。

Lean 证明的基本结构

  • 定义:定义数学对象或概念。
  • 定理声明:声明要证明的定理。
  • 证明构造:通过一系列步骤构造证明。

示例:证明 1 + 1 = 2

-- 定义加法
def add : Nat → Nat → Nat
  | Nat.zero, n => n
  | Nat.succ m, n => Nat.succ (add m n)

-- 定理声明, 定理的声明通常使用 theorem 关键字
theorem one_plus_one_eq_two : add (Nat.succ Nat.zero) (Nat.succ Nat.zero) = Nat.succ (Nat.succ Nat.zero) :=
  -- 证明构造
  rfl

我们首先定义了自然数 Nat 加法函数 add。然后,我们声明了一个定理 one_plus_one_eq_two(类型是 Prop),并使用 rfl(自反性)来证明它。

备注:rfl 是 Lean 中的一个内置策略,用于证明两个表达式在定义上相等。

自反性:定义来自集合A的元素x、y的 “关系” 如下:令C={(x,y)|x、y属于A},设D是C的某非空子集,如果(x,y)属于D,则称x,y有(由D规定的)关系,记为x ~ y。(符号(,)表示两者组成的有序对)。如果(x,x)属于D总成立,则称那个由D规定的关系具有自反性。

示例:证明 2 * (x + y) = 2 * x + 2 * y

section
variable (x y : Nat)

def double := x + x

#check double y
#check double (2 * x)

attribute [local simp] Nat.add_assoc Nat.add_comm Nat.add_left_comm

-- 证明: 2 * (x + y) = 2 * x + 2 * y
theorem t1 : double (x + y) = double x + double y := by
  simp [double]

#check t1 y
#check t1 (2 * x)

-- 证明: 2 * (x * y) = 2 * x * y 
theorem t2 : double (x * y) = double x * y:= by
  simp [double, Nat.add_mul]

end

by 表示采用策略编写证明,simp 策略,即「化简(Simplify)」的缩写,是 Lean 证明的主力。

在这里插入图片描述

Lean4 定理证明基础

命题与定理

命题(Proposition)

命题(Proposition) 是一个可以被判断为真或假的陈述。例如,“2 + 2 = 4”是一个命题,因为它可以被明确地判断为真。在Lean中,命题通常表示为类型为 Prop 的表达式

-- Implies p q  蕴含概念 等价于 p → q
def Implies (p q : Prop) : Prop := p → q

#check And     -- And (a b : Prop) : Prop
#check Or      -- Or (a b : Prop) : Prop
#check Not     -- Not (a : Prop) : Prop
#check Implies

variable (p q r : Prop)
#check And p q                      -- Prop
#check Or (And p q) r               -- Prop
#check Implies (And p q) (And q p)  -- Prop

-- 引入一个结构体 Proof,包含一个 proof 的证明(类型是 p)
structure Proof (p : Prop) : Type where
  proof : p

#check Proof

-- axiom: 公理
axiom andcomm (p q : Prop) : Proof (Implies (And p q) (And q p))

variable (p q : Prop)
#check andcomm p q     -- Proof (Implies (p ∧ q) (q ∧ p))


-- 公理:如果能证明 Implies p q 和 p,则能证明 q。
axiom modus_ponens : (p q : Prop) → Proof (Implies p q) → Proof p → Proof q

-- 公理:当假设 p 成立时,如果我们能证明 q. 则我们能证明 Implies p q.
axiom implies_intro : (p q : Prop) → (Proof p → Proof q) → Proof (Implies p q)

在 Lean 中,命题即是类型

定义一个命题 is_even 表示 n 是否为偶数:

def is_even (n : Nat) : Prop := n % 2 = 0

使用 def 关键字来定义一个命题 is_even ,它接受一个自然数 n 并返回一个 Prop 类型的值,表示 n 是否为偶数。

定义一个命题 is_prime,表示一个数是否为素数

def is_prime (n : Nat) : Prop :=
  n > 1 ∧ ? m : Nat, m ∣ n → m = 1 ∨ m = n

-- m∣n: 表示存在一些 c,使得 n = m * c。

这个命题表示 n 大于1,并且对于所有能整除 n 的数 m,m 要么是1,要么是 n 本身。

? 是一个表示“全称量词”的符号,读作“对于所有”或“任意”。它用于表示某个命题对指定范围内的所有元素都成立。例如,当我们说“?x”,意味着对于所有的x,后面的表达式都是成立的。

? {p q : Prop}, p → q → p。我们可以把它理解为「对于每一对命题 p q,我们都有 p → q → p」

有两种将命题作为类型来思考的方法

  • 构造角度:命题 p 代表了一种数据类型,即构成证明的数据类型的说明。p 的证明就是正确类型的对象 t : p。
  • 非构造角度:对于每个命题p,我们关联一个类型,如果 p 为假,则该类型为空,如果 p 为真,则有且只有一个元素,比如 *,也可以说(与之相关的类型)p 被占据(inhabited)。t : p 告诉我们 p 确实是正确的。你可以把 p 的占据者想象成「p 为真」的事实。对 p → q 的证明使用「p 是真的」这个事实来得到「q 是真的」这个事实。

如果 p : Prop 是任何命题,Lean 将 t1 t2 : p 看作定义相等,它们除了 p 是真的这一事实之外,没有其他信息。

定理(Theorem)

定理(Theorem) 是一个已经被证明为真的命题。
在Lean中,定理是通过构造一个证明来定义的。定理的证明是一个类型为命题的函数,它展示了命题为真的证据。

variable {p : Prop}
variable {q : Prop}

-- 对 p → q → p 的证明,假设 p 和 q 为真,并使用第一个假设(平凡地)建立结论 p 为真
-- hp : p 读作 hp  是 p 的证明
theorem t1 : p → q → p := fun hp : p => fun hq : q => hp

theorem t2 (hp: p) (hq : q) :p := hp

-- 定义一个定理 t1,对于命题 p和 q,可通过 `fun {p q} hp hq => hp` 证明 `p → q → p` 命题是成立的
#print t1 -- theorem t1 : ? {p q : Prop}, p → q → p := fun {p q} hp hq => hp

-- show 语句明确指定最后一个项 hp 的类型
theorem t3 : p → q → p :=
  fun hp : p =>
  fun hq : q =>
  show p from hp

axiom 声明一个公理

variable {p : Prop}
variable {q : Prop}

-- t1: p → q → p
theorem t1 (hp : p) (hq : q) : p := hp
 
-- 声明「公理」hp : p 等同于声明 p 为真
axiom hp : p

-- 应用定理 t1 : p → q → p 到事实 hp : p(也就是 p 为真)得到定理 t1 hp : q → p。
theorem t2 : q → p := t1 hp

example 命令声明了一个没有名字也不会永久保存的定理。本质上,它只是检查给定项是否具有指定的类型。

variable (p q : Prop)

-- 表达式And.intro h1 h2 是 p ∧ q 的证明
example (hp : p) (hq : q) : p ∧ q := And.intro hp hq
example (h : p ∧ q) : p := And.left h
example (h : p ∧ q) : q := And.right h

sorry 命令声明一个缺失证明的临时占位符(Lean会警告)用于保持语法结构正确。

variable (p q r : Prop)

--  ∧ 和 ∨ 的交换律
example : p ∧ q ? q ∧ p := sorry
example : p ∨ q ? q ∨ p := sorry

组合命题

variable (p q r s : Prop)

theorem t2 (h? : q → r) (h? : p → q) : p → r :=
  fun h? : p =>
  show r from h? (h? h?)

have 关键字用于引入一个新的局部假设或结论。使用 have 可以在证明中声明一个中间步骤,这个步骤可以在后续的证明中被引用。

variable (p q : Prop)

example (h : p ∧ q) : q ∧ p :=
  have hp : p := h.left
  have hq : q := h.right
  show q ∧ p from And.intro hq hp

-- suffices: 足以说明某某
example (h : p ∧ q) : q ∧ p :=
  have hp : p := h.left
  suffices hq : q from And.intro hq hp
  show q from And.right h

费马大定理:当整数n>2时,不存在三个正整数x、y、z满足方程x?+y?=z?

-- 声明一个命题
def FermatLastTheorem :=
  ? x y z n : Nat, n > 2 ∧ x * y * z ≠ 0 → x ^ n + y ^ n ≠ z ^ n

-- 未证明的定理:构造一个 叫 hard 的 FermatLastTheorem  类型的定理,但未给出证明(使用 sorry 是作弊)
theorem hard : FermatLastTheorem :=
  sorry

#check hard

费马大定理 (Fermat’s Last Theorem)是数学史上的著名未解问题,由法国数学家 皮埃尔·德·费马 (Pierre de Fermat)于1637年提出。
该命题长期困扰数学家,直至1994年由英国数学家 安德鲁·怀尔斯 (Andrew Wiles)通过 椭圆曲线 和 模形式 等现代数学工具完成严格证明。 ?
怀尔斯的证明融合了 伽罗瓦理论 、 代数几何 等多个数学分支的理论,最终确认当n>2时,上述方程无正整数解。这一证明被视为现代数学发展的重要里程碑

量词

全称量词 ? x : α, p x 表示,对于每一个 x : αp x 成立(p x 表示断言 p 在 x 上成立。)。

对于 p : α → Prop,给定 x : αp x 表示断言 p 在 x 上成立。

对于 r : α → α → Prop ,给定 x y : αr x y 表示断言 x 与 y 相关。

计算式证明
个计算式证明是指一串使用诸如等式的 传递性等基本规则 得到的中间结果。计算式证明从关键字 calc 开始,语法如下:

-- 每个 <proof>_i 是 <expr>_{i-1} op_i <expr>_i 的证明
calc
  <expr>_0  'op_1'  <expr>_1  ':='  <proof>_1
  '_'       'op_2'  <expr>_2  ':='  <proof>_2
  ...
  '_'       'op_n'  <expr>_n  ':='  <proof>_n

variable (a b c d e : Nat)

theorem T
    (h1 : a = b)
    (h2 : b = c + 1)
    (h3 : c = d)
    (h4 : e = 1 + d) :
    a = e :=
  calc
    a = b      := h1
    _ = c + 1  := h2
    _ = d + 1  := congrArg Nat.succ h3
    _ = 1 + d  := Nat.add_comm d 1
    _ = e      := Eq.symm h4

-- T 等价于 T2
theorem T2
    (h1 : a = b)
    (h2 : b = c + 1)
    (h3 : c = d)
    (h4 : e = 1 + d) :
    a = e :=
  calc
    a = b      := h1
    b = c + 1  := h2
    c + 1 = d + 1  := congrArg Nat.succ h3
    d + 1 = 1 + d  := Nat.add_comm d 1
    1 + d = e      := Eq.symm h4

下划线 _ 作为占位符,告诉 Lean 该参数是隐式的,应该自动填充。

策略

构建证明的方法有两种

  • 「项式」(term-style)证明
  • 「策略式」(tactic-style)证明

我们将把由策略序列组成的证明描述为 「策略式」(tactic-style)证明,前面的证明我们称为 「项式」(term-style)证明,每种风格都有自己的优点和缺点。例如,项式证明可能更难读,因为它们要求读者预测或猜测每条指令的结果。但它们一般更短,更容易写。此外,策略提供了一个使用 Lean 自动化的途径,因为自动化程序本身就是策略。

策略(Tactic),证明通常使用策略(Tactic)来编写,而非直接提供证据。策略是为命题构建证据的小程序。

要使用策略编写证明,请以 by 开始定义。编写 by 会将 Lean 置于策略模式,直到下一个缩进块的末尾。

theorem onePlusOneIsTwo : 1 + 1 = 2 := by
  simp

simp 策略,即「化简(Simplify)」的缩写,是 Lean 证明的主力。它将目标重写为尽可能简单的形式,处理足够小的证明部分。特别是,它用于证明简单的相等陈述。

theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by
  apply And.intro
  exact hp
  apply And.intro
  exact hq
  exact hp

apply 策略应用于一个表达式,被视为表示一个有零或多个参数的函数。
在上面的例子中,命令 apply And.intro 产生了两个子目标:

    case left
    p q : Prop
    hp : p
    hq : q
    ? p

    case right
    p q : Prop
    hp : p
    hq : q
    ? q ∧ p

第一个目标是通过 exact hp 命令来实现的。exact 命令只是 apply 的一个变体,它表示所给的表达式应该准确地填充目标。

Lean 提供了重写策略 rw,用于将目标中的右侧替换标识的左侧。

  • 定理 mul_assoc a b c 表示恒等式 a * b * c = a * (b * c)
  • 定理 mul_comm a b 表示恒等式 a * b = b * a
  • 定理 two_mul a 表示恒等式 2 * a = a + a
  • 定理 add_mulmul_add 表示乘法与加法的分布性
  • 定理 add_assoc 表示加法的结合性。

使用 import Mathlib.Data.Real.BasicMathlib 导入实数定理

-- 从 Mathlib 导入实数定理
import Mathlib.Data.Real.Basic

variable (a b c : Nat)

#check mul_add a b c         -- mul_add a b c : a * (b + c) = a * b + a * c
#check add_mul a b c         -- add_mul a b c : (a + b) * c = a * c + b * c
#check add_assoc a b c       -- add_assoc a b c : a + b + c = a + (b + c)
#check add_assoc (a * a)     -- add_assoc (a * a) : ? (b c : ?), a * a + b + c = a * a + (b + c)
#check mul_comm a b          -- mul_comm a b : a * b = b * a
#check two_mul a             -- two_mul a : 2 * a = a + a

example : (a + b) * (a + b) = a * a + 2 * (a * b) + b * b := by
  rw [mul_add, add_mul, add_mul]
  -- 左箭头表示反转, rw [← add_assoc] 将 n + m + k = n + (m + k) 替换为 n + (m + k) = n + m + k
  rw [← add_assoc, add_assoc (a * a)]
  rw [mul_comm b a, ← two_mul]

-- 证明过程说明
-- mul_add: (a + b) * (a + b) => (a + b) * a + (a + b) * b
-- add_mul: (a + b) * a => a * a + b * a
-- add_mul: (a + b) * b => a * b + b * b
-- rw [mul_add, add_mul, add_mul] => a * a + b * a + (a * b + b * b)

-- ← add_assoc: a * a + b * a + (a * b + b * b) => a * a + b * a + a * b + b * b
-- add_assoc (a * a): a * a + b * a + a * b => a * a + (b * a + a * b)
-- rw [mul_comm b a, ← two_mul] => a * a + (b * a + a * b) + b * b

-- mul_comm b a: b * a => a * b
-- ← two_mul: a * b + a * b => 2 * (a * b)
-- rw [mul_comm b a, ← two_mul] => a * a + 2 * (a * b) + b * b
 

同时也可以使用 Nat 命名空间的实数定理

section
variable (a b c : Nat)

#check Nat.mul_comm a b     -- Nat.mul_comm a b : a * b = b * a
#check Nat.mul_comm         -- Nat.mul_comm a : ? (m : Nat), a * m = m * a
#check Nat.mul_comm         -- Nat.mul_comm (n m : Nat) : n * m = m * n
#check (Nat.mul_comm a b : a * b = b * a)  -- Nat.mul_comm a b : a * b = b * a

#check Nat.mul_assoc c a b  -- Nat.mul_assoc c a b : c * a * b = c * (a * b)
#check (Nat.mul_assoc a b c)  -- Nat.mul_assoc a b c : a * b * c = a * (b * c)

#check Nat.two_mul a        -- Nat.two_mul a : 2 * a = a + a
#check Nat.add_mul          -- Nat.add_mul (n m k : Nat) : (n + m) * k = n * k + m * k
#check Nat.mul_add          -- Nat.mul_add (n m k : Nat) : n * (m + k) = n * m + n * k
#check Nat.add_assoc        -- Nat.add_assoc (n m k : Nat) : n + m + k = n + (m + k)

end

example (a b c : Nat) : a * b * c = b * (a * c) := by
  rw [Nat.mul_comm a b]
  rw [Nat.mul_assoc b a c]


example (a b c : Nat) : a * b * c = b * c * a := by
  rw [Nat.mul_assoc]
  rw [Nat.mul_comm]


example : (a + b) * (a + b) = a * a + 2 * (a * b) + b * b := by
  rw [Nat.mul_add, Nat.add_mul, Nat.add_mul]
  -- 左箭头表示反转, rw [← Nat.add_assoc] 将 n + m + k = n + (m + k) 替换为 n + (m + k) = n + m + k
  rw [← Nat.add_assoc, Nat.add_assoc (a * a)]
  rw [Nat.mul_comm b a, ← Nat.two_mul]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pushiqiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
宝宝头发黄是缺什么 扁平足是什么样子图片 什么的高山 儿童吃什么长个子最快 过劳肥是什么意思
什么叫便溏 特点是什么意思 做包皮挂什么科 吃维e有什么好处和副作用 鸡蛋和什么食物相克
高处不胜寒什么意思 guava是什么水果 霉菌性阴道炎用什么药好 慢性咽炎吃什么 龙的幸运色是什么颜色
cin3是什么意思 dave是什么意思 老虎菜为什么叫老虎菜 肾素活性高是什么原因 丁胺卡那又叫什么药名
pr是什么hcv7jop6ns0r.cn hpv和tct有什么区别hcv8jop7ns7r.cn 拔萝卜什么意思hcv8jop5ns8r.cn 波尔多红是什么颜色hcv8jop8ns0r.cn 皮肤镜能检查出什么hcv9jop7ns1r.cn
空气是由什么组成的hcv8jop5ns9r.cn 梦见生了个儿子是什么意思hcv9jop6ns6r.cn 倒三角是什么意思hcv9jop3ns8r.cn 牡丹和芍药有什么区别hcv8jop5ns2r.cn 苹果越狱是什么意思啊aiwuzhiyu.com
对猫过敏有什么症状hcv8jop3ns4r.cn 全科是什么科hcv9jop2ns3r.cn 什么的香蕉0735v.com 肝胆湿热喝什么茶hcv8jop4ns1r.cn 肿瘤挂什么科hcv8jop4ns3r.cn
头发热是什么原因imcecn.com ccs医学是什么意思bysq.com 股癣用什么药最好hcv8jop8ns2r.cn 世交是什么意思hcv9jop7ns5r.cn 一建什么时候报名hcv7jop6ns8r.cn
百度