lean-ja / lean-by-example

コード例で学ぶ Lean 言語
https://lean-ja.github.io/lean-by-example/
MIT License
49 stars 7 forks source link

`CoeSort` の説明に誤り #1150

Closed Seasawher closed 1 day ago

Seasawher commented 1 day ago

Coe とどう違うのかの説明が間違っている。現状の説明では、「型宇宙へ」強制する場合には CoeSort でないといけないかのように見えるが、以下のように Coe で型宇宙への強制を行うことができる。

CoeCoeSort の違いは、「強制のトリガーがどこにあるのか」で説明すべき。

def zero (α : Type) : Nat := 0

/-- `Type` のラッパー -/
structure AltType where
  base : Type

def A : AltType := ⟨Nat⟩

/--
error: application type mismatch
  zero A
argument
  A
has type
  AltType : Type 1
but is expected to have type
  Type : Type 1
-/
#guard_msgs in #eval zero A

instance : Coe AltType Type := ⟨fun S ↦ S.base⟩

-- ちゃんと評価できる
#eval zero A