Невозможно явно определить количество типов. Если вы докажете лемму с переменной типа, она неявно доказана для всех экземпляров типа.
В некоторых случаях вы можете использовать обходной путь и использовать тип V
из записи AFP ZFC_in_HOL . Этот тип V
в основном является типом с таким количеством элементов, что существует инъективная функция (почти?) Каждого типа HOL в V
. Поэтому в некоторых случаях он может использоваться как некий тип Dynami c для экранирования системы типов.
theory ...
imports "ZFC_in_HOL.ZFC_Typeclasses"
begin
definition right_cancellation :: "('a ⇒ 'b) ⇒ bool" where
"right_cancellation f ≡ (∀g h :: 'b ⇒ V. g ∘ f = h ∘ f ⟶ g = h)"
В этом случае также можно показать, что определение не зависит от используемого типа. так что вы можете просто использовать bool
:
definition right_cancellation :: "'c itself ⇒ ('a ⇒ 'b) ⇒ bool" where
"right_cancellation t f ≡ (∀ g h :: 'b ⇒ 'c. g ∘ f = h ∘ f ⟶ g = h)"
lemma
fixes f:: "'x ⇒ 'y"
assumes as: "a1 ≠ (a2::'a)"
and r: "right_cancellation (A::'a itself) f"
shows "right_cancellation (B::'b itself) f"