誘導誘導とは何ですか?


11

誘導誘導とは何ですか?

私が見つけたリソースは次のとおりです。

最初の2つの参照は私には短すぎますが、後の2つは専門的すぎます。誰でも簡単に説明できますか?Agdaコードがあればもっと良いでしょう。


4番目の引用にはAgdaコードがあります。
Gilles「SO-邪悪なことをやめなさい」

もちろん、その膨大な量のコードを読み取るのは非常に困難です。そして、(たぶん)1つまたは2つの例を見るだけで非常に簡単です。
盛安安

回答:


13

補足2016-10-03:帰納-帰納と帰納-再帰を混同しました(初めてではありませんでした!)。混乱の私の謝罪。両方をカバーするように答えを更新しました。

その説明は、Forsberg&Setzerの論文「帰納的帰納的定義の有限公理」にあります。

帰納再帰

帰納的再帰定義は、タイプとタイプファミリーを定義するものです特別な方法で同時に定義します。AB:AType

  1. Aは誘導型として定義されます。
  2. Bは再帰によって定義されます。A
  3. 重要なのは、の定義で使用ことです。AB

3番目の要件がない場合、最初にを定義し、次に個別に定義できます。AB

これが赤ちゃんの例です。次のコンストラクターを持つように帰納的に定義します。A

  • a:A
  • :(x:AB(x))A

タイプファミリーは、B

  • B(a)=bool
  • B((x,f))=nat

それで、は何がありますか?まず、要素そのため、として定義されている型あります。したがって、我々は、2つの新しい要素を形成することができるおよびにおける。これで、が得られたので、すべてのについても形成できます要素 と このように続けることができます。次の段階は、 A

a:A.
B(a)bool
(a,false)
(a,true)
AB((a,false))=B((a,true))=natn:nat
((a,false),n):A
((a,true),n):A
B(((a,true),n))=nat
ごとに存在します要素 と要素 続行できます。少し考えてみると、は自然数のリストの多かれ少なかれ2つのコピーであり、共通の空のリストを共有しています。その理由を理解するための演習として残しておきます。m:nat
(((a,true),n),m):A
(((a,false),n),m):A
A

誘導誘導

帰納的帰納的定義は、タイプとタイプファミリー同時に定義し:AB:AType

  1. Aは帰納的に定義されます
  2. Bは帰納的に定義され、参照する場合がありますA
  3. 重要なのは、 が参照することです。AB

帰納再帰と帰納帰納の違いを理解することが重要です。帰納的再帰では、という形式の方程式を提供して を定義します。 ここで、はコンストラクターです。誘導誘導定義では、定義元素形成するためのコンストラクタを提供することによって。B

B(c())=
c()ABB

前の例を帰納法として再定式化しましょう。最初に、帰納的に与えられたtpyeます:A

  • a:A
  • :(x:AB(x))A

タイプファミリーは、次のコンストラクターによって定義されます。B

  • Tru:B(a)
  • Fal:B(a)
  • もし及び、次にx:Ay:B(x)Zer:B((x,y))
  • if and and then。x:Ay:B(x)z:B((x,y))Suc(z):B((x,y))

ご覧のとおり、はブール値に(等値)であり、は自然数に(同型あるというの要素を生成するためのルールを提供しました。BB(a)B((x,y))


なぜ
一体

7
帰納-誘導型が何であるかを教えるために。実際の例、つまりタイプユニバースを紹介できますが、それは混乱を招きます。
Andrej Bauer

3
@AndrejBauerこれは、私にとって帰納再帰のように見えます。帰納-帰納は、型ファミリーが帰納型として定義されている場合です。
ガレーレ

2
おっと、あなたは完全に正しいです。直します。
Andrej Bauer

のドメインはPi型ではなくSigma型であるはずですか?
Dan Christensen、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.