Commit bf5f1fb2 by Joachim Bard

### fixing final proof for expressions

parent 1186f241
 ... @@ -1074,9 +1074,67 @@ Module ExprOrderedType (V_ordered:OrderType) <: OrderType. ... @@ -1074,9 +1074,67 @@ Module ExprOrderedType (V_ordered:OrderType) <: OrderType. - apply nat_compare_lt in c1. apply nat_compare_lt in c2. - apply nat_compare_lt in c1. apply nat_compare_lt in c2. assert (c3: (n ?= n1)%nat = Lt) by (apply nat_compare_lt; omega). assert (c3: (n ?= n1)%nat = Lt) by (apply nat_compare_lt; omega). now rewrite c3. } now rewrite c3. } { admit. } { destruct (n ?= n0)%nat eqn:c1; destruct (n0 ?= n1)%nat eqn:c2; try congruence. { admit. } - apply Nat.compare_eq in c1. apply Nat.compare_eq in c2. subst. { admit. } rewrite Nat.compare_refl. apply mTypeEq_compat_eq in Heqb. subst. rewrite Heqb0. auto. - apply Nat.compare_eq in c1. subst. rewrite c2. now destruct (mTypeEq m m1). - apply Nat.compare_eq in c2. subst. rewrite c1. now destruct (mTypeEq m m1). - apply nat_compare_lt in c1. apply nat_compare_lt in c2. assert (c3: (n ?= n1)%nat = Lt) by (apply nat_compare_lt; omega). rewrite c3. now destruct (mTypeEq m m1). } { destruct (n ?= n0)%nat eqn:c1; destruct (n0 ?= n1)%nat eqn:c2; try congruence. - apply Nat.compare_eq in c1. apply Nat.compare_eq in c2. subst. rewrite Nat.compare_refl. apply mTypeEq_compat_eq in Heqb0. subst. rewrite Heqb. auto. - apply Nat.compare_eq in c1. subst. rewrite c2. now destruct (mTypeEq m m1). - apply Nat.compare_eq in c2. subst. rewrite c1. now destruct (mTypeEq m m1). - apply nat_compare_lt in c1. apply nat_compare_lt in c2. assert (c3: (n ?= n1)%nat = Lt) by (apply nat_compare_lt; omega). rewrite c3. now destruct (mTypeEq m m1). } { destruct (n ?= n0)%nat eqn:c1; destruct (n0 ?= n1)%nat eqn:c2; try congruence. - apply Nat.compare_eq in c1. apply Nat.compare_eq in c2. subst. rewrite Nat.compare_refl. destruct (mTypeEq m m1) eqn:?. + type_conv. destruct (morePrecise m1 m0) eqn:prec1; destruct (morePrecise m0 m1) eqn:prec2; destruct m0, m1; simpl in *; try congruence; try auto; destruct (w ?= w0) eqn:case_w0; rewrite Pos.compare_antisym in lt_e1_e2; rewrite case_w0 in *; cbn in *; try congruence; rewrite N.compare_antisym, lt_e2_e3 in lt_e1_e2; cbn in *; congruence. + type_conv; subst. destruct (morePrecise m1 m0) eqn:prec1; destruct (morePrecise m0 m1) eqn:prec2; destruct m, m0, m1; simpl in *; try congruence; try auto; destruct (w ?= w0) eqn:case_w0; destruct (w0 ?= w1) eqn:case_w1; try (apply Ndec.Pcompare_Peqb in case_w0); try (apply Ndec.Pcompare_Peqb in case_w1); try rewrite Pos.eqb_eq in *; try rewrite N.eqb_eq in *; subst; try congruence; try rewrite case_w0; try rewrite case_w1; try auto; try rewrite Pos.compare_refl; try (rewrite N.compare_lt_iff in *; eapply N.lt_trans; eauto); assert (w ?= w1 = Lt) as G by (rewrite Pos.compare_lt_iff in *; eapply Pos.lt_trans; eauto); rewrite G; auto. - apply Nat.compare_eq in c1. subst. rewrite c2. now destruct (mTypeEq m m1). - apply Nat.compare_eq in c2. subst. rewrite c1. now destruct (mTypeEq m m1). - apply nat_compare_lt in c1. apply nat_compare_lt in c2. assert (c3: (n ?= n1)%nat = Lt) by (apply nat_compare_lt; omega). rewrite c3. now destruct (mTypeEq m m1). } (* (* destruct (morePrecise m m0); destruct m, m0; try congruence; destruct (morePrecise m m0); destruct m, m0; try congruence; ... @@ -1134,7 +1192,7 @@ Module ExprOrderedType (V_ordered:OrderType) <: OrderType. ... @@ -1134,7 +1192,7 @@ Module ExprOrderedType (V_ordered:OrderType) <: OrderType. try (erewrite exprCompare_eq_lt_is_lt; eauto; fail); try (erewrite exprCompare_eq_lt_is_lt; eauto; fail); try (erewrite exprCompare_lt_eq_is_lt; eauto; fail); try (erewrite exprCompare_lt_eq_is_lt; eauto; fail); try (erewrite IHe1_2; eauto). try (erewrite IHe1_2; eauto). Admitted. Qed. Instance eq_compat: Proper (eq ==> eq ==> iff) eq. Instance eq_compat: Proper (eq ==> eq ==> iff) eq. Proof. Proof. ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!