]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/contribs/RELATIONAL/NPlus/monoid.ma
Unified-Sub: lift_comm completed
[helm.git] / helm / software / matita / contribs / RELATIONAL / NPlus / monoid.ma
index 804485e5436680aecf63066c67d5baf3c739a5ac..a7d56eeb3e2f1e4ddf9bdd1672747bc6641eb0de 100644 (file)
@@ -27,6 +27,14 @@ theorem nplus_succ_1: \forall p,q,r. NPlus p q r \to
  intros. elim H; clear H q r; auto.
 qed.
 
+theorem nplus_comm: \forall p, q, x. (p + q == x) \to
+                    \forall y. (q + p == y) \to x = y.
+ intros 4; elim H; clear H q x;
+ [ lapply linear nplus_inv_zero_1 to H1
+ | lapply linear nplus_inv_succ_1 to H3. decompose
+ ]; subst; auto.
+qed.
+
 theorem nplus_comm_rew: \forall p,q,r. (p + q == r) \to q + p == r.
  intros. elim H; clear H q r; auto.
 qed.
@@ -40,13 +48,26 @@ qed.
 
 (* Corollaries of nonoidal properties ***************************************)
 
+theorem nplus_comm_1: \forall p1, q, r1. (p1 + q == r1) \to
+                      \forall p2, r2. (p2 + q == r2) \to
+                      \forall x. (p2 + r1 == x) \to 
+                      \forall y. (p1 + r2 == y) \to
+                      x = y.
+ intros 4. elim H; clear H q r1;
+ [ lapply linear nplus_inv_zero_2 to H1
+ | lapply linear nplus_inv_succ_2 to H3.
+   lapply linear nplus_inv_succ_2 to H4. decompose. subst.
+   lapply linear nplus_inv_succ_2 to H5. decompose
+ ]; subst; auto.
+qed.
+
 theorem nplus_comm_1_rew: \forall p1,q,r1. (p1 + q == r1) \to
                           \forall p2,r2. (p2 + q == r2) \to
                           \forall s. (p1 + r2 == s) \to (p2 + r1 == s).
  intros 4. elim H; clear H q r1;
- [ lapply linear nplus_gen_zero_2 to H1. subst
- | lapply linear nplus_gen_succ_2 to H3. decompose. subst.
-   lapply linear nplus_gen_succ_2 to H4. decompose. subst
+ [ lapply linear nplus_inv_zero_2 to H1. subst
+ | lapply linear nplus_inv_succ_2 to H3. decompose. subst.
+   lapply linear nplus_inv_succ_2 to H4. decompose. subst
  ]; auto.
 qed.
 
@@ -54,14 +75,14 @@ qed.
 theorem nplus_shift_succ_sx: \forall p,q,r. 
                              (p + (succ q) == r) \to (succ p) + q == r.
  intros.
- lapply linear nplus_gen_succ_2 to H as H0.
+ lapply linear nplus_inv_succ_2 to H as H0.
  decompose. subst. auto new timeout=100.
 qed.
 
 theorem nplus_shift_succ_dx: \forall p,q,r. 
                              ((succ p) + q == r) \to p + (succ q) == r.
  intros.
- lapply linear nplus_gen_succ_1 to H as H0.
+ lapply linear nplus_inv_succ_1 to H as H0.
  decompose. subst. auto new timeout=100.
 qed.
 
@@ -69,11 +90,11 @@ theorem nplus_trans_1: \forall p,q1,r1. (p + q1 == r1) \to
                        \forall q2,r2. (r1 + q2 == r2) \to
                        \exists q. (q1 + q2 == q) \land p + q == r2.
  intros 2; elim q1; clear q1; intros;
- [ lapply linear nplus_gen_zero_2 to H as H0.
+ [ lapply linear nplus_inv_zero_2 to H as H0.
    subst.
- | lapply linear nplus_gen_succ_2 to H1 as H0.
+ | lapply linear nplus_inv_succ_2 to H1 as H0.
    decompose. subst.
-   lapply linear nplus_gen_succ_1 to H2 as H0.
+   lapply linear nplus_inv_succ_1 to H2 as H0.
    decompose. subst.
    lapply linear H to H4, H3 as H0.
    decompose.
@@ -84,15 +105,14 @@ theorem nplus_trans_2: \forall p1,q,r1. (p1 + q == r1) \to
                        \forall p2,r2. (p2 + r1 == r2) \to
                        \exists p. (p1 + p2 == p) \land p + q == r2.
  intros 2; elim q; clear q; intros;
- [ lapply linear nplus_gen_zero_2 to H as H0.
+ [ lapply linear nplus_inv_zero_2 to H as H0.
    subst
- | lapply linear nplus_gen_succ_2 to H1 as H0.
+ | lapply linear nplus_inv_succ_2 to H1 as H0.
    decompose. subst.
-   lapply linear nplus_gen_succ_2 to H2 as H0.
+   lapply linear nplus_inv_succ_2 to H2 as H0.
    decompose. subst.
    lapply linear H to H4, H3 as H0.
    decompose.
  ]; apply ex_intro; [| auto new timeout=100 || auto new timeout=100 ]. (**)
 qed.
 *)
-