constructor
W : Type
X : List (List Formula × List Program)
M : KripkeModel W
w : W
φ : Formula
g : List Formula × List Program → Formula → List Formula
⊢ (∃ f, (∃ a b, (a, b) ∈ X ∧ Con (g (a, b) φ) = f) ∧ evaluate M w f) ↔
    ∃ fs, (∃ a b, (a, b) ∈ X ∧ g (a, b) φ = fs) ∧ ∀ f ∈ fs, evaluate M w f
case mp
W : Type
X : List (List Formula × List Program)
M : KripkeModel W
w : W
φ : Formula
g : List Formula × List Program → Formula → List Formula
⊢ (∃ f, (∃ a b, (a, b) ∈ X ∧ Con (g (a, b) φ) = f) ∧ evaluate M w f) →
    ∃ fs, (∃ a b, (a, b) ∈ X ∧ g (a, b) φ = fs) ∧ ∀ f ∈ fs, evaluate M w f

case mpr
W : Type
X : List (List Formula × List Program)
M : KripkeModel W
w : W
φ : Formula
g : List Formula × List Program → Formula → List Formula
⊢ (∃ fs, (∃ a b, (a, b) ∈ X ∧ g (a, b) φ = fs) ∧ ∀ f ∈ fs, evaluate M w f) →
    ∃ f, (∃ a b, (a, b) ∈ X ∧ Con (g (a, b) φ) = f) ∧ evaluate M w f