Section Replacement.
Variable L : Language.
Let Formula := Formula L.
Let Formulas := Formulas L.
Let System := System L.
Let Term := Term L.
Let Terms := Terms L.
Let var := var L.
Let apply := apply L.
Let equal := equal L.
Let atomic := atomic L.
Let impH := impH L.
Let notH := notH L.
Let forallH := forallH L.
Let orH := orH L.
Let andH := andH L.
Let existH := existH L.
Let iffH := iffH L.
Let ifThenElseH := ifThenElseH L.
Let SysPrf := SysPrf L.

(* Specifications: *)
Lemma reduceImp :
forall (f1 f2 f3 f4 : Formula) (T : System),
SysPrf T (iffH f1 f3) ->
SysPrf T (iffH f2 f4) -> SysPrf T (iffH (impH f1 f2) (impH f3 f4)).
Lemma reduceNot :
forall (f1 f2 : Formula) (T : System),
SysPrf T (iffH f1 f2) -> SysPrf T (iffH (notH f1) (notH f2)).
Lemma impForall :
forall (f1 f2 : Formula) (v : nat) (T : System),
~ In_freeVarSys _ v T ->
SysPrf T (impH f1 f2) -> SysPrf T (impH (forallH v f1) (forallH v f2)).
Lemma reduceForall :
forall (f1 f2 : Formula) (v : nat) (T : System),
~ In_freeVarSys _ v T ->
SysPrf T (iffH f1 f2) -> SysPrf T (iffH (forallH v f1) (forallH v f2)).
Lemma reduceOr :
forall (f1 f2 f3 f4 : Formula) (T : System),
SysPrf T (iffH f1 f3) ->
SysPrf T (iffH f2 f4) -> SysPrf T (iffH (orH f1 f2) (orH f3 f4)).
Lemma reduceAnd :
forall (f1 f2 f3 f4 : Formula) (T : System),
SysPrf T (iffH f1 f3) ->
SysPrf T (iffH f2 f4) -> SysPrf T (iffH (andH f1 f2) (andH f3 f4)).
Lemma iffExist :
forall (f1 f2 : Formula) (v : nat) (T : System),
~ In_freeVarSys _ v T ->
SysPrf T (impH f1 f2) -> SysPrf T (impH (existH v f1) (existH v f2)).
Lemma reduceExist :
forall (f1 f2 : Formula) (v : nat) (T : System),
~ In_freeVarSys _ v T ->
SysPrf T (iffH f1 f2) -> SysPrf T (iffH (existH v f1) (existH v f2)).
Lemma reduceIff :
forall (f1 f2 f3 f4 : Formula) (T : System),
SysPrf T (iffH f1 f3) ->
SysPrf T (iffH f2 f4) -> SysPrf T (iffH (iffH f1 f2) (iffH f3 f4)).
Lemma reduceIfThenElse :
forall (f1 f2 f3 f4 f5 f6 : Formula) (T : System),
SysPrf T (iffH f1 f4) ->
SysPrf T (iffH f2 f5) ->
SysPrf T (iffH f3 f6) ->
SysPrf T (iffH (ifThenElseH f1 f2 f3) (ifThenElseH f4 f5 f6)).
Lemma reduceSub :
forall (T : System) (v : nat) (s : Term) (f g : Formula),
~ In_freeVarSys L v T ->
SysPrf T (iffH f g) ->
SysPrf T (iffH (substituteFormula L f v s) (substituteFormula L g v s)).
Lemma reduceCloseList :
forall (l : list nat) (f1 f2 : Formula) (T : System),
(forall v : nat, In v l -> ~ In_freeVarSys _ v T) ->
SysPrf T (iffH f1 f2) ->
SysPrf T (iffH (closeList L l f1) (closeList L l f2)).