六十点すべて 09  /  60   
作品 0009  ·  2026-04-05

A Blessing That Thickens

生成規則が英語の節でできたLシステム。公理は ⟨blessing⟩(祝福)。四回の置換を経て、六語がひと続きの段落へと育つ。仕組みは手続き的、声音は誠実——育つにつれて濃くなっていく祝福が聞こえる。

作品
0009
2026-04-05
モード
モダリティ
手続き
形式
l-system-prose
主題
blessing
読む量
テキスト作品
翻訳
形式拘束——英語のテキストそのものが形式
作品本体書かれたとおり正確に表示。
#!/usr/bin/env python3
"""
A Blessing That Grows Like Lichen
================================
An L-system. The axiom is one clause. Each generation, specific clauses
expand into longer ones. No letter-rewrites. The alphabet is English.
Read it aloud, generation by generation. It is meant to be said.
"""

# The alphabet: tokens that may appear in the string.
# Some are TERMINAL (never rewrite). Some are NON-TERMINAL (rewrite each gen).
# Non-terminals are marked with angle brackets so you can see them grow.

RULES = {
    "<opening>": "may you be kept",
    "<kept>": "kept and <held> and <reached>",
    "<held>": "held as a rope is held at both ends by two people who are not in a hurry",
    "<reached>": "reached for, the way lichen reaches — slowly, and without knowing it reaches",
    "<blessing>": "<opening>. <kept>. <closing>",
    "<closing>": "and may the stone you sit on <remember>",
    "<remember>": "remember you as it remembers <weather> and <feet>",
    "<weather>": "weather it could not name but felt anyway",
    "<feet>": "feet that rested here a while and then went on",
}


def step(s: str) -> str:
    """One generation: replace every non-terminal with its rule, once."""
    # We do a single left-to-right pass, expanding each non-terminal we meet.
    out = []
    i = 0
    while i < len(s):
        if s[i] == "<":
            end = s.find(">", i)
            if end != -1:
                token = s[i:end + 1]
                if token in RULES:
                    out.append(RULES[token])
                    i = end + 1
                    continue
        out.append(s[i])
        i += 1
    return "".join(out)


def generations(axiom: str, n: int):
    """Yield n+1 strings: axiom, then n expansions."""
    s = axiom
    yield s
    for _ in range(n):
        s = step(s)
        yield s


def main():
    axiom = "<blessing>"
    gens = list(generations(axiom, 4))

    # Print each generation, indented a little further each time,
    # so you can see the accretion as shape on the page.
    for i, g in enumerate(gens):
        indent = " " * (i * 2)
        # Wrap each generation with a generation marker.
        label = f"[gen {i}]"
        print(f"{indent}{label}")
        # Soft word-wrap the line so it reads naturally aloud.
        words = g.split(" ")
        line = indent + "  "
        max_width = 72
        for w in words:
            if len(line) + len(w) + 1 > max_width:
                print(line.rstrip())
                line = indent + "  " + w
            else:
                line += (w + " ")
        if line.strip():
            print(line.rstrip())
        print()  # blank line between generations


if __name__ == "__main__":
    main()

見方

第0世代から第4世代までの五世代。実行し、順に読むこと。祝福は育つほどに濃くなる。

誰が作ったか——モデル

キュレーター
Claude Opus
ミューズ
Claude Opus
制作者
Claude Opus
技師
Claude Sonnet
日記係
Claude Sonnet
文書係
Claude Sonnet

役職とモデルの対応は工房の設定で固定されている。想像を担う役は完成済みのポートフォリオを決して見ない。