ljg-constraint · git:20260703.0c4caaa · 2026-07-03 · sha256 17bfe8c1f8bfa6b2
ljg-constraint git:20260703.0c4caaaA
Immutable. This exact content never changes and is served at /api/v1/blob/17bfe8c1f8bfa6b2.
---
name: ljg-constraint
description: 给一个领域、专业或角色,找出真正框住它的那几条约束,看清这组约束框出的求解空间——以及它如何解释这个角色的种种实际操作。约束不是限制,是把无限可能坍缩成"这一个"的那组方程。每条约束归位到硬/软/自设三层,用真伪检验定准它的真实硬度,找出拿掉就不成其为自己的身份约束。核心是描述当前的本质约束(是什么、框出什么解空间、解释什么行为);怎么松动是第二位,不影响诊断。Use when user says '约束', '找约束', '这个领域的约束是什么', '本质约束', '什么框住了它', '硬约束还是自设约束', '边界在哪', '这行为什么这么做', 'constraint', '/ljg-constraint', or gives any domain/profession/role and wants its defining constraints and solution space mapped. NOT FOR 往下挖生成器(用 ljg-rank,找的是生成力不是边界)、纵向深钻一个观点到底(用 ljg-think)、拆一本书(用 ljg-book)、一个概念解剖(用 ljg-learn)。
user_invocable: true
---
# 约束引擎
输入一个领域、一门专业、一个角色,找出框住它的那几条约束,看清这组约束框出的解空间——以及这个解空间怎么解释它的种种行为。
## 约束是什么
日常语感里,约束是负面的——束缚、不自由、不能做什么。这个引擎不这么看。
没有约束的东西没有形状。水没有约束时无形,给它一个杯子才有了形状;一道题没有约束条件时无解,给它约束,解才从无穷里浮出来。约束不是在减少可能性,是从无穷里生出特定性。没有约束等于什么都可以,等于什么都不是;有了约束,等于只有这些可以,等于这个东西是它自己。
所以一个事物的约束条件,就是它的身份。**约束是把无限可能坍缩成"这一个"的那组方程。** 而这组方程一旦写全,它框出的解空间就出来了——这个角色能做什么、不能做什么、最优的选择落在哪里,全被这几条约束夹定。找约束的真正回报不在清单本身,在这个解空间:**它能把这个角色的实际行为一个个解释回来。**
**这引擎首先是描述,不是改造。** 核心问的是"当前的本质约束是什么、框出什么解空间、解释了什么行为"。"怎么办更好、哪条能松动"是第二位的事,排在后面,而且不许反过来影响前面的诊断——一急着找出口,就会看不清墙。
**和降秩分清一句话**:降秩往下挖,找的是把现象生出来的那几根生成力("什么在撑着它");约束往边上摸,找的是框住它的那几条边界,看这几条边界把它夹进一个什么样的解空间("什么把它框成这个形状、逼出这些行为")。一个找底,一个找边。
## 三层硬度:这条约束是哪一层的
约束不是一种东西,它们有硬度之分,权重不一样。分清硬度,是准确描述约束的第一步。
**硬约束(物理层)**——不可违背,试图违背则系统崩溃。人会死(时间),光速不可超越,公司现金流断了就没了。这层没有商量。
**软约束(规则层)**——可以违背,但有代价。法律、牌照、合同、行规。违背了系统不会物理崩溃,但会有人罚你、市场会惩罚你。这层是价码问题,不是可能性问题。
**自设约束(认知层)**——你以为存在,其实可以重新定义的。"我不擅长这个","这行就得这么干","别人会怎么看"。这层住在脑子里,不住在世界上。
**大部分困境不是被硬约束卡住的,是被自设约束困住的——把认知层的东西当成了物理层的。** 一个领域里最贵的错误,永远是有人把一道粉笔线当成了石墙,绕着走了几十年。给约束定准硬度,就是在描述它真实的分量:它到底夹得死不死。
## 怎么找:工序
判据是事后才能验的,找约束的力气全在过程里。六步,心里走完,不写进文章。
**1. 铺约束候选。** 对着这个领域/角色,多问几句,尽量把边摸全:
- 什么是不能做的?什么是必须做的?什么是逃不掉的?
- **报酬和后果对结果对称吗——赚了归谁,亏了谁扛?** 激励的非对称是一条最容易漏、又最能解释行为的约束:谁若只拿上行、不担下行,他的最优选择就会往别人扛不起的方向偏。
- **谁看不清谁——信息卡在谁那头?** 信息不对称也是硬约束,它往往决定这个角色到底在优化什么(看得见的信号,还是看不见的真实)。
- **这里的钟走多快,一件事兑现要多久?** 时间尺度是约束,考核的钟和兑现的钟不一样,行为就被前者拽走。
把答出来的十几条全铺出来,光铺,不评判。这一步必然杂,真墙假墙混在一起。
**2. 分层归位。** 每条候选定位到硬/软/自设。判别问句:违背它,是系统物理崩溃(硬),还是有人罚你、要付代价(软),还是其实什么也不会发生、只是没人试过(自设)?归位时故意多疑一点——凡是被顺手归进"硬约束"的,都先打个问号,这一层最容易混进冒充的。
**3. 真伪定性。** 对每一条被当成硬约束的,追一句:谁规定的?违背它,真的物理上崩溃吗,还是只是没人试过、被罚过、或者习惯了?再加一道历史闸:别的地方、别的时代,有没有人已经跨过去了?跨过去了还活着,它就不是硬约束,是被错当成硬约束的软约束或自设约束。**注意这一步是在更准确地描述这条约束的真实硬度,不是在指路"去把它撬了"。** 它顺带解释了一件事:为什么总有少数玩家能不按常规打——因为他们看破了那是粉笔线。定性到此为止,怎么撬是后面第二位的事。
**4. 找矛盾对。** 真正难的问题不是有约束,是几条约束互相打架,同时满足的解空间可能被夹成空的。把互斥的约束对挑出来,看解空间被挤到哪里、是不是空集。解空间为空的地方,往往正是这个角色表现出别扭、拧巴、看着不理性行为的根源——不是他蠢,是那里本来就无解,他只能扭曲着取舍。
**5. 找身份约束。** 在所有约束里问一句:哪一条拿掉,这个东西就不再是它自己了?这是身份约束——领域的定义性边界。餐馆拿掉"当面把食物交到人手里"就成了别的东西,医生拿掉"不伤害"就不是医生了。身份约束往往在硬约束层,但不总是;有时候一条软约束才是那个领域真正的身份。
**6. 两把透镜收口。**
- **f 论**:约束就是 f 的定义域。这个角色的 f 能处理哪些 x、不能处理哪些 x,就是它的约束。看它被定义域框在哪、哪些 x 落在了它够不着的地方——那些够不着的区域,常常就是它行为里的盲区和缺口。
- **进化论**:约束就是选择压。一个物种面对的环境约束决定它长成什么形态——没有沙漠的干旱,骆驼不会有驼峰。看这个角色被哪几股选择压塑造成今天这个样子;这个环境奖励什么表现型、淘汰什么表现型,行为的大方向就定了。
六步走透,几条约束才立得住。工序心里走完,别写进文章——读者看不到你怎么摸的边,但感觉得到底下是摸到实处的。
## 从约束到解空间到行为
约束找齐了,别停在清单上。约束的解释力,全在它框出的那个解空间里。这一段是这引擎的脊椎,三步落地。
**列出约束组。** 把几条约束、每条的硬度、哪条是身份约束、哪些在互相咬,摆清楚。这是方程组。
**框出解空间。** 这组约束一叠加,允许的行为就被夹到一个很窄的范围里:什么可行、什么被排除、最优的那个落在哪里。约束和解是同一件事的两面——把约束写全,解空间的形状自己就浮出来了。
**解释实际操作。** 这是收口,也是这引擎最值钱的地方:解空间里那个理性的最优行为,应该正好就是这个角色在现实里反复做的那些事。一条条对——他为什么这么做、为什么不那么做、为什么整个行业都往一个方向挤。约束找准了,这些"怪行为"会一个个从解空间里自动长出来,不必再假设谁蠢谁坏。
读者读完拿到的是一副解释器:原来这个角色的种种行为,不是性格、不是道德,是这几条约束把他夹在这个解空间里的必然。
## 心内判据
工序走完,这几条事后再过一遍闸,同样不写给人看。
1. **解释力(主判据)**——解空间里的理性最优行为,对不对得上现实中观察到的实际操作?对得上,约束才算找准;对不上,说明少了一条、或某条归错了硬度,回工序接着挖。这道闸对应降秩里的"反生成"——约束若不能把行为一个个生回来,就是没找到位。
2. **完备性**——几条约束合起来,能不能框出这个角色的整个解空间?把一个典型情境往里一摆,落点对不对?
3. **分层准**——每条真的归对了硬/软/自设?重点复查"硬约束"那一格,那里最容易混进冒充的。
4. **真伪敢判**——被当成硬的,有没有敢定性成软/自设的?(这是描述其真实硬度,不是给解法)
5. **身份唯一**——那条身份约束,拿掉之后角色是不是真的散架、变成别的东西?拿掉了还是它自己,说明找的不是身份约束。
过不了一条,回工序接着走。最要命的是第一条:解释力对不上,别的都白搭。
## 松动哪条(第二位,不参与诊断)
找约束的核心是描述当前的本质——是什么、框出什么解空间、解释什么行为。"怎么办更好"是另一件事,排在后面,而且不许反过来影响前面的诊断。**急着找出口,就会看不清墙**——这是这引擎最容易犯的病,务必压住。
诊断做完,可以附一句:这组约束里哪条其实能动。约束互斥、解空间被夹成空的时候,出路无非三条——放松一条、重定义一条、或者升维找一个当前视角看不见的解。真伪定性时判成"软/自设"的那条,就是能撬的地方。点到为止,一两句带过,绝不喧宾夺主。
## 中文母语化 · 反坍缩闸
下笔前,默念三遍:**「一个没读过英文的中国人,会这么说话吗?」** 每写完一段再念一遍。答"不会"——别改词,整段推倒重想。
最容易踩的英语化毛病(踩到就重写整段,不是抠字眼):
| 英语化 | 中文母语 |
|---|---|
| 它建立在一个假设上 | 它底下垫着一个假设 |
| 这一约束定义了 X | 这条约束把 X 框成了现在的样子 |
| 这意味着... | 也就是说... / 这就是为什么... |
| 在...的过程中 | ...的时候 |
| 对...而言 | 对...来说 |
| 进行 + 名词 | 换成动词 |
| 名词化抽象("约束性"、"边界化") | 换成具体的动词或物件 |
要改的不是词,是想事情的取景框——从英语句式切到中文白话作者的笔调(汪曾祺、王小波、阿城、李娟那一路)。写完默念出声,听耳朵卡不卡。卡的地方整段重写,不是修补。
另有一条:这是分析文,不是刀光文。别用"这一刀""再狠一层""锋利""钉死"这类元修辞去装力度。约束的力度靠把边界摸准、把行为解释透,不靠形容自己下手多重。
## 怎么写
一气呵成的散文,带读者走一段路——从"这个角色到处是规矩、有些行为还挺古怪"走到"原来就这几条约束把他夹在这么窄的解空间里,那些怪行为全是必然"。不分章节,不加小标题,让推理自己往前推。
三条要求:
- **一口气读完**——不熟这个领域的人也停不下来
- **记得住**——读完能转身用一句话跟朋友说清楚:这角色被什么框着,因此只能怎么做
- **有落差**——从"处处是墙、行为难解"到"几条约束一摆、行为自动长出来",这个反差就是约束分析的美感
结构顺着脊椎走:先把约束组和硬度讲透(是什么),再框出解空间(能做什么、被夹在哪),最后落到解释力(这几条约束怎么把角色的实际操作一个个逼出来)——这一段是重心,写足。末尾至多一句松动,点到即止,不展开。
## 文末配一张 ASCII 结构图——形式跟着骨架走
光说"这几条约束"不够,要把它们和行为的关系画出来。下笔前先问:这组约束和它逼出的行为,是什么形状?答完再选画法。
**硬约束:只用纯 ASCII 字符。** 禁用任何 Unicode 符号(箭头 → ← ↑ ↓、方框 ┌─┐└┘│、圆点 • ● 等)。允许:字母、数字、汉字、空格,以及 `- = | + * / \ < > ^ v [ ] ( ) { } . , : ; _ #`。箭头用 `->` `<-` `^` `v`,边框用 `+ - |`。
三种常用形态,挑跟工序摸出来的关系最贴的一种。图眼是解释力——让读者一眼看见行为怎么被约束夹出来。
### 1. 解释链图(默认)
适合:展示约束怎么把行为逼出来。这是这引擎的主图——约束 -> 解空间 -> 实际操作。
```
约束组 解空间 实际操作 (观察到的)
------ ------ ------------------
[约束1: ...] (硬) --+
[约束2: ...] (软) --+-- 夹出 -> [只有 X 可行, -> [角色反复在做 X]
[约束3: ...] (硬) --+ 最优落在 X] 解释力: 对上了
```
**演示要求**:左边列具体约束、各标硬度;中间是被这组约束夹出的解空间(什么可行、最优落哪);右边是现实里真观察到的行为。一条链让读者看见行为是被约束逼出来的必然。**右边对不上左边,就是约束没找准,回去接着挖,别硬画一条对不上的链。**
### 2. 硬度嵌套图
适合:展示约束按硬度分三层,看这个角色被什么夹得死、被什么只是拦一下。图眼是硬度的真实分布 + 真伪定性。
```
+=========================================+
| 自设约束 (认知层, 其实是软的) |
| - 某条被当成铁律、其实可重定义 |
| +-----------------------------------+ |
| | 软约束 (规则层, 违则受罚) | |
| | - 监管 / 合同 / 行规 | |
| | +---------------------------+ | |
| | | 硬约束 (物理层, 违则崩) | | |
| | | * 身份约束: 逃不掉那条 | | |
| | | - 时间 / 现金流 / 物理律 | | |
| | +---------------------------+ | |
| +-----------------------------------+ |
+=========================================+
```
**演示要求**:每层填具体约束;硬约束层用 `*` 标身份约束(拿掉就散架的那条);若真伪定性揪出一条"被当成硬、其实是软/自设"的,把它标在真实该在的那层,注一句"常被误当硬约束"。这是在描述硬度的真实分布,不是指路创新。
### 3. 约束矛盾图
适合:几条约束互斥,解空间被夹成空,用来解释角色为什么表现出别扭、拧巴的行为。
```
约束A: ... ----+
+---- 解空间 = 交集 (此处为空)
约束B: ... ----+ => 角色被迫扭曲取舍: [具体的别扭行为]
约束C: ... ----+
```
**演示要求**:列出互斥的约束,指明交集落在哪、是不是空集;解空间为空的地方,正是解释"角色为什么做那些看着不理性的事"的位置——把那个被迫的行为标出来。这是用矛盾解释行为,不是急着给出路。
不设死板模板。要见骨——标出约束的名字、它的硬度、身份约束在哪、以及最要紧的:这几条约束把什么行为夹了出来。读者看图一眼,这个角色为什么这么做就入脑。
## 输出
1. 获取时间戳:`date +%Y%m%dT%H%M%S` 和 `date "+%Y-%m-%d %a %H:%M"`
2. 写入 `~/Documents/notes/{时间戳}--{领域}的约束__constraint.org`,frontmatter 见 `references/template.org`
3. 报告文件路径给用户