Skip to content
This repository was archived by the owner on Jan 5, 2025. It is now read-only.

Commit 0f77ee4

Browse files
committed
表現微修正
1 parent be264a1 commit 0f77ee4

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

lean/main/07_elaboration.lean

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ The next step is giving some semantics to the syntax. With commands, this
4848
is done by registering a so called command elaborator.
4949
5050
--#--
51-
次のステップは構文に語義を与えることです。コマンドの場合、これはいわゆるコマンドエラボレータを登録することで行われます。
51+
次のステップは構文にセマンティクスを与えることです。コマンドの場合、これはいわゆるコマンドエラボレータを登録することで行われます。
5252
5353
--#--
5454
Command elaborators have type `CommandElab` which is an alias for:
@@ -123,7 +123,7 @@ look at how the elaboration process actually works:
123123
さて、コマンドエラボレータの種類を理解したところで、エラボレーションのプロセスが実際にどのように機能するのかを簡単に見てみましょう。
124124
1. 現在の `Syntax` に適用できるマクロがあるかどうかをチェックする。適用可能なマクロがあり、例外が投げられなければ、結果の `Syntax` がコマンドとして再帰的にエラボレートされます。
125125
2. マクロを適用できない場合は、エラボレートする `Syntax` の `SyntaxKind` に対して登録されているすべての `CommandElab` を検索する。これは `command_elab` 属性を使用して登録されています。
126-
3. これらの `CommandElab` はすべて `unsupportedSyntaxException` を投げるものが出現するまで順番に試行されます。これは、そのエラボレータがこの特定の `Syntax` の構築に対して「責任を負っている」ことを示す Lean 流の方法です。これらのエラボレータは何かが間違っていることをゆーざに示すために通常の例外を投げうることに注意してください。責任を持つエラボレータが見つからない場合、コマンドのエラボレーションは `unexpected syntax` エラーメッセージとともに中断されます。
126+
3. これらの `CommandElab` はすべて `unsupportedSyntaxException` を投げるものが出現するまで順番に試行されます。これは、そのエラボレータがこの特定の `Syntax` の構築に対して「責任を負っている」ことを示す Lean 流の方法です。これらのエラボレータは何かが間違っていることをユーザに示すために通常の例外を投げうることに注意してください。責任を持つエラボレータが見つからない場合、コマンドのエラボレーションは `unexpected syntax` エラーメッセージとともに中断されます。
127127
128128
--#--
129129
As you can see the general idea behind the procedure is quite similar to ordinary macro expansion.
@@ -241,7 +241,7 @@ as `elabCommand` (the entry point for command elaboration) to tell us
241241
which macros or elaborators are relevant to the command we gave it.
242242
243243
--#--
244-
この節の最後のミニプロジェクトとして、実際に役立つコマンドのエラボレータを作ってみましょう。これはコマンドを受け取り、`elabCommand`(コマンドのエラボレーションのエントリポイント)と同じメカニズムを使って、与えたコマンドに関連するマクロやエラボレータを教えてくれます。
244+
この節の最後のミニプロジェクトとして、実際に役立つコマンドエラボレータを作ってみましょう。これはコマンドを受け取り、`elabCommand`(コマンドのエラボレーションのエントリポイント)と同じメカニズムを使って、与えたコマンドに関連するマクロやエラボレータを教えてくれます。
245245
246246
--#--
247247
We will not go through the effort of actually reimplementing `elabCommand` though
@@ -290,7 +290,7 @@ Most notably they elaborate all the values of things like definitions,
290290
types (since these are also just `Expr`) etc.
291291
292292
--#--
293-
項はある種の `Expr` を表す `Syntax` オブジェクトです。項のエラボレータは私たちが書くコードのほとんどを処理するものです。特に、定義や型(これらも単なる `Expr` であるため)など、すべての値をエラボレートします。
293+
項はある種の `Expr` を表す `Syntax` オブジェクトです。項エラボレータは私たちが書くコードのほとんどを処理するものです。特に、定義や型(これらも単なる `Expr` であるため)など、すべての値をエラボレートします。
294294
295295
--#--
296296
All terms live in the `term` syntax category (which we have seen in action
@@ -309,7 +309,7 @@ As with command elaboration, the next step is giving some semantics to the synta
309309
With terms, this is done by registering a so called term elaborator.
310310
311311
--#--
312-
コマンドのエラボレーションと同様に、次のステップは構文に語義を与えることです。項の場合、これはいわゆる項のエラボレータを登録することで行われます
312+
コマンドのエラボレーションと同様に、次のステップは構文にセマンティクスを与えることです。項の場合、これはいわゆる項エラボレータを登録することで行われます
313313
314314
--#--
315315
Term elaborators have type `TermElab` which is an alias for:
@@ -325,7 +325,7 @@ quite different from command elaboration:
325325
the `Syntax` object.
326326
327327
--#--
328-
項のエラボレータは `TermElab` という型を持っており、これは `Syntax → Option Expr → TermElabM Expr` という型のエイリアスです。この型の時点ですでにコマンドのエラボレーションとはかなり異なっています:
328+
項エラボレータは `TermElab` という型を持っており、これは `Syntax → Option Expr → TermElabM Expr` という型のエイリアスです。この型の時点ですでにコマンドのエラボレーションとはかなり異なっています:
329329
- コマンドのエラボレーションと同様に、この `Syntax` はユーザがこの項を作成するために使用したものです。
330330
- `Option Expr` は期待される項の型ですが、これは常にわかるとは限らないため、`Option` 引数となっています。
331331
- コマンドのエラボレーションとは異なり、項のエラボレーションはその副作用によって実行されるだけでなく、`TermElabM Expr` が戻り値には実際の興味の対象、つまりその `Syntax` オブジェクトを表す `Expr` を含んでいます。
@@ -352,7 +352,7 @@ until we are done. There is, however, one special action that a term elaborator
352352
can do during its execution.
353353
354354
--#--
355-
項のエラボレーションの基本的なアイデアはコマンドのエラボレーションと同じです:マクロを展開し、`term_elab` 属性によって `Syntax` に登録された項のエラボレータを全て完了するまで再帰的に実行します(`term_elab` 属性が項のエラボレーションを実行することもあります)。しかし、項のエラボレータが実行中にできる特別なアクションが1つあります
355+
項のエラボレーションの基本的なアイデアはコマンドのエラボレーションと同じです:マクロを展開し、`term_elab` 属性によって `Syntax` に登録された項エラボレータを全て完了するまで再帰的に実行します(`term_elab` 属性が項のエラボレーションを実行することもあります)。しかし、項エラボレータが実行中にできる特別なアクションが1つあります
356356
357357
--#--
358358
A term elaborator may throw `Except.postpone`. This indicates that
@@ -368,7 +368,7 @@ registered in `SyntheticMVarKind`. Right now, there are four of these:
368368
- `postponed`, the ones that are created at `Except.postpone`
369369
370370
--#--
371-
項のエラボレータは `Except.postpone` を投げることがあります。これは項のエラボレータが作業を続けるためにさらなる情報を必要としていることを示します。この不足している情報を表現するために、Lean はいわゆる synthetic metavariable を使用します。以前からご存じのように、メタ変数は埋められることを待っている `Expr` の穴です。synthetic metavariable はそれを解決するための特別なメソッドを持っている点で異なっており、`SyntheticMVarKind` に登録されています。現時点では4種類あります:
371+
項エラボレータは `Except.postpone` を投げることがあります。これは項エラボレータが作業を続けるためにさらなる情報を必要としていることを示します。この不足している情報を表現するために、Lean はいわゆる synthetic metavariable を使用します。以前からご存じのように、メタ変数は埋められることを待っている `Expr` の穴です。synthetic metavariable はそれを解決するための特別なメソッドを持っている点で異なっており、`SyntheticMVarKind` に登録されています。現時点では4種類あります:
372372
- `typeClass`、メタ変数は型クラスの統合で解決される
373373
- `coe`、メタ変数は強制によって解決される(型クラスの特殊なケース)
374374
- `tactic`、メタ変数はタクティクの項であり、タクティクを実行することで解決される
@@ -380,7 +380,7 @@ At some point, execution of postponed metavariables will be resumed by the term
380380
in hopes that it can now complete its execution. We can try to see this in
381381
action with the following example:
382382
--#--
383-
このような synthetic metavariable が作成されると、次の上位レベルの項のエラボレータが継続されます。ある時点で延期されたメタ変数の実行は、その実行が完了できる望みができた時に項のエラボレータによって再開されます。次の例でこれを実際に見てみましょう:
383+
このような synthetic metavariable が作成されると、次の上位レベルの項エラボレータが継続されます。ある時点で延期されたメタ変数の実行は、その実行が完了できる望みができた時に項エラボレータによって再開されます。次の例でこれを実際に見てみましょう:
384384
-/
385385
#check set_option trace.Elab.postpone true in List.foldr .add 0 [1,2,3] -- [Elab.postpone] .add : ?m.5695 → ?m.5696 → ?m.5696
386386

@@ -414,7 +414,7 @@ in place of `.add`), the elaboration of the other two arguments then yields the
414414
this information to complete elaboration.
415415
416416
--#--
417-
さて、例に戻ると Lean はこの時点で `.add` が型 `?m1 → ?m2 → ?m2`(ここで `?x` はメタ変数の記法です)を持つ必要があることを知っています。`.add` のエラボレータは `?m2` の実際の値を知る必要があるため、項のエラボレータは実行を延期します(これは `.add` の代わりに内部的に synthetic metavariable を作成することで行われます)。他の2つの引数のエラボレーションによって `?m2` が `Nat` でなければならないという事実が得られるため、`.add` のエラボレータが続行されると、この情報を使ってエラボレーションを完了することができます。
417+
さて、例に戻ると Lean はこの時点で `.add` が型 `?m1 → ?m2 → ?m2`(ここで `?x` はメタ変数の記法です)を持つ必要があることを知っています。`.add` のエラボレータは `?m2` の実際の値を知る必要があるため、項エラボレータは実行を延期します(これは `.add` の代わりに内部的に synthetic metavariable を作成することで行われます)。他の2つの引数のエラボレーションによって `?m2` が `Nat` でなければならないという事実が得られるため、`.add` のエラボレータが続行されると、この情報を使ってエラボレーションを完了することができます。
418418
419419
--#--
420420
We can also easily provoke cases where this does not work out. For example:
@@ -443,7 +443,7 @@ but didn't have enough information to finish elaboration and thus failed.
443443
Adding new term elaborators works basically the same way as adding new
444444
command elaborators so we'll only take a very brief look:
445445
--#--
446-
新しい項のエラボレータの追加は、新しいコマンドのエラボレータの追加と基本的に同じように機能するため、ごく簡単に見ておきましょう:
446+
新しい項エラボレータの追加は、新しいコマンドエラボレータの追加と基本的に同じように機能するため、ごく簡単に見ておきましょう:
447447
-/
448448

449449
syntax (name := myterm1) "myterm 1" : term
@@ -505,7 +505,7 @@ def myanonImpl : TermElab := fun stx typ? => do
505505
-- 型がわからないメタ変数である場合、実行を延期しようとする。
506506
-- メタ変数は関数のエラボレータのように、それらが何であるか解明するための情報が
507507
-- まだ十分手に入れられない際に暗黙のパラメータの値を埋めるために用いられる。
508-
-- 項のエラボレータが実行を延期できるのは一度だけであるため、エラボレータが無限ループに陥ることはない。
508+
-- 項エラボレータが実行を延期できるのは一度だけであるため、エラボレータが無限ループに陥ることはない。
509509
-- 従って、ここでは実行の延期だけを試みるが、そうしないと例外を引き起こすかもしれない。
510510
tryPostponeIfNoneOrMVar typ?
511511
--#--
@@ -595,7 +595,7 @@ elab "⟨⟨" args:term,* "⟩⟩" : term <= t => do
595595
Please add these semantics:
596596
597597
--#--
598-
これらの語義を追加してください
598+
これらのセマンティクスを追加してください
599599
600600
--#--
601601
**a)** using `syntax` + `@[command_elab alias] def elabOurAlias : CommandElab`.
@@ -628,7 +628,7 @@ elab "⟨⟨" args:term,* "⟩⟩" : term <= t => do
628628
Please add these semantics:
629629
630630
--#--
631-
これらの語義を追加してください
631+
これらのセマンティクスを追加してください
632632
633633
--#--
634634
**a)** using `syntax` + `@[tactic nthRewrite] def elabNthRewrite : Lean.Elab.Tactic.Tactic`.

0 commit comments

Comments
 (0)