(* *)
(**************************************************************************)
-include "lambda/ext.ma".
+include "lambda/ext_lambda.ma".
(* STRONGLY NORMALIZING TERMS *************************************************)
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)).
-theorem SAT0_sort: ∀P,n. SAT0 P → P (Sort n).
-#P #n #H @(H n (nil ?) …) //
+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).
+
+lemma SAT0_sort: ∀P,n. SAT0 P → P (Sort n).
+#P #n #HP @(HP n (nil ?) …) //
+qed.
+
+lemma SAT1_rel: ∀P,i. SAT1 P → P (Rel i).
+#P #i #HP @(HP i (nil ?) …) //
qed.
-theorem SAT1_rel: ∀P,i. SAT1 P → P (Rel i).
-#P #i #H @(H i (nil ?) …) //
+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 *************************************************************)
axiom sn_beta: SAT2 SN.
+axiom sn_dapp: SAT3 SN.
+
+axiom sn_dummy: SAT4 SN.
+
axiom sn_lambda: ∀N,M. SN N → SN M → SN (Lambda N M).
axiom sn_prod: ∀N,M. SN N → SN M → SN (Prod N M).
-axiom sn_dummy: ∀M. SN M → SN (D M).
-
axiom sn_inv_app_1: ∀M,N. SN (App M N) → SN M.