Создайте тип с коэффициентом поднятия с полиморфизмом над рабочим множеством и отношением эквивалентности в Изабель /HOL
Я хотел бы создать частный тип с quotient_type
в Изабель /HOL, в котором я бы оставил "не сконструированный" непустое множество S
и отношение эквивалентности ≡
, Цель состоит в том, чтобы я получил общие свойства по отношению к S
а также ≡
над множеством поднятых S/≡
, Таким образом, было бы интересно, что Изабель /HOL принимает зависимые типы... Но мне сказали, что это невозможно.
Следовательно, я попробовал это
(* 1. Defining an arbitrary set and its associated type *)
consts S :: "'a set"
typedef ('a) inst = "{ x :: 'a. ¬ S = ({} :: 'a set) ⟶ x ∈ S}" by(auto)
(* 2. Defining the equivalence relation *)
definition equiv :: "'a ⇒ 'a ⇒ bool" where
"equiv x y = undefined"
(* here needs a property of equivalence relationship... *)
(* 3. Defining the quotiented set *)
quotient_type ('a) quotiented_set = "('a inst × 'a inst)" / "equiv"
(* Hence, impossible end proof here... *)
Является ли эта формализация, как представляется, две проблемы
- Я не думаю, что это самый чистый способ определить произвольный набор
S
как я не могу указать, чтобы он был не пустым... - Я не могу определить произвольное отношение эквивалентности
equiv
сdefinition
ниfun
команды, поскольку они только позволяют мне определять только "конструктивно-сильно нормализующие-индуктивные" определения... И все же, я хочу сказать, что у меня просто есть какая-то функцияequiv
который удовлетворяет свойствам эквивалентности (рефлексивность, симметрия, транзитивность).
Есть ли у вас какие-либо идеи? Благодарю.
1 ответ
Типы HOL не могут зависеть от значений. Так что если вы хотите определить фактор-тип для произвольного непустого множества S
и отношение эквивалентности equiv
с помощью quotient_type
произвольная часть должна оставаться на метауровне. Таким образом, S
а также equiv
может быть аксиоматизирован или определен так, что вы можете убедить себя, что действительно захватили желаемое понятие произвольности.
Если вы аксиоматизируете S
а также equiv
, тогда вы сами несете ответственность за то, что аксиомы согласуются с другими аксиомами HOL. Вы можете сделать это с помощью команды axiomatization
как в
axiomatization S :: "'a set" where S_not_empty: "S ≠ {}"
Для Изабель /HOL, S
является фиксированной константой, о которой вы знаете только, что она не пустая. Вы никогда не сможете создать экземпляр S
потому что произвол существует только в теоретико-множественной интерпретации Изабель /HOL.
Если вы не хотите добавлять новые аксиомы, вы можете использовать specification
вместо:
consts S :: "'a set"
specification (S) S_not_empty: "S ≠ {}" by auto
С specification
Вы должны доказать, что ваши аксиомы последовательны, поэтому здесь нет никакой опасности. Тем не мение, S
больше не является абсолютно произвольным, потому что он определяется в терминах оператора выбора Eps
, как видно из сгенерированной теоремы S_def
,
Если вы действительно хотите изучить теорию факторов в Isabelle/HOL, я рекомендую вам использовать не типы, а обычные множества. Есть фактор-оператор op //
и некоторые теоремы в теории Equiv_Relations
которая является частью библиотеки.