Module CanonicalValuesDoNotReduce

Set Implicit Arguments.
Require Import MyTactics.
Require Import Canonical.
Require Import SemanticsValues.

A sanity check: a canonical value does not reduce. This fact is actually unused.

Lemma canonical_values_do_not_reduce_preliminary:
(
  forall v1,
  canonical v1 ->
  forall v2,
  ~ redv v1 v2
) /\ (
  forall vs1,
  each_canonical vs1 ->
  forall vs2,
  ~ redvs vs1 vs2
).
Proof.
  apply canonical_induction; repeat intro;
  match goal with
  | h: redv _ _ |- _ => depelim h
  | h: redvs _ _ |- _ => depelim h
  end;
  intuition eauto.
Qed.

Definition canonical_values_do_not_reduce :=
  proj1 canonical_values_do_not_reduce_preliminary.