Я пытаюсь доказать известный факт, что существует стандартный способ построения algebriac_cpo из частичного порядка. Моя проблема в том, что я продолжаю получать сообщение об ошибке
Не удалось объединить тип: Нет заданного типа арности :: частичное_приказ
, и я не могу понять, что это значит.
Я думаю, что у меня есть отследил мою проблему до определения cpo. Определение работает, и я доказал различные результаты для него, но рабочая интерпретация part_order терпит неудачу с cpo.
theory LocaleProblem imports "HOL-Lattice.Bounds"
begin
definition directed:: "'a::partial_order set ⇒ bool" where
" directed a ≡
¬a={} ∧ ( ∀ a1 a2. a1∈a∧ a2∈a ⟶ (∃ ub . (is_Sup {a1,a2} ub))) "
class cpo = partial_order +
fixes bot :: "'a::partial_order" ("⊥")
assumes bottom: " ∀ x::'a. ⊥ ⊑ x "
assumes dlub: "directed (d::'a::partial_order set) ⟶ (∃ lub . is_Inf d lub) "
print_locale cpo
interpretation "idl" : partial_order
"(⊆)::( ('b set) ⇒ ('b set) ⇒ bool) "
by (unfold_locales , auto) (* works *)
interpretation "idl" : cpo
"(⊆)::( ('b set) ⇒ ('b set) ⇒ bool) "
"{}" (* gives error
Type unification failed: No type arity set :: partial_order
Failed to meet type constraint:
Term: (⊆) :: 'b set ⇒ 'b set ⇒ bool
Type: ??'a ⇒ ??'a ⇒ bool *)
Любая помощь высоко ценится. Дэвид
Вы предложили два решения. Следуя работе Hennessy в Algebrai c Теория процессов "Я пытаюсь доказать (где I (A) - идеал, являющийся множествами)" Если is_apart_order, то I (A) является algebraic_cpo ", тогда я захочу чтобы применить результат к ряду семантик, дайте в виде наборов. Доза, которую ваш комментарий означает, что второе решение не является хорошей идеей?
Изначально у меня была проверенная лемма, которая началась
lemma directed_ran: "directed (d::('a::partial_order×'b::partial_order) set) ⟹ directed (Range d)"
proof (unfold directed_def)
Первое решение хорошо началось:
context partial_order begin (* type 'a is now a partial_order *)
definition
is_Sup :: "'a set ⇒ 'a ⇒ bool" where
"is_Sup A sup = ((∀x ∈ A. x ⊑ sup) ∧ (∀z. (∀x ∈ A. x ⊑ z) ⟶ sup ⊑ z))"
definition directed:: "'a set ⇒ bool" where
" directed a ≡
¬a={} ∧ ( ∀ a1 a2. a1∈a∧ a2∈a ⟶ (∃ ub . (is_Sup {a1,a2} ub))) "
lemma directed_ran: "directed (d::('c::partial_order×'b::partial_order) set) ⟹ directed (Range d)"
proof - assume a:"directed d"
from a local.directed_def[of "d"] (* Fail with message below *)
show "directed (Range d)"
Увы, рабочая лемма теперь не работает: я переписал доказательства (развернуть local.directed_def), поэтому я исследовал и обнаружил, что хотя факт существования local.directed_def не может быть unified
Failed to meet type constraint:
Term: d :: ('c × 'b) set
Type: 'a set
Я успешно изменил тип в утверждении леммы, но теперь не могу найти способ развернуть определение в доказательстве. Есть ли способ сделать это?
Второе решение снова начинается хорошо:
instantiation set:: (type) partial_order
begin
definition setpoDef: "a⊑(b:: 'a set) = subset_eq a b"
instance proof
fix x::"'a set" show " x ⊑ x" by (auto simp: setpoDef)
fix x y z::"'a set" show "x ⊑ y ⟹ y ⊑ z ⟹ x ⊑ z" by(auto simp: setpoDef)
fix x y::"'a set" show "x ⊑ y ⟹ y ⊑ x ⟹ x = y" by (auto simp: setpoDef)
qed
end
, но следующий шаг не удался
instance proof
fix d show "directed d ⟶ (∃lub. is_Sup d (lub::'a set))"
proof assume "directed d " with directed_def[of "d"] show "∃lub. is_Sup d lub"
by (metis Sup_least Sup_upper is_SupI setpoDef)
qed
next
from class.cpo_axioms_def[of "bot"] show "∀x . ⊥ ⊑ x " (* Fails *)
qed
end
первый подцель доказан, но показывает "∀x. ⊑ ⊑ x "хотя вырезать вставку из субгаля в выводе не совпадает с подцелью. Обычно на этом этапе необходимо добавить ограничения типа. Но я не могу найти ни одной этой работы. Знаете ли вы, что идет не так? Знаете ли вы если я смогу заставить Output показать информацию о типе в sugoal.