Theorem: FOL.NV.Holds_coincide_PredVar
Proof state before:
D : Type
I I' : Interpretation D
h1 : I.pred_const_ = I'.pred_const_
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (F : Formula),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length F → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V tail✝ F ↔ Holds D I' V tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length phi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I' V (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) psi ↔ Holds D I' V (head✝ :: tail✝) psi)
V : VarAssignment D
h2 :
  ∀ (P : PredName) (ds : List D),
    predVarOccursIn P ds.length phi ∨ predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)
⊢ (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V (head✝ :: tail✝) psi) ↔
    (Holds D I' V (head✝ :: tail✝) phi ↔ Holds D I' V (head✝ :: tail✝) psi)
Tactic:
congr! 1
Proof state after:
case a.h.e'_1.a
D : Type
I I' : Interpretation D
h1 : I.pred_const_ = I'.pred_const_
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (F : Formula),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length F → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V tail✝ F ↔ Holds D I' V tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length phi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I' V (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) psi ↔ Holds D I' V (head✝ :: tail✝) psi)
V : VarAssignment D
h2 :
  ∀ (P : PredName) (ds : List D),
    predVarOccursIn P ds.length phi ∨ predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)
⊢ Holds D I V (head✝ :: tail✝) phi ↔ Holds D I' V (head✝ :: tail✝) phi

case a.h.e'_2.a
D : Type
I I' : Interpretation D
h1 : I.pred_const_ = I'.pred_const_
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (F : Formula),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length F → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V tail✝ F ↔ Holds D I' V tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length phi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I' V (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V : VarAssignment D),
    (∀ (P : PredName) (ds : List D), predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)) →
      (Holds D I V (head✝ :: tail✝) psi ↔ Holds D I' V (head✝ :: tail✝) psi)
V : VarAssignment D
h2 :
  ∀ (P : PredName) (ds : List D),
    predVarOccursIn P ds.length phi ∨ predVarOccursIn P ds.length psi → (I.pred_var_ P ds ↔ I'.pred_var_ P ds)
⊢ Holds D I V (head✝ :: tail✝) psi ↔ Holds D I' V (head✝ :: tail✝) psi