Чтобы использовать sorted_list_of_set
, вы можете реализовать класс типов linorder
для типов продуктов:
instantiation prod :: (linorder,linorder) linorder begin
definition "less_eq_prod ≡ λ(x1,x2) (y1,y2). x1<y1 ∨ x1=y1 ∧ x2≤y2"
definition "less_prod ≡ λ(x1,x2) (y1,y2). x1<y1 ∨ x1=y1 ∧ x2<y2"
instance by standard (auto simp add: less_eq_prod_def less_prod_def)
end
Вы также можете импортировать "HOL-Library.Product_Lexorder"
из стандартной библиотеки, которая включает аналогичное определение.
Тогда вы можете определить set_to_list, если вы ограничите параметр типа для реализации linorder
:
definition set_to_list :: "('a::linorder×'a) set ⇒ ('a×'a) list"
where "set_to_list A = sorted_list_of_set A"