Skip to content

Instantly share code, notes, and snippets.

@nkaretnikov
Created May 30, 2015 02:41
Show Gist options
  • Save nkaretnikov/b93957d383155e1043bd to your computer and use it in GitHub Desktop.
Save nkaretnikov/b93957d383155e1043bd to your computer and use it in GitHub Desktop.
optimize_plus0
Theorem optimize_plus0_sound: forall a,
aeval (optimize_plus0 a) = aeval a.
Proof.
intros a.
induction a.
Case "ANum". reflexivity.
Case "APlus". destruct a2.
SCase "a2 = ANum n". destruct n.
SSCase "n = 0". simpl. rewrite IHa1. rewrite plus_0_r. reflexivity.
SSCase "n <> 0". simpl. rewrite IHa1. reflexivity.
SCase "a2 = APlus a2_1 a2_2".
simpl. simpl in IHa2. rewrite IHa2.
rewrite IHa1. reflexivity.
SCase "a2 = AMinus a2_1 a2_2".
simpl. simpl in IHa2. rewrite IHa2.
rewrite IHa1. reflexivity.
SCase "a2 = AMult a2_1 a2_2".
simpl. simpl in IHa2. rewrite IHa2.
rewrite IHa1. reflexivity.
Case "AMinus".
simpl. rewrite IHa2. rewrite IHa1. reflexivity.
Case "AMult".
simpl. rewrite IHa2. rewrite IHa1. reflexivity.
Qed.
Theorem optimize_plus0_sound': forall a,
aeval (optimize_plus0 a) = aeval a.
Proof.
intros. induction a;
try (simpl; try (rewrite IHa2; rewrite IHa1); reflexivity);
destruct a2;
try (destruct n; simpl; rewrite IHa1; try rewrite plus_0_r; reflexivity);
try (simpl; simpl in IHa2; rewrite IHa2; rewrite IHa1; reflexivity).
Qed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment