Library hydras.Ackermann.folReplace
From Coq Require Import Ensembles Lists.List Peano_dec.
From hydras.Ackermann
Require Import ListExt folProof folLogic folProp.
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 SysPrf := SysPrf L.
Lemma reduceImp :
∀ (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 (f1 f2 : Formula) (T : System):
SysPrf T (iffH f1 f2) → SysPrf T (iffH (notH f1) (notH f2)).
Lemma impForall (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 (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 (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 (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 (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 (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 (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 (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 (T : System) (v : nat) (s : Term) (f g : Formula):
¬ In_freeVarSys L v T →
SysPrf T (iffH f g) →
SysPrf T (iffH (substF f v s) (substF g v s)).
Lemma reduceCloseList (l : list nat) (f1 f2 : Formula) (T : System):
(∀ 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)).
End Replacement.
From hydras.Ackermann
Require Import ListExt folProof folLogic folProp.
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 SysPrf := SysPrf L.
Lemma reduceImp :
∀ (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 (f1 f2 : Formula) (T : System):
SysPrf T (iffH f1 f2) → SysPrf T (iffH (notH f1) (notH f2)).
Lemma impForall (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 (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 (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 (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 (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 (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 (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 (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 (T : System) (v : nat) (s : Term) (f g : Formula):
¬ In_freeVarSys L v T →
SysPrf T (iffH f g) →
SysPrf T (iffH (substF f v s) (substF g v s)).
Lemma reduceCloseList (l : list nat) (f1 f2 : Formula) (T : System):
(∀ 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)).
End Replacement.