# HG changeset patch # User Cezary Kaliszyk # Date 1264790527 -3600 # Node ID 333c24bd595d25ff10dc905dab2a3e6d750cb3cd # Parent 5c0d9a507bcbac163e6afbe466200f398543a807 More in the LF example in the new nominal way, all is clear until support. diff -r 5c0d9a507bcb -r 333c24bd595d Quot/Nominal/LFex.thy --- a/Quot/Nominal/LFex.thy Fri Jan 29 13:47:05 2010 +0100 +++ b/Quot/Nominal/LFex.thy Fri Jan 29 19:42:07 2010 +0100 @@ -26,13 +26,14 @@ where "rfv_kind (Type) = {}" | "rfv_kind (KPi A x K) = (rfv_ty A) \ ((rfv_kind K) - {atom x})" -| "rfv_ty (TConst i) = {}" +| "rfv_ty (TConst i) = {atom i}" | "rfv_ty (TApp A M) = (rfv_ty A) \ (rfv_trm M)" | "rfv_ty (TPi A x B) = (rfv_ty A) \ ((rfv_ty B) - {atom x})" -| "rfv_trm (Const i) = {}" +| "rfv_trm (Const i) = {atom i}" | "rfv_trm (Var x) = {atom x}" | "rfv_trm (App M N) = (rfv_trm M) \ (rfv_trm N)" | "rfv_trm (Lam A x M) = (rfv_ty A) \ ((rfv_trm M) - {atom x})" +print_theorems instantiation kind and ty and trm :: pt begin @@ -111,7 +112,7 @@ by (size_change) *) -lemma akind_aty_artm_inj: +lemma akind_aty_atrm_inj: "(Type) \ki (Type) = True" "(KPi A x K) \ki (KPi A' x' K') = (A \ty A' \ (\pi. (rfv_kind K - {atom x} = rfv_kind K' - {atom x'} \ (rfv_kind K - {atom x})\* pi \ (pi \ K) \ki K' \ (pi \ x) = x')))" "(TConst i) \ty (TConst j) = (i = j)" @@ -377,6 +378,29 @@ \ P10 kind \ P20 ty \ P30 trm" by (lifting kind_ty_trm.induct) +thm kind_ty_trm.inducts + +lemma KIND_TY_TRM_inducts: +"\P10 TYP; \ty name kind. \P20 ty; P10 kind\ \ P10 (KPI ty name kind); \ident. P20 (TCONST ident); + \ty trm. \P20 ty; P30 trm\ \ P20 (TAPP ty trm); + \ty1 name ty2. \P20 ty1; P20 ty2\ \ P20 (TPI ty1 name ty2); \ident. P30 (CONS ident); + \name. P30 (VAR name); \trm1 trm2. \P30 trm1; P30 trm2\ \ P30 (APP trm1 trm2); + \ty name trm. \P20 ty; P30 trm\ \ P30 (LAM ty name trm)\ +\ P10 kind" +"\P10 TYP; \ty name kind. \P20 ty; P10 kind\ \ P10 (KPI ty name kind); \ident. P20 (TCONST ident); + \ty trm. \P20 ty; P30 trm\ \ P20 (TAPP ty trm); + \ty1 name ty2. \P20 ty1; P20 ty2\ \ P20 (TPI ty1 name ty2); \ident. P30 (CONS ident); + \name. P30 (VAR name); \trm1 trm2. \P30 trm1; P30 trm2\ \ P30 (APP trm1 trm2); + \ty name trm. \P20 ty; P30 trm\ \ P30 (LAM ty name trm)\ +\ P20 ty" +"\P10 TYP; \ty name kind. \P20 ty; P10 kind\ \ P10 (KPI ty name kind); \ident. P20 (TCONST ident); + \ty trm. \P20 ty; P30 trm\ \ P20 (TAPP ty trm); + \ty1 name ty2. \P20 ty1; P20 ty2\ \ P20 (TPI ty1 name ty2); \ident. P30 (CONS ident); + \name. P30 (VAR name); \trm1 trm2. \P30 trm1; P30 trm2\ \ P30 (APP trm1 trm2); + \ty name trm. \P20 ty; P30 trm\ \ P30 (LAM ty name trm)\ +\ P30 trm" +by (lifting kind_ty_trm.inducts) + instantiation KIND and TY and TRM :: pt begin @@ -395,9 +419,7 @@ as "permute :: perm \ trm \ trm" -term "permute_TRM" -thm permute_kind_permute_ty_permute_trm.simps -lemma [simp]: +lemma permute_ktt[simp]: shows "pi \ TYP = TYP" and "pi \ (KPI t n k) = KPI (pi \ t) (pi \ n) (pi \ k)" and "pi \ (TCONST i) = TCONST (pi \ i)" @@ -415,13 +437,13 @@ apply simp_all done -lemma perm_add_ok: "((p1 + q1) \ (x1 :: KIND) = (p1 \ q1 \ (x1 :: KIND))) \ ((p2 + q2) \ (x2 :: TY) = p2 \ q2 \ x2) \ ((p3 + q3) \ (x3 :: TRM) = p3 \ q3 \ x3)" -apply(rule KIND_TY_TRM_induct[of -"\x1. ((p1 + q1) \ (x1 :: KIND) = (p1 \ q1 \ x1))" -"\x2. ((p2 + q2) \ (x2 :: TY) = p2 \ q2 \ x2)" -"\x3. ((p3 + q3) \ (x3 :: TRM) = p3 \ q3 \ x3)"]) +lemma perm_add_ok: + "((p + q) \ (x1 :: KIND) = (p \ q \ x1))" + "((p + q) \ (x2 :: TY) = p \ q \ x2)" + "((p + q) \ (x3 :: TRM) = p \ q \ x3)" +apply(induct x1 and x2 and x3 rule: KIND_TY_TRM_inducts) apply (simp_all) -sorry +done instance apply default @@ -452,8 +474,156 @@ \ P30 (LAM A x M) (LAM A' x' M')\ \ (x10 = x20 \ P10 x10 x20) \ (x30 = x40 \ P20 x30 x40) \ (x50 = x60 \ P30 x50 x60)" -apply (lifting akind_aty_atrm.induct) -done +by (lifting akind_aty_atrm.induct) + +lemma AKIND_ATY_ATRM_inducts: +"\x10 = x20; P10 TYP TYP; + \A A' K x K' x'. + \A = A'; P20 A A'; + \pi. fv_kind K - {atom x} = fv_kind K' - {atom x'} \ + (fv_kind K - {atom x}) \* pi \ ((pi \ K) = K' \ P10 (pi \ K) K') \ pi \ x = x'\ + \ P10 (KPI A x K) (KPI A' x' K'); + \i j. i = j \ P20 (TCONST i) (TCONST j); + \A A' M M'. \A = A'; P20 A A'; M = M'; P30 M M'\ \ P20 (TAPP A M) (TAPP A' M'); + \A A' B x B' x'. + \A = A'; P20 A A'; + \pi. fv_ty B - {atom x} = fv_ty B' - {atom x'} \ + (fv_ty B - {atom x}) \* pi \ ((pi \ B) = B' \ P20 (pi \ B) B') \ pi \ x = x'\ + \ P20 (TPI A x B) (TPI A' x' B'); + \i j. i = j \ P30 (CONS i) (CONS j); \x y. x = y \ P30 (VAR x) (VAR y); + \M M' N N'. \M = M'; P30 M M'; N = N'; P30 N N'\ \ P30 (APP M N) (APP M' N'); + \A A' M x M' x'. + \A = A'; P20 A A'; + \pi. fv_trm M - {atom x} = fv_trm M' - {atom x'} \ + (fv_trm M - {atom x}) \* pi \ ((pi \ M) = M' \ P30 (pi \ M) M') \ pi \ x = x'\ + \ P30 (LAM A x M) (LAM A' x' M')\ +\ P10 x10 x20" +"\x30 = x40; P10 TYP TYP; + \A A' K x K' x'. + \A = A'; P20 A A'; + \pi. fv_kind K - {atom x} = fv_kind K' - {atom x'} \ + (fv_kind K - {atom x}) \* pi \ ((pi \ K) = K' \ P10 (pi \ K) K') \ pi \ x = x'\ + \ P10 (KPI A x K) (KPI A' x' K'); + \i j. i = j \ P20 (TCONST i) (TCONST j); + \A A' M M'. \A = A'; P20 A A'; M = M'; P30 M M'\ \ P20 (TAPP A M) (TAPP A' M'); + \A A' B x B' x'. + \A = A'; P20 A A'; + \pi. fv_ty B - {atom x} = fv_ty B' - {atom x'} \ + (fv_ty B - {atom x}) \* pi \ ((pi \ B) = B' \ P20 (pi \ B) B') \ pi \ x = x'\ + \ P20 (TPI A x B) (TPI A' x' B'); + \i j. i = j \ P30 (CONS i) (CONS j); \x y. x = y \ P30 (VAR x) (VAR y); + \M M' N N'. \M = M'; P30 M M'; N = N'; P30 N N'\ \ P30 (APP M N) (APP M' N'); + \A A' M x M' x'. + \A = A'; P20 A A'; + \pi. fv_trm M - {atom x} = fv_trm M' - {atom x'} \ + (fv_trm M - {atom x}) \* pi \ ((pi \ M) = M' \ P30 (pi \ M) M') \ pi \ x = x'\ + \ P30 (LAM A x M) (LAM A' x' M')\ + \ P20 x30 x40" +"\x50 = x60; P10 TYP TYP; + \A A' K x K' x'. + \A = A'; P20 A A'; + \pi. fv_kind K - {atom x} = fv_kind K' - {atom x'} \ + (fv_kind K - {atom x}) \* pi \ ((pi \ K) = K' \ P10 (pi \ K) K') \ pi \ x = x'\ + \ P10 (KPI A x K) (KPI A' x' K'); + \i j. i = j \ P20 (TCONST i) (TCONST j); + \A A' M M'. \A = A'; P20 A A'; M = M'; P30 M M'\ \ P20 (TAPP A M) (TAPP A' M'); + \A A' B x B' x'. + \A = A'; P20 A A'; + \pi. fv_ty B - {atom x} = fv_ty B' - {atom x'} \ + (fv_ty B - {atom x}) \* pi \ ((pi \ B) = B' \ P20 (pi \ B) B') \ pi \ x = x'\ + \ P20 (TPI A x B) (TPI A' x' B'); + \i j. i = j \ P30 (CONS i) (CONS j); \x y. x = y \ P30 (VAR x) (VAR y); + \M M' N N'. \M = M'; P30 M M'; N = N'; P30 N N'\ \ P30 (APP M N) (APP M' N'); + \A A' M x M' x'. + \A = A'; P20 A A'; + \pi. fv_trm M - {atom x} = fv_trm M' - {atom x'} \ + (fv_trm M - {atom x}) \* pi \ ((pi \ M) = M' \ P30 (pi \ M) M') \ pi \ x = x'\ + \ P30 (LAM A x M) (LAM A' x' M')\ +\ P30 x50 x60" +by (lifting akind_aty_atrm.inducts) + +lemma KIND_TY_TRM_INJECT: + "(TYP) = (TYP) = True" + "(KPI A x K) = (KPI A' x' K') = (A = A' \ (\pi. (fv_kind K - {atom x} = fv_kind K' - {atom x'} \ (fv_kind K - {atom x})\* pi \ (pi \ K) = K' \ (pi \ x) = x')))" + "(TCONST i) = (TCONST j) = (i = j)" + "(TAPP A M) = (TAPP A' M') = (A = A' \ M = M')" + "(TPI A x B) = (TPI A' x' B') = ((A = A') \ (\pi. fv_ty B - {atom x} = fv_ty B' - {atom x'} \ (fv_ty B - {atom x})\* pi \ (pi \ B) = B' \ (pi \ x) = x'))" + "(CONS i) = (CONS j) = (i = j)" + "(VAR x) = (VAR y) = (x = y)" + "(APP M N) = (APP M' N') = (M = M' \ N = N')" + "(LAM A x M) = (LAM A' x' M') = (A = A' \ (\pi. fv_trm M - {atom x} = fv_trm M' - {atom x'} \ (fv_trm M - {atom x})\* pi \ (pi \ M) = M' \ (pi \ x) = x'))" +by (lifting akind_aty_atrm_inj) + +lemma fv_kind_ty_trm: + "fv_kind TYP = {}" + "fv_kind (KPI A x K) = fv_ty A \ (fv_kind K - {atom x})" + "fv_ty (TCONST i) = {atom i}" + "fv_ty (TAPP A M) = fv_ty A \ fv_trm M" + "fv_ty (TPI A x B) = fv_ty A \ (fv_ty B - {atom x})" + "fv_trm (CONS i) = {atom i}" + "fv_trm (VAR x) = {atom x}" + "fv_trm (APP M N) = fv_trm M \ fv_trm N" + "fv_trm (LAM A x M) = fv_ty A \ (fv_trm M - {atom x})" +by(lifting rfv_kind_rfv_ty_rfv_trm.simps) + +lemma fv_eqvt: + "(p \ fv_kind t1) = fv_kind (p \ t1)" + "(p \ fv_ty t2) = fv_ty (p \ t2)" + "(p \ fv_trm t3) = fv_trm (p \ t3)" +by(lifting rfv_eqvt) + +lemma supp_fv: + "fv_kind t1 = supp t1" + "fv_ty t2 = supp t2" + "fv_trm t3 = supp t3" +apply(induct t1 and t2 and t3 rule: KIND_TY_TRM_inducts) +apply (simp_all add: fv_kind_ty_trm) +apply (simp_all add: supp_def) +sorry + +lemma +"(supp ((a \ b) \ (K::KIND)) - {atom ((a \ b) \ (x::name))} = supp K - {atom x} \ +(a \ b) \ A = (A::TY) \ (\pi\perm. pi \ (a \ b) \ K = K \ (supp K - {atom x}) \* pi \ pi \ (a \ b) \ x \ x)) = +(supp ((a \ b) \ K) - {atom ((a \ b) \ x)} = supp K - {atom x} \ +(\pi\perm. (supp ((a \ b) \ K) - {atom ((a \ b) \ x)}) \* pi \ pi \ (a \ b) \ K = K) \ (a \ b) \ A \ A)" +apply (case_tac "(a \ b) \ A = A") +apply (case_tac "supp ((a \ b) \ K) - {atom ((a \ b) \ x)} = supp K - {atom x}") +apply simp_all +sorry + +lemma supp_kpi_pre: "supp (KPI A x K) = (supp (Abs {atom x} K)) \ supp A" +apply (subst supp_Pair[symmetric]) +unfolding supp_def +apply (simp add: permute_set_eq) +apply(subst abs_eq) +apply(subst KIND_TY_TRM_INJECT) +apply(simp only: supp_fv) +apply simp +apply (unfold supp_def) +sorry + +lemma supp_kpi: "supp (KPI A x K) = supp A \ (supp K - {atom x})" +apply(subst supp_kpi_pre) +thm supp_Abs +(*apply(simp add: supp_Abs)*) +sorry + +lemma supp_kind_ty_trm: + "supp TYP = {}" + "supp (KPI A x K) = supp A \ (supp K - {atom x})" + "supp (TCONST i) = {atom i}" + "supp (TAPP A M) = supp A \ supp M" + "supp (TPI A x B) = supp A \ (supp B - {atom x})" + "supp (CONS i) = {atom i}" + "supp (VAR x) = {atom x}" + "supp (APP M N) = supp M \ supp N" + "supp (LAM A x M) = supp A \ (supp M - {atom x})" +apply - +apply (simp add: supp_def) +apply (simp add: supp_kpi) +apply (simp add: supp_def) (* need ty.distinct lifted *) +sorry + end