Remark subFormulaNTEHelp :
forall (f g : Formula) (v : nat) (s : Term),
SysPrf (Ensembles.Add _ (Empty_set Formula) f) g ->
SysPrf (Ensembles.Add _ (Empty_set Formula) (substituteFormula L f v s))
(substituteFormula L g v s).
Remark subFormulaNTE :
forall (f : Formula) (T : System),
(forall (v : nat) (s : Term),
~ In v (freeVarFormula L f) ->
SysPrf T (iffH (substituteFormula L f v s) f)) /\
(forall (v1 v2 : nat) (s : Term),
~ In v2 (list_remove _ eq_nat_dec v1 (freeVarFormula L f)) ->
SysPrf T
(iffH (substituteFormula L (substituteFormula L f v1 (var v2)) v2 s)
(substituteFormula L f v1 s))) /\
(forall (v1 v2 : nat) (s1 s2 : Term),
v1 <> v2 ->
~ In v2 (freeVarTerm L s1) ->
~ In v1 (freeVarTerm L s2) ->
SysPrf T
(iffH (substituteFormula L (substituteFormula L f v1 s1) v2 s2)
(substituteFormula L (substituteFormula L f v2 s2) v1 s1))).

(* Specifications: *)
Lemma subFormulaNil :
forall (f : Formula) (T : System) (v : nat) (s : Term),
~ In v (freeVarFormula L f) -> SysPrf T (iffH (substituteFormula L f v s) f).
Lemma subFormulaTrans :
forall (f : Formula) (T : System) (v1 v2 : nat) (s : Term),
~ In v2 (list_remove _ eq_nat_dec v1 (freeVarFormula L f)) ->
SysPrf T
(iffH (substituteFormula L (substituteFormula L f v1 (var v2)) v2 s)
(substituteFormula L f v1 s)).
Lemma subFormulaExch :
forall (f : Formula) (T : System) (v1 v2 : nat) (s1 s2 : Term),
v1 <> v2 ->
~ In v2 (freeVarTerm L s1) ->
~ In v1 (freeVarTerm L s2) ->
SysPrf T
(iffH (substituteFormula L (substituteFormula L f v1 s1) v2 s2)
(substituteFormula L (substituteFormula L f v2 s2) v1 s1)).