(**************************************************************************) (* ___ *) (* ||M|| *) (* ||A|| A project by Andrea Asperti *) (* ||T|| *) (* ||I|| Developers: *) (* ||T|| The HELM team. *) (* ||A|| http://helm.cs.unibo.it *) (* \ / *) (* \ / This file is distributed under the terms of the *) (* v GNU General Public License Version 2 *) (* *) (**************************************************************************) include "basic_2/unfold/delift_lift.ma". include "basic_2/static/ssta_ssta.ma". include "basic_2/unwind/sstas_lift.ma". (* ITERATED STRATIFIED STATIC TYPE ASSIGNMENTON TERMS ***********************) (* Advanced inversion lemmas ************************************************) lemma sstas_inv_O: ∀h,g,L,T,U. ⦃h, L⦄ ⊢ T •*[g] U → ∀T0. ⦃h, L⦄ ⊢ T •[g , 0] T0 → U = T. #h #g #L #T #U #H @(sstas_ind_alt … H) -T // #T0 #U0 #l0 #HTU0 #_ #_ #T1 #HT01 elim (ssta_mono … HTU0 … HT01) (sstas_inv_O … HU12 … HUT1) -h -L -T1 -U2 // | #T0 #U0 #l0 #HTU0 #_ #IHU01 #U2 #HU12 lapply (sstas_inv_S … HU12 … HTU0) -T0 -l0 /2 width=1/ ] qed-. (* More advancd inversion lemmas ********************************************) fact sstas_inv_lref1_aux: ∀h,g,L,T,U. ⦃h, L⦄ ⊢ T •*[g] U → ∀j. T = #j → ∃∃I,K,V,W. ⇩[0, j] L ≡ K. ⓑ{I}V & ⦃h, K⦄ ⊢ V •*[g] W & L ⊢ ▼*[0, j + 1] U ≡ W. #h #g #L #T #U #H @(sstas_ind_alt … H) -T [ #T #HUT #j #H destruct elim (ssta_inv_lref1 … HUT) -HUT * #K #V #W [2: #l] #HLK #HVW #HVT [ (sstas_mono … HWX … HWT) -X -W /3 width=7/ ] ] qed-.