Theorem: LN.HoldsForall (FOL/LN/Paper.lean)

State before:
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ Holds D I V (forall_ x F) ↔ ∀ (d : D), Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
simp only [Holds]
State after:
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ (∀ (d : D), Holds D I (shift D V d) F) ↔
    ∀ (d : D), Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)

State before:
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ (∀ (d : D), Holds D I (shift D V d) F) ↔
    ∀ (d : D), Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
simp only [HoldsShift D I V F z h1]
State after:
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ (∀ (d : D), Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F) ↔
    ∀ (d : D), Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)

State before:
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ (∀ (d : D), Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F) ↔
    ∀ (d : D), Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
apply forall_congr'
State after:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ ∀ (a : D),
    Holds D I (Function.updateITE V (free_ z) a ∘ Var.openList 0 [free_ z]) F ↔
      Holds D I (Function.updateITE V (free_ z) a) (Formula.openList 0 [free_ z] F)

State before:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
⊢ ∀ (a : D),
    Holds D I (Function.updateITE V (free_ z) a ∘ Var.openList 0 [free_ z]) F ↔
      Holds D I (Function.updateITE V (free_ z) a) (Formula.openList 0 [free_ z] F)
Tactic:
intro d
State after:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)

State before:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
obtain s1 := HoldsOpenList D I (Function.updateITE V (free_ z) d) 0 [z] F
State after:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
s1 :
  Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 (List.map free_ [z])) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 (List.map free_ [z]) F)
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)

State before:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
s1 :
  Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 (List.map free_ [z])) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 (List.map free_ [z]) F)
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
simp at s1
State after:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
s1 :
  Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)

State before:
case h
D : Type
I : Interpretation D
V : VarAssignment D
x : String
F : Formula
z : String
h1 : ¬occursFreeIn (free_ z) F
d : D
s1 :
  Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
⊢ Holds D I (Function.updateITE V (free_ z) d ∘ Var.openList 0 [free_ z]) F ↔
    Holds D I (Function.updateITE V (free_ z) d) (Formula.openList 0 [free_ z] F)
Tactic:
exact s1
State after:
no goals