В моих доказательствах я достиг цели, похожей на следующую: (Фактические типы разные (zm: StringMap.string String.string, key и elt - String.string)). В моем коде, если у меня есть H: z1k <> z2k
в окружении, то его легко сделать intuition congruence
, но если у меня нет такой гипотезы, то я не могу доказать свою цель. Более того, я также не могу доказать v1 = v2
, что может помочь в доказательстве цели. Пожалуйста, если кто-нибудь поможет мне решить такие сценарии. Спасибо,строки и добавить в Coq
Parameter t : Type -> Type.
Variable key : Type.
Variable elt : Type.
Implicit Type m: t elt.
Implicit Type x y z: key.
Implicit Type e: elt.
Require String.
Record id : Type :=
build_id {
id_v : String.string;
id_k: key
}.
Parameter add : key -> elt -> t elt -> t elt.
Parameter MapsTo : key -> elt -> t elt -> Prop.
Lemma MyTest: forall v1 v2 (z1k z2k zk: key) (ze z1 z2: elt) zm,
build_id v1 z1k <> build_id v2 z2k ->
MapsTo zk ze (add z1k z1 (add z2k z2 zm)) ->
MapsTo zk ze (add z2k z2 (add z1k z1 zm)).
Proof.
Что делать, если 'v1 <> v2', но' z1k = z2k' и 'z1 <> z2'? Кроме того, можете ли вы перечислить теоремы, которые хранятся для 'add' и' MapsTo'? – Ptival
У вас есть что-то вроде MapsTo k e (add u v s) -> MapsTo k e s \/(k = u/\ e = v)? – Vinz
@Ptival Я поставил подробную версию проблемы на этом [ссылка] (http://stackoverflow.com/questions/15160579/solving-morphism-proper-functions-with-maps-in-coq) – Khan