(* PURE TYPE SYSTEMS OF THE λ-CUBE ********************************************)
-inductive Cube_Ax (i,j:nat): Prop ≝
- | star_box: i = 0 → j = 1 → Cube_Ax i j
+inductive Cube_Ax: nat → nat → Prop ≝
+ | star_box: Cube_Ax 0 1
.
(* The λPω pure type system (a.k.a. λC or CC) *********************************)
-inductive CC_Re (i,j,k:nat): Prop ≝
- | star_star: i = 0 → j = 0 → k = 0 → CC_Re i j k
- | box_star : i = 1 → j = 0 → k = 0 → CC_Re i j k
- | box_box : i = 1 → j = 1 → k = 1 → CC_Re i j k
- | star_box : i = 0 → j = 1 → k = 1 → CC_Re i j k
+inductive CC_Re: nat → nat → nat → Prop ≝
+ | star_star: CC_Re 0 0 0
+ | box_star : CC_Re 1 0 0
+ | box_box : CC_Re 1 1 1
+ | star_box : CC_Re 0 1 1
.
definition CC: pts ≝ mk_pts Cube_Ax CC_Re conv.
(* The λω pure type system (a.k.a. Fω) ****************************************)
-inductive FO_Re (i,j,k:nat): Prop ≝
- | star_star: i = 0 → j = 0 → k = 0 → FO_Re i j k
- | box_star : i = 1 → j = 0 → k = 0 → FO_Re i j k
- | box_box : i = 1 → j = 1 → k = 1 → FO_Re i j k
+inductive FO_Re: nat → nat → nat → Prop ≝
+ | star_star: FO_Re 0 0 0
+ | box_star : FO_Re 1 0 0
+ | box_box : FO_Re 1 1 1
.
definition FO: pts ≝ mk_pts Cube_Ax FO_Re conv.
sat3: SAT3 mem; (* we add the clusure by rev dapp *)
sat4: SAT4 mem (* we add the clusure by dummies *)
}.
+
(* HIDDEN BUG:
* if SAT0 and SAT1 are expanded,
* the projections sat0 and sat1 are not generated
definition dep_mem ≝ λB,C,M. ∀N. N ∈ B → App M N ∈ C.
lemma dep_cr1: ∀B,C. CR1 (dep_mem B C).
-#B #C #M #Hdep (lapply (Hdep (Sort 0) ?)) /2 by SAT0_sort/ /3/ (**) (* adiacent auto *)
+#B #C #M #Hdep (lapply (Hdep (Sort 0) ?)) -Hdep /3/ @SAT0_sort //
qed.
lemma dep_sat0: ∀B,C. SAT0 (dep_mem B C).
qed.
lemma dep_sat3: ∀B,C. SAT3 (dep_mem B C).
-#B #C #N #l1 #l2 #HN #M #HM <appl_append >associative_append /3/
+#B #C #M #N #l #H #L #HL <appl_append @sat3 /2/
qed.
lemma dep_sat4: ∀B,C. SAT4 (dep_mem B C).
definition SAT2 ≝ λ(P:?→Prop). ∀N,L,M,l. SN N → SN L →
P (Appl M[0:=L] l) → P (Appl (Lambda N M) (L::l)).
-definition SAT3 ≝ λ(P:?→Prop). ∀N,l1,l2. P (Appl (D (Appl N l1)) l2) →
- P (Appl (D N) (l1@l2)).
+definition SAT3 ≝ λ(P:?→Prop). ∀M,N,l. P (Appl (D (App M N)) l) →
+ P (Appl (D M) (N::l)).
definition SAT4 ≝ λ(P:?→Prop). ∀M. P M → P (D M).
#P #i #HP @(HP i (nil ?) …) //
qed.
-lemma SAT3_1: ∀P,N,M. SAT3 P → P (D (App N M)) → P (App (D N) M).
-#P #N #M #HP #H @(HP … ([?]) ([])) @H
+lemma SAT3_1: ∀P,M,N. SAT3 P → P (D (App M N)) → P (App (D M) N).
+#P #M #N #HP #H @(HP … ([])) @H
qed.
(* axiomatization *************************************************************)