Если есть определение равенства в Изабель / ZF (точнее, IFOL):
axiomatization
eq :: ‹['a, 'a] ⇒ o› (infixl ‹=› 50)
where
refl: ‹a = a› and
subst: ‹a = b ⟹ P(a) ⟹ P(b)›
Как я могу это доказать:
lemma qu:
fixes C::‹i⇒o›
shows ‹C = C›
oops
Это даже не проверено на типизацию! И "эквалайзер" имеет полиморфный тип! Как это может быть?
Конечно, мы можем определить равенство классов:
definition
eqc :: "[(i⇒o),(i⇒o)]=>o" where
"eqc(A,B) == ∀x. A(x) ⟷ B(x)"
, но вопрос в том, чтобы включить (adhoc?) Полиморфизм в Изабель.