first | apply IsSub.forall_free_in | apply IsSub.exists_free_in
case pos
v u x : VarName
phi : Formula
phi_ih : ∀ (binders : Finset VarName), Rec.fastAdmitsAux v u binders phi → IsSub phi v u (Rec.fastReplaceFree v u phi)
binders : Finset VarName
h1 : Rec.fastAdmitsAux v u (binders ∪ {x}) phi
c1 : ¬v = x
c2 : isFreeIn v phi
⊢ IsSub (exists_ x phi) v u (exists_ x (Rec.fastReplaceFree v u phi))
case pos.a
v u x : VarName
phi : Formula
phi_ih : ∀ (binders : Finset VarName), Rec.fastAdmitsAux v u binders phi → IsSub phi v u (Rec.fastReplaceFree v u phi)
binders : Finset VarName
h1 : Rec.fastAdmitsAux v u (binders ∪ {x}) phi
c1 : ¬v = x
c2 : isFreeIn v phi
⊢ isFreeIn v (exists_ x phi)

case pos.a
v u x : VarName
phi : Formula
phi_ih : ∀ (binders : Finset VarName), Rec.fastAdmitsAux v u binders phi → IsSub phi v u (Rec.fastReplaceFree v u phi)
binders : Finset VarName
h1 : Rec.fastAdmitsAux v u (binders ∪ {x}) phi
c1 : ¬v = x
c2 : isFreeIn v phi
⊢ ¬x = u

case pos.a
v u x : VarName
phi : Formula
phi_ih : ∀ (binders : Finset VarName), Rec.fastAdmitsAux v u binders phi → IsSub phi v u (Rec.fastReplaceFree v u phi)
binders : Finset VarName
h1 : Rec.fastAdmitsAux v u (binders ∪ {x}) phi
c1 : ¬v = x
c2 : isFreeIn v phi
⊢ IsSub phi v u (Rec.fastReplaceFree v u phi)