cases γ
γ : Program
ψ : Formula
W : Type
M : KripkeModel W
w : W
⊢ evaluate M w (~⌈γ⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H γ)))
case atom_prog
ψ : Formula
W : Type
M : KripkeModel W
w : W
a✝ : ℕ
⊢ evaluate M w (~⌈·a✝⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H (·a✝))))

case sequence
ψ : Formula
W : Type
M : KripkeModel W
w : W
a✝¹ a✝ : Program
⊢ evaluate M w (~⌈a✝¹;'a✝⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H (a✝¹;'a✝))))

case union
ψ : Formula
W : Type
M : KripkeModel W
w : W
a✝¹ a✝ : Program
⊢ evaluate M w (~⌈a✝¹⋓a✝⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H (a✝¹⋓a✝))))

case star
ψ : Formula
W : Type
M : KripkeModel W
w : W
a✝ : Program
⊢ evaluate M w (~⌈∗a✝⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H (∗a✝))))

case test
ψ : Formula
W : Type
M : KripkeModel W
w : W
a✝ : Formula
⊢ evaluate M w (~⌈?'a✝⌉ψ) ↔ evaluate M w (dis (List.map (fun Fδ => Con (Yset Fδ ψ)) (H (?'a✝))))