Как я могу получить Coq, чтобы я смог доказать синтактическое c неравенство типов?
Отрицательная однолистность
Я прочитал ответ на этот вопрос , который предполагает, что если вы предполагаете однолистность, то единственный способ доказать неравенство типов - это аргументы кардинальности.
Насколько я понимаю, - если логика Кока c согласуется с однолистностью, она также должна согласовываться с отрицанием однозначности. Хотя я понимаю, что отрицание однолистности действительно означает, что некоторые изоморфные c типы не равны, я считаю, что express должно быть возможно, что no isomorphi c типы (которые не идентичны) равны.
Неравенство для конструкторов типов
Фактически, я бы хотел, чтобы Coq рассматривал типы и конструкторы типов как индуктивные определения и делал типичные inversion
аргумент в стиле, чтобы сказать, что два моих совершенно разных типа не равны.
Можно ли это сделать? Это должно быть:
- Используется для конкретных типов, то есть без переменных типа, и поэтому
- Не обязательно решаемо
Это кажется мне слабым достаточно, чтобы быть последовательным.
Контекст
У меня есть полиморфное c суждение (фактически индуктивный тип с параметрами forall X : Type, x -> Prop
), для которого конструкторы выбирают выбор X
суждения.
Я хочу доказать, что для всех суждений для определенного выбора X
(скажем, X = nat
) какое-то свойство имеет место, но если я пытаюсь использовать inversion
, некоторые конструкторы дают мне гипотезы типа nat = string
(например). Эти гипотезы о равенстве типов появляются даже для типов с одинаковым количеством элементов, поэтому я не могу (и не хочу) приводить аргументы количества элементов для создания противоречия.
Невероятное ...
Должен ли я создать Inductive
кодировку закрытого мира для типов, которые меня интересуют, и пусть это будет переменная polymorphi c приведенного выше суждения?