Commit 3cc188bf authored by Pierre Letouzey's avatar Pierre Letouzey
Browse files

lift is now lift_above

  Moreover, it works both on term and formulas thanks to Class overloading
parent 934da1dd
...@@ -15,61 +15,55 @@ Implicit Type f : formula. ...@@ -15,61 +15,55 @@ Implicit Type f : formula.
(** Properties of [lift] *) (** Properties of [lift] *)
Lemma level_lift t : level (lift t) <= S (level t). Lemma level_lift k t : level (lift k t) <= S (level t).
Proof. Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto with arith. induction t as [ | | f l IH] using term_ind'; cbn; auto with arith.
rewrite map_map. - case Nat.leb_spec; auto.
apply list_max_map_le. intros a Ha. transitivity (S (level a)); auto. - rewrite map_map.
rewrite <- Nat.succ_le_mono. now apply list_max_map_in. apply list_max_map_le. intros a Ha. transitivity (S (level a)); auto.
rewrite <- Nat.succ_le_mono. now apply list_max_map_in.
Qed. Qed.
Lemma lift_nop t : BClosed t -> lift t = t. Lemma lift_nop_le k t : level t <= k -> lift k t = t.
Proof. Proof.
unfold BClosed.
induction t as [ | | f l IH] using term_ind'; cbn; auto. induction t as [ | | f l IH] using term_ind'; cbn; auto.
- easy. - case Nat.leb_spec; auto. omega.
- rewrite list_max_map_0. intros H. f_equal. apply map_id_iff; auto. - rewrite list_max_map_le. intros H. f_equal. apply map_id_iff; auto.
Qed. Qed.
Lemma check_lift sign t : Lemma lift_nop k t : BClosed t -> lift k t = t.
check sign (lift t) = check sign t.
Proof. Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto. unfold BClosed. intros H. apply lift_nop_le. rewrite H; omega.
destruct funsymbs; auto.
rewrite map_length. case eqb; auto.
apply eq_true_iff_eq. rewrite forallb_map, !forallb_forall.
split; intros H x Hx. rewrite <- IH; auto. rewrite IH; auto.
Qed. Qed.
Lemma lift_fvars t : fvars (lift t) = fvars t. Lemma check_lift sign k t :
check sign (lift k t) = check sign t.
Proof. Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto with *. induction t as [ | | f l IH] using term_ind'; cbn; auto.
induction l; simpl; auto. - case Nat.leb_spec; auto.
rewrite IH, IHl; simpl; auto. - destruct funsymbs; auto.
intros x Hx. apply IH. simpl; auto. rewrite map_length. case eqb; auto.
apply eq_true_iff_eq. rewrite forallb_map, !forallb_forall.
split; intros H x Hx. rewrite <- IH; auto. rewrite IH; auto.
Qed. Qed.
(** Properties of [lift_above] *) Lemma fvars_lift k t : fvars (lift k t) = fvars t.
Lemma level_lift_above t k :
level (lift_above k t) <= S (level t).
Proof. Proof.
induction t using term_ind'; cbn; auto with arith. induction t as [ | | f l IH] using term_ind'; cbn; auto with *.
+ destruct (k <=? n); cbn; omega. - case Nat.leb_spec; auto.
+ rewrite map_map. - induction l; simpl; auto.
apply list_max_map_le. intros. transitivity (S (level a)); auto. rewrite IH, IHl; simpl; auto.
rewrite<- Nat.succ_le_mono. now apply list_max_map_in. intros x Hx. apply IH. simpl; auto.
Qed. Qed.
Lemma level_lift_form_above f k : Lemma level_lift_form k f : level (lift k f) <= S (level f).
level (lift_form_above k f) <= S (level f).
Proof. Proof.
revert k. induction f; intro; cbn; auto with arith. revert k. induction f; intro; cbn; auto with arith.
+ rewrite map_map. + rewrite map_map.
rewrite list_max_map_le. rewrite list_max_map_le.
intros. intros.
transitivity (S (level a)). transitivity (S (level a)).
- apply level_lift_above. - apply level_lift.
- apply-> Nat.succ_le_mono. - apply-> Nat.succ_le_mono.
apply list_max_map_in. apply list_max_map_in.
assumption. assumption.
...@@ -80,46 +74,25 @@ Proof. ...@@ -80,46 +74,25 @@ Proof.
omega. omega.
Qed. Qed.
Lemma check_lift_above sign t k : Lemma check_lift_form sign f k :
check sign (lift_above k t) = check sign t. check sign (lift k f) = check sign f.
Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto.
+ destruct (k <=? n); auto.
+ destruct funsymbs; auto.
rewrite map_length. case eqb; auto.
apply eq_true_iff_eq. rewrite forallb_map, !forallb_forall.
split; intros H x Hx. rewrite<- IH; auto. rewrite IH; auto.
Qed.
Lemma check_lift_form_above sign f k :
check sign (lift_form_above k f) = check sign f.
Proof. Proof.
revert k. induction f; cbn; auto. revert k. induction f; cbn; auto.
+ destruct (predsymbs sign p); auto. + destruct (predsymbs sign p); auto.
intro. rewrite map_length. case eqb; auto. intro. rewrite map_length. case eqb; auto.
apply eq_true_iff_eq. rewrite forallb_map, !forallb_forall. apply eq_true_iff_eq. rewrite forallb_map, !forallb_forall.
split; intros. split; intros.
- destruct H with (x := x); auto. rewrite check_lift_above. reflexivity. - destruct H with (x := x); auto. rewrite check_lift. reflexivity.
- destruct H with (x := x); auto. rewrite check_lift_above. reflexivity. - destruct H with (x := x); auto. rewrite check_lift. reflexivity.
+ intro. rewrite IHf1. rewrite IHf2. reflexivity. + intro. rewrite IHf1. rewrite IHf2. reflexivity.
Qed. Qed.
Lemma fvars_lift_above t k : Lemma fvars_lift_form f k :
fvars (lift_above k t) = fvars t. fvars (lift k f) = fvars f.
Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto with *.
- destruct (k <=? n); auto.
- induction l; simpl; auto.
rewrite IH, IHl; simpl; auto.
intros x Hx. apply IH. simpl; auto.
Qed.
Lemma fvars_lift_form_above f k :
fvars (lift_form_above k f) = fvars f.
Proof. Proof.
revert k. induction f; intro; cbn; auto with *. revert k. induction f; intro; cbn; auto with *.
- induction l; simpl; auto. - induction l; simpl; auto.
rewrite fvars_lift_above, IHl; simpl; auto. rewrite fvars_lift, IHl; simpl; auto.
- rewrite IHf1. rewrite IHf2. auto. - rewrite IHf1. rewrite IHf2. auto.
Qed. Qed.
...@@ -172,8 +145,8 @@ Proof. ...@@ -172,8 +145,8 @@ Proof.
induction f; intros; cbn -[Nat.max]; auto with arith. induction f; intros; cbn -[Nat.max]; auto with arith.
- apply (level_bsubst_term_max n u (Fun "" l)). - apply (level_bsubst_term_max n u (Fun "" l)).
- specialize (IHf1 n u). specialize (IHf2 n u). omega with *. - specialize (IHf1 n u). specialize (IHf2 n u). omega with *.
- assert (H := level_lift u). - assert (H := level_lift 0 u).
specialize (IHf (S n) (lift u)). omega with *. specialize (IHf (S n) (lift 0 u)). omega with *.
Qed. Qed.
Lemma level_bsubst_term n (u t:term) : Lemma level_bsubst_term n (u t:term) :
...@@ -234,7 +207,7 @@ Proof. ...@@ -234,7 +207,7 @@ Proof.
induction f; cbn; intros; auto with *. induction f; cbn; intros; auto with *.
- apply (bsubst_term_fvars n u (Fun "" l)). - apply (bsubst_term_fvars n u (Fun "" l)).
- rewrite IHf1, IHf2. namedec. - rewrite IHf1, IHf2. namedec.
- rewrite IHf. now rewrite lift_fvars. - rewrite IHf. now rewrite fvars_lift.
Qed. Qed.
Lemma bsubst_ctx_fvars n u (c:context) : Lemma bsubst_ctx_fvars n u (c:context) :
...@@ -494,16 +467,17 @@ Qed. ...@@ -494,16 +467,17 @@ Qed.
Definition BClosed_sub (h:variable->term) := Definition BClosed_sub (h:variable->term) :=
forall v, BClosed (h v). forall v, BClosed (h v).
Lemma lift_vmap (h:variable->term) t : Lemma lift_vmap (h:variable->term) k t :
lift (vmap h t) = vmap (fun v => lift (h v)) (lift t). lift k (vmap h t) = vmap (fun v => lift k (h v)) (lift k t).
Proof. Proof.
induction t as [ | | f l IH] using term_ind'; cbn; auto. induction t as [ | | f l IH] using term_ind'; cbn; auto.
f_equal. rewrite !map_map. apply map_ext_iff; auto. - case Nat.leb_spec; auto.
- f_equal. rewrite !map_map. apply map_ext_iff; auto.
Qed. Qed.
Lemma lift_vmap' (h:variable->term) t : Lemma lift_vmap' (h:variable->term) k t :
BClosed_sub h -> BClosed_sub h ->
lift (vmap h t) = vmap h (lift t). lift k (vmap h t) = vmap h (lift k t).
Proof. Proof.
intros CL. rewrite lift_vmap. intros CL. rewrite lift_vmap.
apply term_vmap_ext. intros v _. now apply lift_nop. apply term_vmap_ext. intros v _. now apply lift_nop.
...@@ -1398,8 +1372,8 @@ Proof. ...@@ -1398,8 +1372,8 @@ Proof.
Qed. Qed.
Lemma fclosed_lift_above n f : Lemma fclosed_lift_above n f :
form_fclosed (lift_form_above n f) = form_fclosed f. form_fclosed (lift n f) = form_fclosed f.
Proof. Proof.
apply eq_true_iff_eq. rewrite !form_fclosed_spec. apply eq_true_iff_eq. rewrite !form_fclosed_spec.
unfold FClosed. now rewrite fvars_lift_form_above. unfold FClosed. now rewrite fvars_lift_form.
Qed. Qed.
...@@ -106,6 +106,10 @@ Arguments fvars {_} {_} !_. ...@@ -106,6 +106,10 @@ Arguments fvars {_} {_} !_.
Class VMap (A : Type) := vmap : (variable -> term) -> A -> A. Class VMap (A : Type) := vmap : (variable -> term) -> A -> A.
Arguments vmap {_} {_} _ !_. Arguments vmap {_} {_} _ !_.
(** Lifting of bound variables that are above some threshold *)
Class Lift (A : Type) := lift : nat -> A -> A.
Arguments lift {_} {_} _ !_.
(** Some generic definitions based on the previous ones *) (** Some generic definitions based on the previous ones *)
Definition BClosed {A}`{Level A} (a:A) := level a = 0. Definition BClosed {A}`{Level A} (a:A) := level a = 0.
...@@ -218,20 +222,15 @@ Instance term_eqb : Eqb term := ...@@ -218,20 +222,15 @@ Instance term_eqb : Eqb term :=
| _, _ => false | _, _ => false
end. end.
Fixpoint lift t := (** [lift k] adds 1 to [BVar] indices that are >= k *)
match t with
| BVar n => BVar (S n)
| FVar v => FVar v
| Fun f args => Fun f (List.map lift args)
end.
(* +1 sur les dB >= k *) Instance term_lift : Lift term :=
Fixpoint lift_above k t := fix term_lift k t :=
match t with match t with
| BVar n => if (k <=? n)%nat then BVar (S n) else t | BVar n => if k <=? n then BVar (S n) else t
| FVar v => FVar v | FVar v => FVar v
| Fun f args => Fun f (List.map (lift_above k) args) | Fun f args => Fun f (List.map (term_lift k) args)
end. end.
(** Formulas *) (** Formulas *)
...@@ -347,7 +346,7 @@ Instance form_bsubst : BSubst formula := ...@@ -347,7 +346,7 @@ Instance form_bsubst : BSubst formula :=
| Pred p args => Pred p (List.map (bsubst n t) args) | Pred p args => Pred p (List.map (bsubst n t) args)
| Not f => Not (form_bsubst n t f) | Not f => Not (form_bsubst n t f)
| Op o f f' => Op o (form_bsubst n t f) (form_bsubst n t f') | Op o f f' => Op o (form_bsubst n t f) (form_bsubst n t f')
| Quant q f' => Quant q (form_bsubst (S n) (lift t) f') | Quant q f' => Quant q (form_bsubst (S n) (lift 0 t) f')
end. end.
Instance form_fvars : FVars formula := Instance form_fvars : FVars formula :=
...@@ -391,14 +390,17 @@ Compute eqb ...@@ -391,14 +390,17 @@ Compute eqb
(∀ (Pred "A" [ #0 ] -> Pred "A" [ #0 ]))%form (∀ (Pred "A" [ #0 ] -> Pred "A" [ #0 ]))%form
(∀ (Pred "A" [FVar "z"] -> Pred "A" [FVar "z"]))%form. (∀ (Pred "A" [FVar "z"] -> Pred "A" [FVar "z"]))%form.
(* +1 sur les dB >= k *) (** [lift k f] adds 1 to [BVar] indices that are >= k.
Fixpoint lift_form_above k f := Note that this threshold is increased when entering a quantifier. *)
Instance form_lift : Lift formula :=
fix form_lift k f :=
match f with match f with
| True | False => f | True | False => f
| Pred p l => Pred p (map (lift_above k) l) | Pred p l => Pred p (map (lift k) l)
| Not f => Not (lift_form_above k f) | Not f => Not (form_lift k f)
| Op o f f' => Op o (lift_form_above k f) (lift_form_above k f') | Op o f f' => Op o (form_lift k f) (form_lift k f')
| Quant q f => Quant q (lift_form_above (S k) f) | Quant q f => Quant q (form_lift (S k) f)
end. end.
(** Contexts *) (** Contexts *)
...@@ -970,4 +972,4 @@ Fixpoint form_fclosed f := ...@@ -970,4 +972,4 @@ Fixpoint form_fclosed f :=
| Not f => form_fclosed f | Not f => form_fclosed f
| Op _ f1 f2 => form_fclosed f1 &&& form_fclosed f2 | Op _ f1 f2 => form_fclosed f1 &&& form_fclosed f2
| Quant _ f => form_fclosed f | Quant _ f => form_fclosed f
end. end.
\ No newline at end of file
...@@ -365,7 +365,7 @@ Proof. ...@@ -365,7 +365,7 @@ Proof.
Qed. Qed.
Lemma fresh_loop_ok names id n : Lemma fresh_loop_ok names id n :
(cardinal names < n + String.length id)%nat -> cardinal names < n + String.length id ->
Subset (strict_prefixes id) names -> Subset (strict_prefixes id) names ->
~In (fresh_loop names id n) names. ~In (fresh_loop names id n) names.
Proof. Proof.
......
...@@ -111,8 +111,8 @@ Proof. ...@@ -111,8 +111,8 @@ Proof.
apply R_All_e with (t := A) in AX2. apply R_All_e with (t := A) in AX2.
apply R_All_e with (t := B) in AX2. apply R_All_e with (t := B) in AX2.
cbn in AX2. cbn in AX2.
assert (bsubst 0 B (lift A) = A). assert (bsubst 0 B (lift 0 A) = A).
{ assert (lift A = A). { apply lift_nop. exact H. } rewrite H2. apply bclosed_bsubst_id. exact H. } { assert (lift 0 A = A). { apply lift_nop. exact H. } rewrite H2. apply bclosed_bsubst_id. exact H. }
rewrite H2 in AX2. rewrite H2 in AX2.
exact AX2. exact AX2.
Qed. Qed.
...@@ -130,12 +130,12 @@ Proof. ...@@ -130,12 +130,12 @@ Proof.
apply R_All_e with (t := B) in AX3. apply R_All_e with (t := B) in AX3.
apply R_All_e with (t := C) in AX3. apply R_All_e with (t := C) in AX3.
cbn in AX3. cbn in AX3.
assert (bsubst 0 C (lift B) = B). assert (bsubst 0 C (lift 0 B) = B).
{ assert (lift B = B). {apply lift_nop. assumption. } rewrite H4. apply bclosed_bsubst_id. assumption. } { assert (lift 0 B = B). {apply lift_nop. assumption. } rewrite H4. apply bclosed_bsubst_id. assumption. }
rewrite H4 in AX3. rewrite H4 in AX3.
assert (bsubst 0 C (bsubst 1 (lift B) (lift (lift A))) = A). assert (bsubst 0 C (bsubst 1 (lift 0 B) (lift 0 (lift 0 A))) = A).
{ assert (lift A = A). { apply lift_nop. assumption. } rewrite H5. rewrite H5. { assert (lift 0 A = A). { apply lift_nop. assumption. } rewrite H5. rewrite H5.
assert (lift B = B). { apply lift_nop. assumption. } rewrite H6. assert (lift 0 B = B). { apply lift_nop. assumption. } rewrite H6.
assert (bsubst 1 B A = A). { apply bclosed_bsubst_id. assumption. } rewrite H7. assert (bsubst 1 B A = A). { apply bclosed_bsubst_id. assumption. } rewrite H7.
apply bclosed_bsubst_id. assumption. } apply bclosed_bsubst_id. assumption. }
rewrite H5 in AX3. rewrite H5 in AX3.
...@@ -154,8 +154,8 @@ Proof. ...@@ -154,8 +154,8 @@ Proof.
apply R_All_e with (t := A) in AX4. apply R_All_e with (t := A) in AX4.
apply R_All_e with (t := B) in AX4. apply R_All_e with (t := B) in AX4.
cbn in AX4. cbn in AX4.
assert (bsubst 0 B (lift A) = A). assert (bsubst 0 B (lift 0 A) = A).
{ assert (lift A = A). { apply lift_nop. assumption. } rewrite H2. { assert (lift 0 A = A). { apply lift_nop. assumption. } rewrite H2.
apply bclosed_bsubst_id. assumption. } apply bclosed_bsubst_id. assumption. }
rewrite H2 in AX4. rewrite H2 in AX4.
assumption. assumption.
...@@ -173,8 +173,8 @@ Proof. ...@@ -173,8 +173,8 @@ Proof.
apply R_All_e with (t := A) in AX13. apply R_All_e with (t := A) in AX13.
apply R_All_e with (t := B) in AX13. apply R_All_e with (t := B) in AX13.
cbn in AX13. cbn in AX13.
assert (bsubst 0 B (lift A) = A). assert (bsubst 0 B (lift 0 A) = A).
{ assert (lift A = A). { apply lift_nop. assumption. } rewrite H2. { assert (lift 0 A = A). { apply lift_nop. assumption. } rewrite H2.
apply bclosed_bsubst_id. assumption. } apply bclosed_bsubst_id. assumption. }
rewrite H2 in AX13. rewrite H2 in AX13.
assumption. assumption.
......
...@@ -211,7 +211,7 @@ Proof. ...@@ -211,7 +211,7 @@ Proof.
Qed. Qed.
Lemma interp_lift genv lenv m t : Lemma interp_lift genv lenv m t :
interp_term genv (m :: lenv) (lift t) = interp_term genv lenv t. interp_term genv (m :: lenv) (lift 0 t) = interp_term genv lenv t.
Proof. Proof.
induction t as [ | |f l IH] using term_ind'; cbn; auto. induction t as [ | |f l IH] using term_ind'; cbn; auto.
case (funs Mo f) as [(k,fk)|]; cbn; auto. f_equal. case (funs Mo f) as [(k,fk)|]; cbn; auto. f_equal.
......
...@@ -171,14 +171,15 @@ Proof. ...@@ -171,14 +171,15 @@ Proof.
f_equal. rewrite !map_map. apply map_ext_iff; auto. f_equal. rewrite !map_map. apply map_ext_iff; auto.
Qed. Qed.
Lemma restrict_lift sign x t : Lemma restrict_lift sign x t k :
restrict_term sign x (lift t) = lift (restrict_term sign x t). restrict_term sign x (lift k t) = lift k (restrict_term sign x t).
Proof. Proof.
induction t as [ | |f l IH] using term_ind'; cbn; auto. induction t as [ | |f l IH] using term_ind'; cbn; auto.
destruct funsymbs; cbn; auto with *. - case Nat.leb_spec; auto.
rewrite map_length. - destruct funsymbs; cbn; auto with *.
case eqbspec; cbn; auto. rewrite map_length.
intros _. f_equal. rewrite !map_map. apply map_ext_iff; auto. case eqbspec; cbn; auto.
intros _. f_equal. rewrite !map_map. apply map_ext_iff; auto.
Qed. Qed.
Lemma restrict_bsubst sign x n t f : Lemma restrict_bsubst sign x n t f :
...@@ -532,12 +533,12 @@ Proof. ...@@ -532,12 +533,12 @@ Proof.
- f_equal. rewrite !map_map. apply map_ext_iff; auto. - f_equal. rewrite !map_map. apply map_ext_iff; auto.
Qed. Qed.
Lemma forcelevel_lift n x u : Lemma forcelevel_lift0 n x u :
forcelevel_term (S n) x (lift u) = lift (forcelevel_term n x u). forcelevel_term (S n) x (lift 0 u) = lift 0 (forcelevel_term n x u).
Proof. Proof.
induction u using term_ind'; simpl; auto. induction u using term_ind'; cbn -[Nat.ltb]; auto.
- change (S n0 <? S n) with (n0 <? n). - change (S n0 <? S n) with (n0 <? n).
case Nat.ltb_spec; simpl; auto. case Nat.ltb_spec; cbn; auto.
- f_equal. rewrite !map_map. apply map_ext_in; auto. - f_equal. rewrite !map_map. apply map_ext_in; auto.
Qed. Qed.
...@@ -550,7 +551,7 @@ Proof. ...@@ -550,7 +551,7 @@ Proof.
- rewrite !map_map. apply map_ext_iff. - rewrite !map_map. apply map_ext_iff.
auto using forcelevel_bsubst_term. auto using forcelevel_bsubst_term.
- rewrite IHf. - rewrite IHf.
f_equal. apply forcelevel_lift. f_equal. apply forcelevel_lift0.
Qed. Qed.
Ltac solver' := Ltac solver' :=
......
...@@ -49,7 +49,7 @@ Proof. ...@@ -49,7 +49,7 @@ Proof.
Qed. Qed.
Lemma Prefix_length s s' : Lemma Prefix_length s s' :
Prefix s s' -> (String.length s <= String.length s')%nat. Prefix s s' -> String.length s <= String.length s'.
Proof. Proof.
induction 1; simpl; auto with arith. induction 1; simpl; auto with arith.
Qed. Qed.
......
...@@ -75,8 +75,8 @@ Notation "x ∉ y" := (~ x ∈ y) (at level 70) : formula_scope. ...@@ -75,8 +75,8 @@ Notation "x ∉ y" := (~ x ∈ y) (at level 70) : formula_scope.
Module ZFAx. Module ZFAx.
Local Open Scope formula_scope. Local Open Scope formula_scope.
Definition zero s := #0 lift s. Definition zero s := #0 lift 0 s.
Definition succ x y := (#0 lift y <-> #0 = lift x \/ #0 lift x). Definition succ x y := (#0 lift 0 y <-> #0 = lift 0 x \/ #0 lift 0 x).
Definition eq_refl := (#0 = #0). Definition eq_refl := (#0 = #0).
Definition eq_sym := ∀∀ (#1 = #0 -> #0 = #1). Definition eq_sym := ∀∀ (#1 = #0 -> #0 = #1).
...@@ -93,32 +93,16 @@ Definition infinity := ∃ (∃ (#0 ∈ #1 /\ zero (#0)) /\ ∀ (#0 ∈ #1 -> ( ...@@ -93,32 +93,16 @@ Definition infinity := ∃ (∃ (#0 ∈ #1 /\ zero (#0)) /\ ∀ (#0 ∈ #1 -> (
Definition axioms_list := Definition axioms_list :=
[ eq_refl; eq_sym; eq_trans; compat_left; compat_right; ext; pairing; union; powerset; infinity ]. [ eq_refl; eq_sym; eq_trans; compat_left; compat_right; ext; pairing; union; powerset; infinity ].
Fixpoint occur_term n t :=
match t with
| BVar m => n =? m
| FVar _ => false
| Fun _ l => existsb (occur_term n) l
end.
Fixpoint occur_form n f :=
match f with
| True | False => false
| Pred _ l => existsb (occur_term n) l
| Not f' => occur_form n f'
| Op _ f1 f2 => (occur_form n f1) &&& (occur_form n f2)
| Quant _ f' => occur_form (S n) f'
end.
(* POUR SEPARATION: (* POUR SEPARATION:
dB dans A : 0=>x 1=>a n>=2:z_i dB dans A : 0=>x 1=>a n>=2:z_i
dB dans (lift_above 1 A) 0=>x ... 2=>a (n>=3:z_i) *) dB dans (lift_above 1 A) 0=>x ... 2=>a (n>=3:z_i) *)
Definition separation_schema A := Definition separation_schema A :=
nForall nForall
((level A) - 2) ((level A) - 2)
(∀∃∀ (#0 #1 <-> (#0 #2 /\ lift_form_above 1 A))). (∀∃∀ (#0 #1 <-> (#0 #2 /\ lift 1 A))).
Definition exists_uniq A := Definition exists_uniq A :=
(A /\ (lift_form_above 1 A -> #0 = #1)). (A /\ (lift 1 A -> #0 = #1)).
(* POUR REPLACEMENT: (* POUR REPLACEMENT:
dB dans A : 0=>y 1=>x 2=>a n>=3:z_i dB dans A : 0=>y 1=>x 2=>a n>=3:z_i
...@@ -127,7 +111,7 @@ Definition replacement_schema A := ...@@ -127,7 +111,7 @@ Definition replacement_schema A :=
nForall nForall
((level A) - 3) ((level A) - 3)
( ( (#0 #1 -> exists_uniq A)) -> ( ( (#0 #1 -> exists_uniq A)) ->
∃∀ (#0 #2 -> (#0 #3 /\ lift_form_above 2 A))). ∃∀ (#0 #2 -> (#0 #3 /\ lift 2 A))).
Local Close Scope formula_scope. Local Close Scope formula_scope.
...@@ -155,25 +139,25 @@ Proof. ...@@ -155,25 +139,25 @@ Proof.
simpl in IN. intuition; subst; reflexivity.