Agda上の関数定義(続き)

本日Ktさんから教えていただいた話、備忘のため。
前回と同様、Aのデータ型は

A : Nat -> A
g : (n : Nat) -> ...

の形をしているとする。このとき、以下の関数 f0, f1 を考える(X : Set とする)。

  • f0 : X -> A zero
  • f1 : X -> A zero

さて、ここで新しい関数 hを以下のように定義する。

h : X -> X -> A zero -> A zero
h t0 t1 = f0 t0 -> f1 t1

こういう定義では、型エラーが起きてしまう。f0 t0がA zeroの型である証明が得られないそうだ。しかし以下のような方は問題なく定義できた。

hj : X -> X -> A zero -> A zero
hj t0 t1 = \(x : A zero) -> fj tj (ただし j=0 or 1)

つまり、Sortでない型がcodomainにくるのは問題がないみたいだ。