lean-ja / lean-by-example

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

帰納型から、それが同じコンストラクタから来ているかどうかという関数を自動生成する #848

Open Seasawher opened 1 month ago

Seasawher commented 1 month ago

たとえば Nat.succ 2 と Nat.succ 3 は同じコンストラクタから来ているという意味では同じ。そういう同一視をする関数 Nat → Bool を定義するにはパターンマッチをすれば良いが、では自動生成できるか?

コード例にするとこんな感じ:

inductive EnumLike : Type where
  | foo (name : String)
  | bar (name : String)

def EnumLike.sameKind : EnumLike → EnumLike → Bool
  | EnumLike.foo _, EnumLike.foo _ => true
  | EnumLike.bar _, EnumLike.bar _ => true
  | _, _ => false
Seasawher commented 1 month ago

できれば、属性を自作することにより実現したい。