Доказательство мощности конечного множества

Как я могу доказать в Изабель простое lemma cd : "card {m∈ℕ. m <4} = 4" заявление?

auto не помогает мне и как ни странно sledgehammer время ожидания (даже если я использую разные значения в правой части, например 3 или же 5 чтобы убедиться, что я не пропустил некоторые технические детали Изабеллы, которые, возможно, на самом деле заставляют кардиналов оценить один из этих номеров.)

У меня сложилось впечатление, что я должен использовать некоторые леммы (или получить вдохновение) от Set_Interval.thy поскольку такие наборы широко используются, но пока мне не удалось добиться прогресса.

2 ответа

Просто хотел добавить, что если переписать свою лемму "card {m::nat. m < n} = n"Изабель без проблем докажет это.

* Отредактировано, спасибо Мануэль.

Проблема с вашим утверждением в том, что оно не соответствует действительности. Посмотрите на определение ℕ с thm Nats_def: ℕ = range of_nat

of_nat является каноническим гомоморфизмом из натуральных в semiring_1 то есть полукольцо, которое имеет 1. Определение ℕ в основном говорит, что ℕ состоит из всех элементов кольца, которые имеют вид of_nat n для натурального числа n, Если вы посмотрите на тип {m∈ℕ. m <4}, вы увидите, что это 'a или если вы делаете declare [[show_sorts]] перед этим, 'a :: {ord, semiring_1} то есть полукольцо с 1 и некоторый порядок на нем. Это упорядочение не обязательно должно быть совместимо с кольцевой структурой и не должно быть линейным.

Вы можете подумать, что заданный вами набор всегда является набором {0, 1, 2, 3}, но поскольку упорядочение не обязательно должно быть совместимым со структурой кольца, это не так. Порядок может быть тривиально верным, поэтому вы получите все натуральные числа.

Кроме того, даже когда набор {0, 1, 2, 3} его мощность не обязательно равна 4. (Подумайте о кольце ℤ/2ℤ - тогда это множество будет равно {0, 1}, так что количество элементов 2)

Возможно, вы захотите немного ограничить тип вашего выражения. Я думаю, что правильный тип класса здесь linordered_semidom то есть полукольцо с 1, без делителей нуля и линейным порядком, совместимым с кольцевой структурой. Тогда вы можете сделать:

lemma cd : "card {m∈ℕ. m < (4 :: 'a :: linordered_semidom)} = 4"
proof -
  have "{m∈ℕ. m < (4 :: 'a)} = {m∈ℕ. m < (of_nat 4 :: 'a)}" by simp
  also have "… = of_nat ` {m. m < 4}"
    unfolding Nats_def by (auto simp del: of_nat_numeral)
  also have "card … = 4" by (auto simp: inj_on_def card_image)
  finally show ?thesis .
qed

Доказательство немного уродливо, учитывая, насколько интуитивно очевидно утверждение; Решение здесь заключается не в том, чтобы записать набор, который вы хотите описать, таким относительно неудобным способом. Требуется немного опыта, чтобы научиться писать вещи удобным способом.

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