An open API service indexing awesome lists of open source software.

https://github.com/timcsy/cella-playground

形式化證明工具:一個概念,各式投影
https://github.com/timcsy/cella-playground

Last synced: 16 days ago
JSON representation

形式化證明工具:一個概念,各式投影

Awesome Lists containing this project

README

          

# Cella Playground

> **一個概念,各式投影。**

來玩:https://timcsy.github.io/cella-playground/

---

## 語言的牢籠

維根斯坦說:「我的語言的界限意味著我的世界的界限。」

我們每天都活在這個困境裡。你心中有一個想法——清澈、完整、活生生的——但當你開口說出來,它就變成了文字。文字不是想法本身,是想法的**投影**。換一種語言,投影就不同。「自由」和「freedom」和「自由(じゆう)」——三個符號,指向同一個概念,但每個都帶著自己文化的色彩和邊界。

程式設計也是如此。同一個「排序」的概念,在 Python 裡長一個樣,在 Rust 裡長另一個樣。同一份資料,用 JSON 表達和用 XML 表達完全不同。我們花了無數時間在做一件事:**確認兩個不同的表達其實是同一個東西。**

如果有一種方式,能讓「概念」本身成為主角,而不是它的某一個表達呢?

---

## 概念先於表達

柏拉圖相信有一個理型(Form)的世界——椅子的「理型」先於任何一張具體的椅子存在。你看到的每一張椅子都是理型的投影,不完美的、局部的、受限於材料和工藝的。

這聽起來很抽象,但程式設計師每天都在跟這件事搏鬥:

- 你的 API 從 v1 升級到 v2,兩邊表達的是同一個能力,但格式不同。你得手動寫轉換器。
- 你的資料庫改了 schema,資料的**意義**沒變,但結構變了。你得手動寫 migration。
- 你想把一段邏輯從一個語言搬到另一個語言。概念相同,但你得從頭重寫。

每一次,你都在做同一件事:**用手工勞動來彌補「概念」和「表達」之間的鴻溝。**

---

## Cella 做了什麼?

Cella 是一個實驗性的語言,基於一套叫 **Cubical Type Theory** 的數學理論。它做了一件前所未有的事:

### 讓「等價」成為「相等」——而且可以計算

如果兩個結構可以互相轉換,而且轉換是完美的(不丟失任何資訊),Cella 在數學上保證它們**就是同一個東西**。不是「看起來像」,不是「我們約定它們一樣」,是**定理**。

而且這個定理不是空洞的宣言——Cella 可以**實際執行**這個轉換。你給它一邊的值,它自動幫你搬到另一邊。

這叫 **Univalence**。在其他類似系統(如 Lean4、Coq)裡,它是一個公理——「我宣稱等價就是相等」,但系統無法用它做計算。在 Cella 裡,它是可以跑的程式碼。

### 等式是路徑,不是判決

傳統邏輯說 `a = b` 是一個命題——要麼成立,要麼不成立。黑或白,沒有中間地帶。

Cella 說 `a = b` 是一條**路徑**——從 a 到 b 的連續變形。路徑可以有很多條。不同的路徑代表不同的「相等方式」。

這不只是數學的好奇心。它意味著我們可以追問:**這兩個東西是怎麼相等的?** 不只是「是或否」,而是「經由什麼路徑?」經由翻譯?經由重構?經由類比?每一條路徑都攜帶著轉換的**結構**。

### 程式就是證明

在 Cella 裡,寫程式和證明定理是同一件事。你寫的每一個函數都是一個邏輯論證。型別檢查通過 = 你的論證是有效的。

這意味著 Cella 可以**保證**你的程式不會出現某些類型的錯誤——不是靠測試,是靠數學證明。

---

## 這跟我有什麼關係?

**如果你是工程師**——你的公司把使用者資料從舊格式搬到新格式,工程師花了三週寫 migration script,上線後發現漏了兩個欄位。Cella 可以**證明**新舊格式等價,然後**自動產生**轉換,數學保證不丟任何一個欄位。

**如果你是翻譯者或語言學家**——你知道「Home」翻成「家」丟掉了什麼,翻成「故鄉」又多加了什麼。每一次翻譯都是一條路徑,路徑不同,帶過去的東西就不同。Cella 讓你精確追問:**這條翻譯路徑保持了什麼?丟掉了什麼?**

**如果你是哲學家**——忒修斯之船:把船的木板一塊一塊換掉,它還是同一艘船嗎?Cella 的回答:如果每一步替換都是「等價」的(功能完全相同),那是。如果不是,它能告訴你**從哪一步開始不是了**。身分不由名字決定,由結構決定。

**如果你做社會科學**——你訪談了 30 個人關於「公平」的看法。每個人用不同的詞彙,但你覺得他們在講同一件事。怎麼確認?Cella 的思路:如果兩個人的「公平」概念可以互相翻譯而不丟失意義,它們就是同一個概念的不同投影。而且 Cella 正在研究衡量概念之間「距離」的方法——兩個人的「公平」有多像?(細節待發表)

**如果你是老師**——你用三種方式解釋同一個觀念:比喻、公式、圖表。學生聽懂了其中一種。這三種解釋是同一個概念的三個投影。Cella 的世界觀讓你更清楚地思考:**我在投影什麼?投影保持了什麼?**

**如果你只是好奇**——打開 Playground,選「初心者」路線,花 15 分鐘,不需要數學背景。你會發現:寫程式就是在證明定理,而等號比你以為的有趣得多。

---

## 試試看

**[打開 Playground →](https://timcsy.github.io/cella-playground/)**

三條路線,選適合你的:

| | 路線 | 適合誰 | 你會體驗到 |
|--|------|--------|-----------|
| 🌱 | **初心者** | 我沒學過數學 | 用生活比喻理解「程式 = 證明」 |
| 🔬 | **數學人** | 我學過數學 | 從古典數學走到同倫型別論 |
| ⚡ | **老手** | 我用過 Lean4/Agda/Coq | Cella 能做到哪些它們做不到的事 |

不用安裝。瀏覽器打開就能寫。

---

## Cella 和其他系統

| | Lean4 | Cubical Agda | Coq | **Cella** |
|---|-------|-------------|-----|-----------|
| 等式可計算 | ✗ | ✓ | ✗ | **✓** |
| transport 歸約 | ✗ | ✓ | ✗ | **✓** |
| ua 可執行 | ✗ | ✓ | ✗ | **✓** |
| 瀏覽器原生執行 | ✗ | ✗ | △ | **✓** |
| 概念距離衡量 | ✗ | ✗ | ✗ | **研究中** |

---

> **程式碼只是概念的投影。概念才是本體。**
>
> *—— Cella*

---

## 開發者:更新 Playground

```bash
# 1. Build WASM(在 cella repo 根目錄)
wasm-pack build crates/playground-wasm --target web --out-dir ../../playground/pkg

# 2. 推到 cella-playground repo
git push https://github.com/timcsy/cella-playground.git $(git subtree split --prefix=playground):main --force
```