Я использую тип Ensemble
для наборов в Coq.Sets.Ensemble
. Эта библиотека определяет Union
и Intersection
, но я не могу найти конструкцию для декартового произведения.
Если быть точным, я ищу конструктор, который принимает Ensemble U
и Ensemble V
и возвращает Ensemble (U * V)
, который содержит набор всех упорядоченных пар (u, v)
, где u ∈ U
и v ∈ V
.
Что-то явно названное Cartesian
было бы замечательно. Или, может быть, есть какой-то способ внедрить ту же идею, используя обычные типы продуктов?
Я пытался построить лемму так:
Lemma cartesian_inclusion : forall A B C D : Ensemble U,
Included U A C /\ Included U B D -> Included (U * U) (A, B) (C, D).
Но я получаю следующую ошибку:
The term "(A, B)" has type "(Ensemble U * Ensemble U)%type" while it is expected to have type "Ensemble (U * U)".
Эта ошибка имеет смысл. (A, B)
дает вам продукт наборов, тогда как мне нужен набор продуктов. Как я могу выразить это в Coq?