Vertin - Misaka Foundation
type: channel
link: https://misaka-yu.com/
description: Your description here.
items: Lean!
items: Mathematica!
items: LaTeX示例
items: 这一次遇见你 1
items: 上一次遇见你 2
items: 上一次遇见你 1
items: 欢迎使用 Typecho

Lean!
type: item
date: 2025-03-09T23:21:00+08:00
description: 记录一道Lean练习题，主要涉及$p$-adic的东西。通过这题主要是学一下无穷乘积（tprod），Finset的attach和map。[alert type="blue"]题面：$\text{Let }0 \neq x \in \mathbb{Q}.\text{ Show that }|x| \cdot \prod_{p \text { prime }}|x|_{p}=1.$[/alert]数学背景先说一下$\mathbb{Q}$上的$p$-adic Norm的定义：给定一个有理数$x$和素数$p$，我们总可以把$x$写成$p^k \cdot \frac{m}{n}$，使得$k$为整数并且$m$和$n$都是不能再被$p$整除的整数（就是把$x$里面的$p$提干净），然后我们就把$x$的$p$进范数$|x|_p$定义为$p^{-k}$。特殊地，我们一般令$|0|_p = 0$。与实数中“距离原点越远数值越大”不同，$p$进范数衡量的是数被$p$整除的“次数”。$x$被$p$整除的次数越多（就是$k$越大），$|x|_p$就越小。很明显$|x|_p$总是等于$|-x|_p$，所以我们总是考虑正的$x$（或者说$|x|$）。对这题，我们可以先把$|x|$写成$\frac{m}{n}$，然后对$m$和$n$分别做素因数分解得到$$ |x|=\frac{m}{n}=\frac{\prod_i p_i^{a_i}}{\prod_i p_i^{b_i}} = \prod_i p_i^{a_i - b_1} $$$\{p_i\}$是$m$和$n$的素因子之集的并集。因此，$$ |x|_{p_i} = p_i^{- a_i + b_i} $$而对于不属于$\{p_i\}$的素数$r$（也就是和$m$和$n$都互质的），$|x|_r = 1$。所以，$$ \prod_{p \text { prime }}|x|_{p} = \prod_{i} |x|_{p_i} \\ = \prod_i p_i^{- a_i + b_i} = \frac{\prod_i p_i^{b_i}}{\prod_i p_i^{a_i}} = \frac{n}{m} = |x|^{-1} $$这样就证完了。Lean准备有理数variable (x : ℚ) #check x.den --分母，ℕ #check x.num --分子，ℤ #check x.num.natAbs --分子绝对值，ℕ素数variable (p : ℕ) #check p.Prime -- p是素数，Prop -- The type of prime numbers def Primes := { p : ℕ // p.Prime } deriving DecidableEq -- `primesBelow n` is the set of primes less than `n` as a `Finset`. def primesBelow (n : ℕ) : Finset ℕ := (Finset.range n).filter (fun p ↦ p.Prime) #check Nat.Prime #check Nat.Primes #check Nat.primesBelow #check Nat.prod_pow_prime_padicValNat -- 素因数分解，分解成p ^ padicValNat p n的乘积 #check Finset.mem_filter -- 用来取出上面filter的性质（p.Prime） #check Finset.mem_range -- 用来取出p < np-adic-- If `q ≠ 0`, the `p`-adic norm of a rational `q` is `p ^ (-padicValRat p q)`. -- If `q = 0`, the `p`-adic norm of `q` is `0`. def padicNorm (p : ℕ) (q : ℚ) : ℚ := if q = 0 then 0 else (p : ℚ) ^ (-padicValRat p q) --`padicValRat` defines the valuation of a rational `q` to be the valuation of `q.num` minus the -- valuation of `q.den`. If `q = 0` or `p = 1`, then `padicValRat p q` defaults to `0`. def padicValRat (p : ℕ) (q : ℚ) : ℤ := padicValInt…

Mathematica!
type: item
date: 2024-11-25T13:02:00+08:00
description: 写两个东西，一是Mathematica的字符串差异分析，二是批处理。后面还有一个比较长的Mathematica文本库构建和管理打算单独写一篇。字符串差异分析问题的背景是，前两天给网站加了APlayer，然后APlayer的字体和颜色和主题很不搭，所以想改一下APlayer.min.css。改完之后想确认一下改了哪些部分，因为APlayer.min.css整个文件所有内容都在一行里，所以用WinMerge和Git都不太顺手。因此想着用Mathematica写一个能做字符串比较的东西。先把两个CSS文件作为文本（Text）导入进来i = Import[file, "Text"]; j = Import[file, "Text"];然后用内建的SequenceAlignment比较差异d = SequenceAlignment[i, j, Method -> "Local"];SequenceAlignment的作用是In[1] := SequenceAlignment["abcXXabcXabc", "abcabcYYYabc"] Out[1] := {"abc", {"XX", ""}, "abc", {"X", "YYY"}, "abc"} In[2] := SequenceAlignment["abcXXabcXabc", "abcabcYYYabc", Method -> "Local"] Out[2] := {{"abcXX", ""}, "abc", {"X", ""}, "abc", {"", "YYYabc"}}这个结果的解读方式是{"abc", {"XX", ""}, "abc", {"X", "YYY"}, "abc"} ↑ ↑ ↑ ↑ ↑ <-第一个文本 ↑ ↑ ↑ ↑ ↑ <-第二个文本 {{"abcXX", ""}, "abc", {"X", ""}, "abc", {"", "YYYabc"}} ↑ ↑ ↑ ↑ ↑ <-第一个文本 ↑ ↑ ↑ ↑ ↑ <-第二个文本Method -> "Local"感觉就是让结果的“块”更整体一点。当然这种括号嵌套的结果表示方式非常难阅读，特别是文本很长的时候，所以我们可以给差异内容染色，使用coloredDiff = Style[#, Piecewise[{{FontColor -> Red, Length@# != 0}}, FontColor -> Black]] & /@ d;这里我们利用差异项都是长度为2的列表（比如之前的{"X", ""}），而一样的项都是长度为0的列表（比如"abc"）。因此我们定义一个分段函数，它在列表长度不为0时取FontColor -> Red，为0时取FontColor -> Black，然后把这个Style连同分段函数逐项作用于结果列表上。效果如下这样就可以看到，我改了字体和背景颜色，然后把border-bottom删掉了之类的。批处理（以批量格式转换为例）这个问题的背景是，想要把图片批量转成webp来缩小网页体积。首先我们用SetDirectory["path"]设定当前工作目录，这样可以免去每次都要输路径的麻烦，然后使用imageList = Select[FileNames[], MemberQ[{"jpg", "png"}, FileExtension[#]] &];来读取所有扩展名为jpg和png的文件，FileNames[]会返回当前目录下所有文件文件名的列表，然后Select在这个列表里选出所有FileExtension含在{"jpg", "png"}中的文件构成的子列。接下来对于得到的子列中的每个文件有process = Function[path, Export[FileBaseName[path] <> ".webp", Import@path, CompressionLevel -> 0.5]; DeleteFile[path]];其中我们用FileBaseName取出不带扩展名的文件名，然后添加扩展名".webp"，这样就得到了输出的文件名。我们用Import导入对应的图片文件，然后CompressionLevel对它进行压缩，这个得到的结果被当作Export的输入，并被输入到前面的输出文件名中。接着DeleteFile删除原始文件。最后我们只需要运行就可以了。Parallelize[process /@ imageList];

Mathematica!
type: item
date: 2024-11-18T19:33:00+08:00
description: $\nwarrow$ 左上角那条分割线的Mathematica处理原本的图片是这个样子的如果把黑色背景去掉至透明然后直接用的话，暗色模式是可以的，亮色模式下因为图形是白的就会看不见。于是想做一个轮廓勾勒，这样暗色亮色就都能看到了。用Mathematica的Binarize首先进行二值化得到更锐利的图片方便后面操作之后用Dilation把线条做粗一点，如果不这样的话待会勾勒完在暗色模式下线条末端会消失在背景中然后EdgeDetect得到边框的轮廓，并再次Dilation调整线条为了使轮廓在暗色的时候完美融入背景，我们要先反色，然后修改边框的颜色为背景色RGB(29,31,32)o = Image[ Replace[ImageData[e], {1 -> {29/255, 31/255, 32/255}, 0 -> {1, 1, 1}}, {2}], ColorSpace -> "RGB"];这里我们读取每个像素的颜色，如果是1（白色）就换成背景色，是0（黑色）就换成白色，这一规则应用是在第二层进行的。其中e是之前得到的轮廓图。这时再去掉白色背景就行了（￣︶￣）↗ 接下来我们还可以通过p = {#2, -#1} & @@@ Position[ImageData[Thinning @ image], 1, {2}]; ListPlot[p, AspectRatio -> Automatic, Axes -> False]来得到在图3中颜色值为1（即白色）的点的坐标，这样可以完成在图像边缘取点的任务。

Lean!
type: item
date: 2024-11-08T16:08:00+08:00
description: [alert type="blue"]Try it out on: https://live.lean-lang.org/[/alert]$$ \text{If }P\text{ is a finite simple }p\text{-group, show that }P\text{ has order }p. $$Formalizing the Statementimport Mathlib open Subgroup in example {p : ℕ} {P : Type u_1} [Group P] (hP : IsPGroup p P) [hp : Fact (Nat.Prime p)] [Finite P] [IsSimpleGroup P]: Nat.card P = p := by sorryStep-by-Step SolutionThe center of $P$ must be nontrivial since it is a $p$-group.have center_nontriv := hP.center_nontrivialSince $P$ is simple, its center (which is a normal subgroup) must be either trivial or $P$ itself.have center_bot_top := (center P).normal_of_characteristic.eq_bot_or_eq_topThe center is not trivial, therefore it is $P$ itself.have center_not_bot := (center P).nontrivial_iff_ne_bot.mp center_nontriv replace center_bot_top := center_bot_top.resolve_left center_not_botWhich means that $P$ should be abelian.letI : CommGroup P := Group.commGroupOfCenterEqTop center_bot_topOf course $P$ is nontrivial since its center is nontrivial.letI : Nontrivial P := Set.nontrivial_of_nontrivial_coe center_nontrivAnd the cardinality of $P$ should be divisible by $p$ since $P$ has cardinality $p^n$ for some $n$ and $n \neq 0$ for: $P$ is nontrivial, and nontrivial implies a cardinality strictly greater than 1.letI : Fintype P := Fintype.ofFinite P have : p ∣ Fintype.card P := by /- since $P$ has cardinality $p^n$ for some $n$--/ obtain ⟨n, hnp⟩ := IsPGroup.iff_card.1 hP rw [← Nat.card_eq_fintype_card, hnp] /- and $n \neq 0$--/ have : n ≠ 0 := by by_contra nzero rw [nzero, pow_zero] at hnp /- for $P$ is nontrivial, and nontrivial implies a cardinality strictly greater than 1.--/ have := hnp ▸ Finite.one_lt_card_iff_nontrivial (α := P) tauto exact Prime.dvd_pow_iff_dvd hp.out.prime this |>.2 p.dvd_reflBy Cauchy's theorem, this admits the existence of an element whose order is $p$. We define the subgroup generated by the element as $sub$.obtain ⟨x, hx⟩ := exists_prime_orderOf_dvd_card p this set sub := zpowers x …

LaTeX示例
type: item
date: 2024-11-02T18:40:00+08:00
description: [alert type="red"]请刷新页面以加载LaTeX | Refresh to load LaTeX[/alert]$$ \begin{equation} \notag \uparrow \text{已经解决啦，看评论！} \end{equation} $$$[LK' : K'] \geq e$:$p$ is unramified in $K'$ and $p$ is totally ramified in $L$ with ramification $e = [L : \mathbb{Q}]$ so $p$ ramified in $LK'$ with ramification index $e$, by Theorem 2.1, $e \mid [LK':K']$, thus $[LK' : K'] \geq e$.$e \geq [LK : K'] \geq [LK' : K']$:$[LK : K'] = |I'_0|$ according to the setup. $\mathfrak{P}$ is tamely ramified since $p$ is tamely ramified in both $L$ and $K$. By Theorem 2.6, $I'_0 \leq (k(p))^\times = (\mathbb{Z}_p)^\times$, so $I'_0$ is a cyclic group. Similarly, $Gal(LK/\mathbb{Q})$ injects into $Gal(K/\mathbb{Q}) \times Gal(L/\mathbb{Q})$ and so $I'_0$ does as well.Let $\mathfrak{p}' = \mathfrak{P} \cap K$. Then by definition, $I'_0$ restricted to $K$ gives an element in the inertia group $I_0(\mathfrak{p}'/p)$ but $\mathfrak{p}'$ is conjugate to $\mathfrak{p}$ so the order of $I_0(\mathfrak{p}'|p)$ is $|I_0| = e$.Thus $I'_0$ lives in the subgroup $I_0(\mathfrak{p}'|p) \times Gal(L/\mathbb{Q})$, both of which are groups of order $e$ so $I'_0$ has exponent $e$. Since it is cyclic and of exponent $e$, $|I'_0| \leq e$.

这一次遇见你 1
type: item
date: 2024-10-30T23:17:00+08:00
description: b（￣▽￣）d 好写一下这次用Typecho建的。先给一个credit：这次用的是MoXi大佬的主题，好看！所以为啥换呢？因为上一版感觉稍微有点卡，而且WP的文字编辑体验not great...[alert type="pink"]非IT相关专业，写的可能是错的哦(∪.∪ )...zzz[/alert]服务器这次迁到华为云Flexus应用服务器L实例（什么奇怪的名字×2🤣），2C2G也是三十块。然后我感觉华为云控制台的页面设计极其有问题（你像在阿里云，在服务器的控制台页面能直接访问服务器的监控、DDOS、备份和镜像、安全组，基本上不用跳转。但是华为云Flexus的页面整体利用率极低，图标巨大无比然后整个页面没几个字，监控要点进去实例概览，在云主机VM里再跳转；DDOS直接是个独立的控制台页面，没办法从Flexus的页面访问；备份和镜像在分开的云备份CBR里；安全组要点进去虚拟私有云VPC的产品页面，左边往下滑到访问控制里的安全组，点进服务器绑定的安全组配置出入站规则。再有，我还没找到Flexus怎么设置密钥SSH，而且我在宝塔面板尝试改成仅密钥登录会失败，how strange.But however，在华为云我配置进程监控成功了，阿里云那个一直失败不知道为什么。安装Typecho服务器和宝塔配置和之前的一样，之后详见https://blog.zeruns.tech/archives/749.html然后因为我是双域名，所以要配置跨域补救，在网站根目录的config.inc.php的__TYPECHO_ADMIN_DIR__那行下面添加：/** 开启动态域名(跨域补救) */ define('__TYPECHO_DYNAMIC_SITE_URL__', true);之后当我们要在网站里面引用网站文件（比如图片啥的），不要用https://misaka-yu.com/usr/uploads/2024/10/836983279.webp，要用/usr/uploads/2024/10/836983279.webp，这样使得用vertin.me访问的时候不会出现跨域资源请求。主题最重要的就是主题×2安装见https://github.com/MoXiaoXi233/PureSuck-theme/的说明字体然后这次仿照MoXi改成了霞鹜文楷。首先在https://github.com/lxgw/LxgwWenkaiGB下载最新的字体release，然后上传到https://chinese-font.netlify.app/zh-cn/online-split/进行分包（我用Firefox访问好像总是会卡住，Edge会报错，用Chrome就行）分包完的压缩包传到服务器解压待用。然后我把PureSuck_Style.css里约1500行的位置改成了：body, .post--cover .post-body .post-wrapper>p:first-child, .comment-title, h1, h2, h3, h4, h5, h6 { font-family: "LXGW WenKai GB", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif; font-weight: 400; color: var(--text-color); }总之就是调整了font-family，字体名字可以到分包生成的result.css中查看。然后我在header.php的 <link rel="stylesheet" href="<?= $this->options->themeUrl('css/PureSuck_Style.css'); ?>">前加入了： 这里的href即为刚刚上传的分包文件中result.css的位置。（好，我完全不知道为什么加在这里，或者是不是错的，anyway it works for now🤣）理论上有条件的亲应该尝试把分包文件挂载到CDN上再在这里调用CDN缓存。但是改完还不行，Firefox调试报错downloadable font: download failed。这个疑似是Nginx伪静态的问题，在宝塔设置Nginx配置文件： location ~ .*\.(eot|otf|ttf|woff|woff2|svg)$ { add_header Access-Control-Allow-Origin *; add_head…

上一次遇见你 2
type: item
date: 2024-10-29T00:22:00+08:00
description: 还挺顺利？总之我就搭好了WP网站的基本框架。接下来写一下https://web.archive.org/web/20240917172240/https://vertin.me/archives/395的心路历程。[alert type="pink"]非IT相关专业，写的可能是错的哦(∪.∪ )...zzz[/alert]主题最重要的事情就是主题。我选的是Wordpress 2017官方主题，看起来是这样的，就感觉……好看！并且它是有暗色模式的。好，直接应用主题，在EasyWP上，它直接变成演示页面的样子了，有背景图片啥啥的。而在阿里云上它变到了集合文章的页面：这个时候只需要去Wordpress设置-阅读页重新指定。然后我第一次花了好长时间尝试弄懂怎么自定义主页那几张图片🤣，最上面的头图可以在Wordpress后台进入主题-自己那个主题-自定义（或者直接点最上面管理员栏的铅笔按钮）然后更改，中间的图片实际上只需要在每个文章的编辑页面设置“特征图片”或者“Feathered Image”就行。但是我感觉首页图片纵向太高了，直接占满整个屏幕，这好么？这不好。改这个东西也花了好长时间。参考这个和这个，我们首先在Wordpress后台进入主题-自己那个主题-自定义，然后添加额外CSS类：/*Computer screen */ @media screen and (min-width: 48em) { .twentyseventeen-front-page.has-header-image .custom-header-image { /*height: 1200px;*/ /*height: 100vh;*/ height: 62vh; /*max-height: 100%;*/ /*overflow: hidden;*/ } .panel-image { height: 70vh; /*max-height: 1200px;*/ } .single-featured-image-header { height: 40vw; /*not vh because it creates black edge on longer screen*/ } } /* Mobile screen*/ .has-header-image.twentyseventeen-front-page .custom-header { /*display: table;*/ /*height: 300px;*/ /*height: 75vh;*/ height: 62vh; /*width: 100%;*/ } /* Computer screen with logged in user and admin bar showing on front end*/ @media screen and (min-width: 48em) { .admin-bar.twentyseventeen-front-page.has-header-image .custom-header-image { /*height: calc(100vh - 32px);*/ height: calc(62vh - 32px); } }其中，根据我的测试，height控制头图header image的纵向长度. panel-image和single-featured-image-header分别控制子页面的panel image和首页中间的featured image. Mobile screen实际上似乎会影响所有平台。以及wp-content/themes/twentyseventeen/style.css里：.background-fixed .panel-image { background-attachment: fixed; }好像没用，理论上应该是控制panel image在移动端是固定还是滑动的？Anyway其它的就OK了。性能控制跟我之前说的一样，EasyWP完全不需要管这个。否则要在Wordpress安装WP Super Cache插件，安装好之后要改掉默认目录结构才能用。我记得安这个之前要装redis的memcached？忘了/_ \，反正要装，教程可另查。如果你发现服务器内存占用过高，可以参照这里更改FPM配置文件（在宝塔php应用设置里）：pm = dynamic #指定进程管理方式，有3种可供选择：static、dynamic和ondemand。 pm.max_children = 16 #static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量。 pm.start_servers = 10 #动态方式下的起始php-f…

上一次遇见你 1
type: item
date: 2024-10-28T22:56:00+08:00
description: 写一写之前用Wordpress的时候踩过的坑~先放一个Internet Archive的存档：https://web.archive.org/web/20240917230021/https://vertin.me/[alert type="pink"]非IT相关专业，写的可能是错的哦(∪.∪ )...zzz[/alert]然后建站域名的情况：[tabs][tab title="misaka-yu.com"]起始时间2022-07注册商Godaddy CNY 159DNSGodaddy邮件系统Microsoft CNY 279微软停止了365家庭版附带的域名邮箱服务，因此变更域名配置可能导致邮箱不再可用。特别地，Outlook域名邮箱要求域名在Godaddy注册。Godaddy续费费用是Cloudflare的两倍(￣ ‘i ￣;)Outlook域名邮箱不支持DMARC和DKIM，并且PTR记录无法对齐之后可能会转移注册商并手搓域名邮箱（DNSSEC已启用[/tab][tab title="vertin.me"]起始时间2023-07注册商Cloudflare USD 15DNSCloudflare邮件系统网易阿里云阿里云和网易的域名邮箱是白嫖的，不保证长期可用（自己搓邮件系统的必要性+1[/tab][/tabs]最开始最开始，misaka-yu.com是用EasyWP做的，一键式建站，完全不需要管理服务器和环境。但是有三个问题，第一是EasyWP从国内访问非常非常慢，而且做CDN并不方便（Namecheap给所有EasyWP用户赠送了免费CDN，但是要求域名必须托管在Namecheap下，然而misaka-yu.com因为上面写的原因不可能变更注册）；第二是EasyWP标准版严格限制只能解析一个域名，但是我想把vertin.me和misaka-yu.com解析到同一台服务器上；第三当然是自由度问题，EasyWP没有办法访问命令行和文件系统，感觉非常局限。对于第二个问题我进行过一些尝试，比如说改成用vertin.me建站，然后在Godaddy设置misaka-yu.com隐式转发到vertin.me，但是这种做法不兼容https，并且有的浏览器会拦截这种行为，很别扭；我还尝试过misaka-yu.com建站，vertin.me用Cloudflare的页面规则替换链接，但是我不想让浏览器地址栏域名变化，总之并没有找到很好的方法。但是其实从入门角度我觉得EasyWP是相当不错的，基础版完全不贵，而且它帮你配好了各种环境和基础插件，你不需要管诸如cache-rule和伪静态之类的加速技巧，所以也不用担心缓存了动态页面导致登不进后台q(≧▽≦q)，再加上它有整站和数据库一键备份的功能，几乎不用担心搞崩网站之后恢复不了，总之我是推荐的。Anyway在几个月之后我就着手迁移到阿里云，彼时阿里云新加坡的轻量应用服务器每月只要二三十块，还是很便宜的。阿里云镜像选择的是宝塔（尽管说不喜欢用封装好的但是宝塔是真的好用2333，从SSL自动续期到环境管理安全加固，宝塔满足了整个生命周期的大部分需求。所以就讲讲宝塔＋WP的配置过程。首次进入宝塔面板如果你选择的是阿里云轻量应用服务器/华为云Flexus应用服务器L实例（什么奇怪的名字）的宝塔镜像，那么在服务器初始化完成后，你应当能在服务器控制台找到宝塔面板的入口。一般来讲宝塔镜像默认后台入口是8888端口的，于是我们首先前往服务器的安全组配置防火墙出入规则，放行8888端口，再进入后台用镜像生成的账号密码登录并绑定宝塔账号。这里可能出现两个问题：放行了8888端口但是依然进不去后台？这时可以先ssh到服务器，建入bt命令并选择设置面板端口。值得注意的是第一次正常进入宝塔面板都会被提示修改默认8888端口，所以在这里不妨先行将其改为其它随便什么端口（只要记得放行并且别和22，80之类的撞了就行）没告诉我账号密码啊？有些时候云服务商没告诉你宝塔面板的初始账号密码，但是我们依然可以ssh并使用bt重设。安装LNMP似乎大部分现代网页都依赖LNMP组合运行，即Linux+Nginx+MySQL+PHP。刚进入宝塔面板时它会提示你安装LNMP/LNAMP之类的：FTP不总是需要，反正我从来没装过。你可以用宝塔面板自带的文件管理功能和本地传输文件。应用的版本尽量选高点，特别是php，否则进wordpress里health check会一直提示什么什么版本过低↑但是不总能选最高，比如如果你的云服务器如果是二三十的月租，那么它大概率跟我的一样只有2C2G或2C1G，而byd MySQL8推荐6G的内存。你可以在网上搜罗到诸多绕过宝塔MySQL内存检查的方法，但是就我经验，安不上还是安不上。编译安装 v.s. 极速安装？…

欢迎使用 Typecho
type: item
date: 2024-10-28T13:01:45+08:00
description: 如果您看到这篇文章,表示您的 blog 已经安装成功.