Replace singleton intervals by integer constants.
Proof.
Proof.
Proof.
Proof.
intros m e z hden.
induction hden as [
x z h|
z|
z i h|
|
op e0 z1 z2 hden hind heval
|
op e1 e2 z1 z2 z3 hden1 hind1 hden2 hind2 heval];
intros e'
hr.
-
inversion hr.
assumption.
-
inversion hr.
reflexivity.
-
discriminate hr.
-
discriminate hr.
-
destruct op;
[
idtac|
discriminate hr].
simpl in hr.
destruct (
expr_aux e0);
[
idtac|
discriminate hr].
inversion hr.
inversion heval.
subst.
simpl.
rewrite hind;
reflexivity.
-
destruct op;
try discriminate hr ;
(
simpl in hr;
destruct (
expr_aux e1)
as [
e1'|];
[
idtac|
discriminate hr];
destruct (
expr_aux e2)
as [
e2'|];
[
idtac|
discriminate hr];
inversion hr;
inversion heval;
subst;
simpl;
rewrite hind1,
hind2;
reflexivity ).
OLD Omul case:
+ simpl in hr.
destruct e1;
try (
apply expr_aux_correct_mul1 with (e2 := e2) (z1 := z1) (z2 := z2);
[assumption|assumption|assumption|idtac];
inversion hden1;
subst;
assumption);
destruct e2;
try discriminate hr;
match goal with
| h: Expr.denote m ?e z1 |- _ =>
apply expr_aux_correct_mul2
with (e2 := e) (z1 := z2) (z2 := z1);
[assumption|assumption|assumption|idtac];
inversion hden2;
subst;
assumption
| _ => idtac
end.
*) Qed.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.
Proof.