Это немного теоретический вопрос. Мы можем определить fx
, но казалось бы, не fx'
:Coq: Доказательство применения
Function fx {A} (x:A) (f:A->Type) (g:Type->f x): f x := g (f x).
Definition fx' {A} (x:A) (f:A->Type): f x.
В некотором смысле, это имеет смысл, так как никто не может доказать, из f
и x
что f
уже был (или будет) применяться к x
. Но мы можем применить f
к x
, чтобы получить что-то типа Type
:
assert (h := f x).
Это кажется странным: можно применить к f
x
но еще не может получить свидетельство y: f x
, что он сделал это.
Единственное объяснение, которое я могу придумать, это следующее: как тип, f x
- это приложение, как термин, это всего лишь тип. Мы не можем вывести прошлую заявку из типа; аналогично, мы не можем вывести будущее приложение из функции и ее потенциального аргумента. Что касается (экземпляра) применения себя, это не этап доказательства, поэтому мы не можем быть свидетелем этого. Но я просто догадываюсь. Вопрос:
Можно ли определить fx'
? Если да, то как; если нет, то почему (просьба дать теоретическое объяснение)
'Функция fx' на самом деле не нужна здесь,' Определение fx' тоже будет работать. –
Да (я использовал оба, чтобы показать, что обе работают) – jaam