Создайте тип с коэффициентом поднятия с полиморфизмом над рабочим множеством и отношением эквивалентности в Изабель /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... *)

Является ли эта формализация, как представляется, две проблемы

  1. Я не думаю, что это самый чистый способ определить произвольный набор S как я не могу указать, чтобы он был не пустым...
  2. Я не могу определить произвольное отношение эквивалентности 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 которая является частью библиотеки.

Другие вопросы по тегам