Я пытаюсь уловить тот факт, что в любом идемпотентном полукольце в Изабель / ХОЛ есть индуцированное частичное упорядочение, но у меня возникают проблемы при разработке наилучшего / правильного способа сделать это.
Я определяю:
class idem_semiring_1 = semiring_1 +
assumes idem [algebra_simps]: ‹a + a = a›
begin
definition less_eq :: ‹'a ⇒ 'a ⇒ bool›
where ‹less_eq a b ⟷ a + b = b›
definition less :: ‹'a ⇒ 'a ⇒ bool›
where ‹less a b ⟷ less_eq a b ∧ ¬ less_eq b a›
end
Теперь просто продемонстрировать, что less_eq
и less
удовлетворяют всем законам класса order
.Однако существует ли способ убедить Изабель / HOL, что любой экземпляр idem_semiring_1
также обязательно является экземпляром order
с использованием этих определений, так что следующие проверки типов запроса?
term ‹(y::'a::{idem_semiring_1}) ≤ x›
НетСочетание подкласса, сублокала и т. д., заклинания, кажется, добиваются того, чего я хочу.В частности, следующее:
sublocale idem_semiring_1 ⊆ order less_eq less
by (standard; clarsimp simp add: algebra_simps less_eq_def less_def) (metis add.assoc)
, кажется, работает, так как в следующих леммах тривиально доказывается с помощью simp
:
lemma
fixes x::‹'a::{idem_semiring_1}›
shows ‹less_eq x x›
by simp
lemma
assumes ‹less_eq x y›
and ‹less_eq y z›
shows ‹less_eq x z›
using assms by simp
, но следующее не проверяет тип:
lemma
fixes x :: ‹'a::{idem_semiring_1}›
shows ‹x ≤ x›
Что я не делаю, чтобы убедить Изабель связать синтаксис ≤
с определением less_eq
?