-
-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
構造体の定義の曖昧さ問題 #1258
Comments
Lean by Example で採用する解釈4 を採用する。根拠として、isStructure という関数があることが挙げられる。 import Lean
open Lean Elab Term
/-- 与えられた型が構造体(structure)であるか判定する -/
def isStructure' (type : Name) : TermElabM Bool := do
return isStructure (← getEnv) type
#eval isStructure' `And
#eval isStructure' `Exists
#eval isStructure' `Or
#eval isStructure' `Iff
#eval isStructure' `Decidable これは、#print して class または structure と表示される型を構造体だと定義しているのにおそらく等しい。 この問題が波及する箇所
|
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
@aconite-ac さんのご意見により、TPiL 日本語版と合わせて Lean by Example では「構造体とは、単一のコンストラクタを持ち、添字を持たない帰納型」という定義を採用することにします。 この場合 Lean の既存関数で構造体かどうかを判定する方法はなくなり、#print コマンドの出力結果とも矛盾することになる。読者が「構造体とは何か?」という面倒くさい問題を考えずに済むようにしたい。以下の2つが重要そうに思える。
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
問題の概要
構造体の定義として以下の4つがありえる。
Lean by Example ではこの問題にいままで気づいていなかった。どの定義を採用するか?
各定義が同値ではないこと
1 と 2 は明らかに同じではない。
1 と 3 も同じではない。structure コマンドは再帰的な定義を受け入れるからである。
1 と 4 が同じでないは明らか。
2 と 3 が同じでないのは、structure コマンドは Prop 型から Prop ではないフィールドを持たせることを許可しないからである。Lean の標準ライブラリの Exists が inductive で定義されているのはこのため。
各定義を推す理由
ここでは便宜上、「コンストラクタの数が一つであるような帰納型」を前構造体(prestructure)と呼ぶことにする。これはここだけの用語である。
The text was updated successfully, but these errors were encountered: