├── Makefile ├── PL-and-universal-algebra.pdf ├── PL-and-universal-algebra.typ └── README.md /Makefile: -------------------------------------------------------------------------------- 1 | # The wildcard function is used to make a list of all .typ files 2 | TYP_FILES = $(wildcard *.typ) 3 | 4 | # This rule says that .typ files are created from .typ files 5 | all: $(TYP_FILES:%.typ=%.pdf) 6 | 7 | # This is a pattern rule 8 | %.pdf : %.typ 9 | typst compile $< 10 | 11 | # This rule will clean up all the applied files 12 | clean: 13 | rm -f *.pdf 14 | 15 | # This rule will help to recompile everything 16 | recompile: clean all 17 | 18 | .PHONY: all clean recompile -------------------------------------------------------------------------------- /PL-and-universal-algebra.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PhotonQuantum/baka-notes/2b209665f79ea0b8f144f3a0cb48c6d1f8d2014c/PL-and-universal-algebra.pdf -------------------------------------------------------------------------------- /PL-and-universal-algebra.typ: -------------------------------------------------------------------------------- 1 | #set text(font: ("Palatino", "Songti SC"), lang: "zh", region: "cn") 2 | #set enum(numbering: "1.a.i.") 3 | #show strong: underline 4 | 5 | #align( 6 | center, 7 | [ 8 | #text(17pt)[笨蛋读书笔记] \ 9 | #text(12pt)[代数与 PL 与 PL 之恋#footnote[#link("https://guest0x0.xyz/PL-and-universal-algebra/PL-and-universal-algebra.pdf")]]], 10 | ) 11 | 12 | = 什么是代数? 13 | == 代数结构 (Algebraic Structure,有时被称为 Algebra) 14 | 代数结构: 长得像 (集合 $G$ $times$ #text(blue)[一组有限个集合上封闭的有限操作数#footnote[似乎有的时候不要求?]运算] $times$ #text(blue)[一组有限个的公理]) 的东西。 15 | 16 | 它其实是类似 ${G: "Set" | {... "ops": (G^N -> G) | ... "axioms": "equation on G and ops" }}$ 的依值积类型 (dependent product type)。 17 | 18 | 注意到#text(blue)[蓝色]的部分及 ... 符号,这些操作都是由*元理论*展开的,而不包含在代数结构定义里。 19 | 20 | #strike[或者可以说是在定义一个 Set of $(\_ times \_ times \_)$? 所以它势必是在描述一堆挂着封闭运算和公理的特殊集合#footnote[这里面有 Set of Set 的问题所以显然不太对,我不知道该如何正确形式化但是这里我采用朴素集合论的直觉如此感性地理解]#footnote[qlbf: 存在一个神秘的集合论问题,关键词“本质小” i.e. 等价于某个小的东西但却处于一个更高的宇宙]。] 21 | 22 | === 例子:Group Algebra 23 | 所有满足以下要求的(集合 $G$ $times$ 集合上封闭的运算 $dot$)的组合称为 Group Algebra: 24 | + 基集合 $G$ 25 | + 运算 26 | + $dot: G -> G -> G$ 27 | + $e: G$ 28 | + $minus: G -> G$ 29 | + 满足以下公理: 30 | + 单位元: $forall a in G, e dot a = a dot e = a$ 31 | + 逆元: $forall a in G, a dot -b = b dot -a = e$ 32 | + 结合律: $forall a b c in G, (a dot b) dot c = a dot (b dot c)$ 33 | 34 | 用以下伪 Coq 代码来解释: 35 | 36 | ```ml 37 | Definition group: Type := { A: Type & 38 | { ∙: A → A → A & 39 | { id: A & 40 | { -: A → A & 41 | { law_assoc: ∀ a b c, a ∙ (b ∙ c) = (a ∙ b) ∙ c & 42 | { law_id: ∀ a, a ∙ id = a ∧ id ∙ a = a & 43 | (* law_inv: *) ∀ a, a ∙ -a = id ∧ -a ∙ a = id 44 | } } } } } }. 45 | ``` 46 | 47 | 或者,我们采用一个更直观的定义,让 group 通过它的基集合和运算索引 48 | #footnote[qlbf: 这可以自动化互转,参见 Arend 文档里的 anonymous extension 和 cooltt 的 extension type] 49 | : 50 | 51 | ```ml 52 | Definition group (A: Set) (∙: A → A → A), (id: A), (inv: A → A): Type := 53 | { law_assoc: ∀ a b c, a ∙ (b ∙ c) = (a ∙ b) ∙ c & 54 | { law_id: ∀ a, a ∙ id = a ∧ id ∙ a = a & 55 | (* law_inv: *) ∀ a, a ∙ -a = id ∧ -a ∙ a = id }}. 56 | ``` 57 | 58 | 然后举一个一个 Group Algebra 的实例的显然例子:(整数, 加法) 群 59 | ```ml 60 | Lemma Z_plus_group: group Z +%Z 0%Z -%Z. 61 | Proof. 62 | exists Z.add_assoc. exists Z.add_id. exact Z.add_inv. 63 | Defined. 64 | ``` 65 | 66 | 可见不是所有类型(加上一些操作)都可以满足某个特定代数结构的要求。特定代数结构其实是一种对类型的约束。 67 | 68 | 自然地,Abstract Data Type 是一种约束类型的方法,它显然可以用来定义特定代数结构(类型满足 Abstract Data Type 约束 $<-->$ 集合满足特定代数结构约束)。由于工程语言表达能力不足,它无法定义等式#footnote[Coq 应该行,但是我懒得写 `x.x`]。 69 | 游客账户在原文中也提到了一个例子:Module Type。 70 | 71 | ```ml 72 | module type Group = sig 73 | type G 74 | val comp: G → G → G 75 | val id: G 76 | val inv: G → G 77 | end 78 | module Z_plus: Group = struct 79 | type G = Z 80 | let comp = Z.add 81 | let id = Z.zero 82 | let inv = Z.opp 83 | end 84 | ``` 85 | 86 | == 泛代数 (Universal Algebra) 87 | 88 | 泛代数*不是*一种代数结构,也不研究特定的代数结构,而是研究所有代数结构的领域。换句话说,它开始考虑上述所称的*元理论*的部分,因此开始研究如何操纵代数结构,例如定义代数结构间的态射,同态等。 89 | 90 | TODO: 我不知道怎么在 Coq 里 formalize universal algebra,问题点在于如何 formalize variadic dependent product type。或许其实也不需要 formalize,只要意识到元理论和理论的关联我觉得我就能想明白了。 91 | 92 | = 代数同态 93 | 94 | TODO -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 笨蛋读书笔记 2 | 3 | 本猪几乎无数学背景出身,对数学的理解仅限于 ε-δ,虽然知道公理化集合论但是只有朴素集合论的直觉,逻辑只了解结构直觉逻辑,其他领域一无所知,甚至没有系统地学习过代数,更妄论拓扑和范畴。 4 | 在日常生活及和 qlbf 的交流中,我深感自己的弱小,所以决定一点点把一些 PLT 概念学起来,以期日后能有助于自己的科研工作。 5 | 6 | 我姑且做过两年的形式化验证工作,对类型论的概念理解非常粗浅,可以认为有一些工作者的直觉。我想通过这种直觉来切入相关概念。 7 | 8 | 本仓库是我的读书随记。以前我就有尝试过阅读一些科普文章及课本,但是我发现一旦我没有及时把想法记下来,很多东西我会很快地忘掉。所以我打算尝试把我想的东西有一定组织性地记录下来,以便日后翻阅,也希望能被他人指正。 --------------------------------------------------------------------------------