X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2FLAMBDA-TYPES%2FUnified-Sub%2FLift%2Finv.ma;h=bbd8d744e7238a0d6ffd8e532080cf5bd50ae34c;hb=5c1b44dfefa085fbb56e23047652d3650be9d855;hp=d664e5f0724dee1dc62e59b78ae33d71185b827f;hpb=2b95f946837707c6ad30d1b8317d73c55cda3dc8;p=helm.git diff --git a/helm/software/matita/contribs/LAMBDA-TYPES/Unified-Sub/Lift/inv.ma b/helm/software/matita/contribs/LAMBDA-TYPES/Unified-Sub/Lift/inv.ma index d664e5f07..bbd8d744e 100644 --- a/helm/software/matita/contribs/LAMBDA-TYPES/Unified-Sub/Lift/inv.ma +++ b/helm/software/matita/contribs/LAMBDA-TYPES/Unified-Sub/Lift/inv.ma @@ -12,37 +12,25 @@ (* *) (**************************************************************************) -set "baseuri" "cic:/matita/LAMBDA-TYPES/Unified-Sub/Lift/inv". + include "Lift/defs.ma". (* Inversion properties *****************************************************) theorem lift_inv_sort_1: \forall l, i, h, x. - Lift l i (leaf (sort h)) x \to - x = leaf (sort h). - intros. inversion H; clear H; intros; - [ auto - | destruct H2 - | destruct H3 - | destruct H5 - | destruct H5 - ]. + Lift l i (sort h) x \to + x = sort h. + intros. inversion H; clear H; intros; destruct. autobatch. qed. theorem lift_inv_lref_1: \forall l, i, j1, x. - Lift l i (leaf (lref j1)) x \to - (i > j1 \land x = leaf (lref j1)) \lor + Lift l i (lref j1) x \to + (i > j1 \land x = lref j1) \lor (i <= j1 \land - \exists j2. (l + j1 == j2) \land x = leaf (lref j2) + \exists j2. (l + j1 == j2) \land x = lref j2 ). - intros. inversion H; clear H; intros; - [ destruct H1 - | destruct H2. clear H2. subst. auto - | destruct H3. clear H3. subst. auto depth = 5 - | destruct H5 - | destruct H5 - ]. + intros. inversion H; clear H; intros; destruct; autobatch depth = 5 size = 7. qed. theorem lift_inv_bind_1: \forall l, i, r, u1, t1, x. @@ -51,13 +39,7 @@ theorem lift_inv_bind_1: \forall l, i, r, u1, t1, x. Lift l i u1 u2 \land Lift l (succ i) t1 t2 \land x = intb r u2 t2. - intros. inversion H; clear H; intros; - [ destruct H1 - | destruct H2 - | destruct H3 - | destruct H5. clear H5 H1 H3. subst. auto depth = 5 - | destruct H5 - ]. + intros. inversion H; clear H; intros; destruct; autobatch depth = 5 size = 7. qed. theorem lift_inv_flat_1: \forall l, i, r, u1, t1, x. @@ -66,40 +48,22 @@ theorem lift_inv_flat_1: \forall l, i, r, u1, t1, x. Lift l i u1 u2 \land Lift l i t1 t2 \land x = intf r u2 t2. - intros. inversion H; clear H; intros; - [ destruct H1 - | destruct H2 - | destruct H3 - | destruct H5 - | destruct H5. clear H5 H1 H3. subst. auto depth = 5 - ]. + intros. inversion H; clear H; intros; destruct. autobatch depth = 5 size = 7. qed. theorem lift_inv_sort_2: \forall l, i, x, h. - Lift l i x (leaf (sort h)) \to - x = leaf (sort h). - intros. inversion H; clear H; intros; - [ auto - | destruct H3 - | destruct H4 - | destruct H6 - | destruct H6 - ]. + Lift l i x (sort h) \to + x = sort h. + intros. inversion H; clear H; intros; destruct. autobatch. qed. theorem lift_inv_lref_2: \forall l, i, x, j2. - Lift l i x (leaf (lref j2)) \to - (i > j2 \land x = leaf (lref j2)) \lor + Lift l i x (lref j2) \to + (i > j2 \land x = lref j2) \lor (i <= j2 \land - \exists j1. (l + j1 == j2) \land x = leaf (lref j1) + \exists j1. (l + j1 == j2) \land x = lref j1 ). - intros. inversion H; clear H; intros; - [ destruct H2 - | destruct H3. clear H3. subst. auto - | destruct H4. clear H4. subst. auto depth = 5 - | destruct H6 - | destruct H6 - ]. + intros. inversion H; clear H; intros; destruct; autobatch depth = 5 size = 10. qed. theorem lift_inv_bind_2: \forall l, i, r, x, u2, t2. @@ -108,13 +72,7 @@ theorem lift_inv_bind_2: \forall l, i, r, x, u2, t2. Lift l i u1 u2 \land Lift l (succ i) t1 t2 \land x = intb r u1 t1. - intros. inversion H; clear H; intros; - [ destruct H2 - | destruct H3 - | destruct H4 - | destruct H6. clear H5 H1 H3. subst. auto depth = 5 - | destruct H6 - ]. + intros. inversion H; clear H; intros; destruct. autobatch depth = 5 size = 7. qed. theorem lift_inv_flat_2: \forall l, i, r, x, u2, t2. @@ -123,55 +81,69 @@ theorem lift_inv_flat_2: \forall l, i, r, x, u2, t2. Lift l i u1 u2 \land Lift l i t1 t2 \land x = intf r u1 t1. - intros. inversion H; clear H; intros; - [ destruct H2 - | destruct H3 - | destruct H4 - | destruct H6 - | destruct H6. clear H6 H1 H3. subst. auto depth = 5 - ]. + intros. inversion H; clear H; intros; destruct. autobatch depth = 5 size = 7. qed. (* Corollaries of inversion properties ***************************************) theorem lift_inv_lref_1_gt: \forall l, i, j1, x. - Lift l i (leaf (lref j1)) x \to - i > j1 \to x = leaf (lref j1). - intros 5. - lapply linear lift_inv_lref_1 to H. decompose; subst; - [ auto + Lift l i (lref j1) x \to + i > j1 \to x = lref j1. + intros. + lapply linear lift_inv_lref_1 to H. decompose; destruct; + [ autobatch | lapply linear nle_false to H2, H1. decompose ]. - qed. +qed. theorem lift_inv_lref_1_le: \forall l, i, j1, x. - Lift l i (leaf (lref j1)) x \to - i <= j1 \to \forall j2. (l + j1 == j2) \to - x = leaf (lref j2). - intros 5. - lapply linear lift_inv_lref_1 to H. decompose; subst; + Lift l i (lref j1) x \to i <= j1 \to + \exists j2. (l + j1 == j2) \land x = lref j2. + intros. + lapply linear lift_inv_lref_1 to H. decompose; destruct; + [ lapply linear nle_false to H1, H2. decompose + | autobatch + ]. +qed. + +theorem lift_inv_lref_1_le_nplus: \forall l, i, j1, x. + Lift l i (lref j1) x \to + i <= j1 \to \forall j2. (l + j1 == j2) \to + x = lref j2. + intros. + lapply linear lift_inv_lref_1 to H. decompose; destruct; [ lapply linear nle_false to H1, H3. decompose - | lapply linear nplus_mono to H2, H4. subst. auto + | lapply linear nplus_mono to H2, H4. destruct. autobatch ]. qed. theorem lift_inv_lref_2_gt: \forall l, i, x, j2. - Lift l i x (leaf (lref j2)) \to - i > j2 \to x = leaf (lref j2). - intros 5. - lapply linear lift_inv_lref_2 to H. decompose; subst; - [ auto + Lift l i x (lref j2) \to + i > j2 \to x = lref j2. + intros. + lapply linear lift_inv_lref_2 to H. decompose; destruct; + [ autobatch | lapply linear nle_false to H2, H1. decompose ]. qed. theorem lift_inv_lref_2_le: \forall l, i, x, j2. - Lift l i x (leaf (lref j2)) \to - i <= j2 \to \forall j1. (l + j1 == j2) \to - x = leaf (lref j1). - intros 5. - lapply linear lift_inv_lref_2 to H. decompose; subst; + Lift l i x (lref j2) \to i <= j2 \to + \exists j1. (l + j1 == j2) \land x = lref j1. + intros. + lapply linear lift_inv_lref_2 to H. decompose; destruct; + [ lapply linear nle_false to H1, H2. decompose + | autobatch + ]. +qed. + +theorem lift_inv_lref_2_le_nplus: \forall l, i, x, j2. + Lift l i x (lref j2) \to + i <= j2 \to \forall j1. (l + j1 == j2) \to + x = lref j1. + intros. + lapply linear lift_inv_lref_2 to H. decompose; destruct; [ lapply linear nle_false to H1, H3. decompose - | lapply linear nplus_inj_2 to H2, H4. subst. auto + | lapply linear nplus_inj_2 to H2, H4. destruct. autobatch ]. qed.