Как я могу доказать, что эти два утверждения равны:Решая равенство/неравенство в цели, Кок код
Val.shru (Val.and а (Vint б)) (Vint с) = Vint? 3434/\? 3434 <> d
Val.shru (Val.and а (Vint б)) (Vint с) <> d
концепция довольно проста, но застрял в нахождении правильную тактику для ее решения. Это на самом деле лемма я собираюсь доказать:
Require Import compcert.common.Values.
Require Import compcert.lib.Coqlib.
Require Import compcert.lib.Integers.
Lemma val_remains_int:
forall (a : val) (b c d: int),
(Val.shru (Val.and a (Vint b)) (Vint c)) <> (Vint d) ->
(exists (e : int), (Val.shru (Val.and a (Vint b)) (Vint c)) = (Vint e) /\ e <> d).
Proof.
intros.
eexists.
...
Admitted.
Спасибо,
У вас есть лемма о том, что любой член формы 'Val.shru Foo' можно переписать в 'Vint bar'? Основная проблема здесь в том, что вам нужно выставить 'e' с равенством, чтобы доказать левую сторону вашей цели. – Vinz