Я пытаюсь понять точный смысл :
(двоеточие) в Coq/ssreflect доказательствах в терминах non-ssreflect Coq.Когда есть `:` (двоеточие) в необходимом в ssreflect/Coq?
Я читал, что это как-то связано с перемещением вещей в цель (например, обобщение?) И является противоположностью =>
, которые перекладывают вещи на гипотезы. Тем не менее, я часто нахожу это запутанным, потому что доказательства работают либо с :
, либо без них. Ниже приведен пример из учебника:
Lemma tmirror_leaf2 t : tmirror (tmirror t) = Leaf -> t = Leaf.
Proof.
move=> e.
by apply: (tmirror_leaf (tmirror_leaf e)).
Qed.
где
tmirror_leaf
: forall t, tmirror t = Leaf -> t = Leaf
является лемма, которая говорит, что если зеркало дерева является листом, то дерево является листом.
Я не понимаю, зачем нам нужен :
, а не только Coq apply
. На самом деле, если я удалю :
, он работает отлично. Почему это имеет значение?