Theory TAO_10_PossibleWorlds

(*<*)
theory TAO_10_PossibleWorlds
imports TAO_9_PLM
begin
(*>*)

section‹Possible Worlds›
text‹\label{TAO_PossibleWorlds}›

locale PossibleWorlds = PLM
begin

subsection‹Definitions›
text‹\label{TAO_PossibleWorlds_Definitions}›

  definition Situation where
    "Situation x  A!,x & ( F. x,F  Propositional F)"

  definition EncodeProposition (infixl Σ 70) where
    "xΣp  A!,x & x, λ x . p"
  definition TrueInSituation (infixl  10) where
    "x  p  Situation x & xΣp"
  definition PossibleWorld where
    "PossibleWorld x  Situation x & ( p . xΣp  p)"

subsection‹Auxiliary Lemmas›
text‹\label{TAO_PossibleWorlds_Aux}›

  lemma possit_sit_1:
    "[Situation (xP)  (Situation (xP)) in v]"
    proof (rule "I"; rule CP)
      assume "[Situation (xP) in v]"
      hence 1: "[A!,xP & ( F. xP,F  Propositional F) in v]"
        unfolding Situation_def by auto
      have "[A!,xP in v]"
        using 1[conj1, THEN oa_facts_2[deduction]] .
      moreover have "[( F. xP,F  Propositional F) in v]"
         using 1[conj2] unfolding Propositional_def
         by (rule enc_prop_nec_2[deduction])
      ultimately show "[Situation (xP) in v]"
        unfolding Situation_def
        apply cut_tac apply (rule KBasic_3[equiv_rl])
        by (rule intro_elim_1)
    next
      assume "[Situation (xP) in v]"
      thus "[Situation (xP) in v]"
        using qml_2[axiom_instance, deduction] by auto
    qed

  lemma possworld_nec:
    "[PossibleWorld (xP)  (PossibleWorld (xP)) in v]"
    apply (rule "I"; rule CP)
     subgoal unfolding PossibleWorld_def
     apply (rule KBasic_3[equiv_rl])
     apply (rule intro_elim_1)
      using possit_sit_1[equiv_lr] "&E"(1) apply blast
     using qml_3[axiom_instance, deduction] "&E"(2) by blast
    using qml_2[axiom_instance,deduction] by auto

  lemma TrueInWorldNecc:
    "[((xP)  p)  ((xP)  p) in v]"
    proof (rule "I"; rule CP)
      assume "[xP  p in v]"
      hence "[Situation (xP) & (A!,xP & xP,λx. p) in v]"
        unfolding TrueInSituation_def EncodeProposition_def .
      hence "[(Situation (xP) & A!,xP) & xP, λx. p in v]"
        using "&I" "&E" possit_sit_1[equiv_lr] oa_facts_2[deduction]
              encoding[axiom_instance,deduction] by metis
      thus "[((xP)  p) in v]"
        unfolding TrueInSituation_def EncodeProposition_def
        using KBasic_3[equiv_rl] "&I" "&E" by metis
    next
      assume "[(xP  p) in v]"
      thus "[xP  p in v]"
        using qml_2[axiom_instance,deduction] by auto
    qed


  lemma PossWorldAux:
    "[(A!,xP & ( F . (xP,F  ( p . p & (F = (λ x . p))))))
        (PossibleWorld (xP)) in v]"
    proof (rule CP)
      assume DefX: "[A!,xP & ( F . (xP,F 
            ( p . p & (F = (λ x . p))))) in v]"
    
      have "[Situation (xP) in v]"
      proof -
        have "[A!,xP in v]"
          using DefX[conj1] .
        moreover have "[(F. xP,F  Propositional F) in v]"
          proof (rule "I"; rule CP)
            fix F
            assume "[xP,F in v]"
            moreover have "[xP,F  ( p . p & (F = (λ x . p))) in v]"
              using DefX[conj2] cqt_1[axiom_instance, deduction] by auto
            ultimately have "[( p . p & (F = (λ x . p))) in v]"
              using "E"(1) by blast
            then obtain p where "[p & (F = (λ x . p)) in v]"
              by (rule "E")
            hence "[(F = (λ x . p)) in v]"
              by (rule "&E"(2))
            hence "[( p . (F = (λ x . p))) in v]"
              by PLM_solver
            thus "[Propositional F in v]"
              unfolding Propositional_def .
          qed
        ultimately show "[Situation (xP) in v]"
          unfolding Situation_def by (rule "&I")
      qed
      moreover have "[(p. xP Σ p  p) in v]"
        unfolding EncodeProposition_def
        proof (rule TBasic[deduction]; rule "I")
          fix q
          have EncodeLambda:
            "[xP, λx. q  ( p . p & ((λx. q) = (λ x . p))) in v]"
            using DefX[conj2] by (rule cqt_1[axiom_instance, deduction])
          moreover {
             assume "[q in v]"
             moreover have "[(λx. q) = (λ x . q) in v]"
              using id_eq_prop_prop_1 by auto
             ultimately have "[q & ((λx. q) = (λ x . q)) in v]"
               by (rule "&I")
             hence "[ p . p & ((λx. q) = (λ x . p)) in v]"
               by PLM_solver
             moreover have "[A!,xP in v]"
               using DefX[conj1] .
             ultimately have "[A!,xP & xP, λx. q in v]"
               using EncodeLambda[equiv_rl] "&I" by auto
          }
          moreover {
            assume "[A!,xP & xP, λx. q in v]"
            hence "[xP, λx. q in v]"
              using "&E"(2) by auto
            hence "[ p . p & ((λx. q) = (λ x . p)) in v]"
              using EncodeLambda[equiv_lr] by auto
            then obtain p where p_and_lambda_q_is_lambda_p:
              "[p & ((λx. q) = (λ x . p)) in v]"
              by (rule "E")
            have "[(λ x . p), xP  p in v]"
              apply (rule beta_C_meta_1)
              by show_proper
            hence "[(λ x . p), xP in v]"
              using p_and_lambda_q_is_lambda_p[conj1] "E"(2) by auto
            hence "[(λ x . q), xP in v]"
              using p_and_lambda_q_is_lambda_p[conj2, THEN id_eq_prop_prop_2[deduction]]
                l_identity[axiom_instance, deduction, deduction] by fast
            moreover have "[(λ x . q), xP  q in v]"
              apply (rule beta_C_meta_1) by show_proper
            ultimately have "[q in v]"
              using "E"(1) by blast
          }
          ultimately show "[A!,xP & xP,λx. q  q in v]"
            using "&I" "I" CP by auto
        qed
    
      ultimately show "[PossibleWorld (xP) in v]"
        unfolding PossibleWorld_def by (rule "&I")
    qed

subsection‹For every syntactic Possible World there is a semantic Possible World›
text‹\label{TAO_PossibleWorlds_SyntacticSemantic}›

  theorem SemanticPossibleWorldForSyntacticPossibleWorlds:
    " x . [PossibleWorld (xP) in w] 
     ( v .  p . [(xP  p) in w]  [p in v])"
    proof
      fix x
      {
        assume PossWorldX: "[PossibleWorld (xP) in w]"
        hence SituationX: "[Situation (xP) in w]"
          unfolding PossibleWorld_def apply cut_tac by PLM_solver
        have PossWorldExpanded:
          "[A!,xP & (F. xP,F  (p. F = (λx. p)))
            & (p. A!,xP & xP,λx. p  p) in w]"
           using PossWorldX
           unfolding PossibleWorld_def Situation_def
                     Propositional_def EncodeProposition_def .
        have AbstractX: "[A!,xP in w]"
          using PossWorldExpanded[conj1,conj1] .
        
        have "[(p. xP,λx. p  p) in w]"
          apply (PLM_subst_method
                 "λp. A!,xP & xP,λx. p"
                 "λ p . xP,λx. p")
           subgoal using PossWorldExpanded[conj1,conj1,THEN oa_facts_2[deduction]]
                   using Semantics.T6 apply cut_tac by PLM_solver
          using PossWorldExpanded[conj2] .
    
        hence "v. p. ([xP,λx. p in v])
                        = [p in v]"
         unfolding diamond_def equiv_def conj_def
         apply (simp add: Semantics.T4 Semantics.T6 Semantics.T5
                          Semantics.T8)
         by auto
    
        then obtain v where PropsTrueInSemWorld:
          "p. ([xP,λx. p in v]) = [p in v]"
          by auto
        {
          fix p
          {
            assume "[((xP)  p) in w]"
            hence "[((xP)  p) in v]"
              using TrueInWorldNecc[equiv_lr] Semantics.T6 by simp
            hence "[Situation (xP) & (A!,xP & xP,λx. p) in v]"
              unfolding TrueInSituation_def EncodeProposition_def .
            hence "[xP,λx. p in v]"
              using "&E"(2) by blast
            hence "[p in v]"
              using PropsTrueInSemWorld by blast
          }
          moreover {
            assume "[p in v]"
            hence "[xP,λx. p in v]"
              using PropsTrueInSemWorld by blast
            hence "[(xP)  p in v]"
              apply cut_tac unfolding TrueInSituation_def EncodeProposition_def
              apply (rule "&I") using SituationX[THEN possit_sit_1[equiv_lr]]
              subgoal using Semantics.T6 by auto
              apply (rule "&I")
              subgoal using AbstractX[THEN oa_facts_2[deduction]]
                using Semantics.T6 by auto
              by assumption
            hence "[((xP)  p) in v]"
              using TrueInWorldNecc[equiv_lr] by simp
            hence "[(xP)  p in w]"
              using Semantics.T6 by simp
          }
          ultimately have "[p in v]  [(xP)  p in w]"
            by auto
        }
        hence "( v .  p . [p in v]  [(xP)  p in w])"
          by blast
      }
      thus "[PossibleWorld (xP) in w] 
            (v.  p . [(xP)  p in w]  [p in v])"
        by blast
    qed

subsection‹For every semantic Possible World there is a syntactic Possible World›
text‹\label{TAO_PossibleWorlds_SemanticSyntactic}›

  theorem SyntacticPossibleWorldForSemanticPossibleWorlds:
    " v .  x . [PossibleWorld (xP) in w] 
     ( p . [p in v]  [((xP)  p) in w])"
    proof
      fix v
      have "[x. A!,xP & ( F . (xP,F 
            ( p . p & (F = (λ x . p))))) in v]"
        using A_objects[axiom_instance] by fast
      then obtain x where DefX:
        "[A!,xP & ( F . (xP,F  ( p . p & (F = (λ x . p))))) in v]"
        by (rule "E")
      hence PossWorldX: "[PossibleWorld (xP) in v]"
        using PossWorldAux[deduction] by blast
      hence "[PossibleWorld (xP) in w]"
        using possworld_nec[equiv_lr] Semantics.T6 by auto
      moreover have "( p . [p in v]  [(xP)  p in w])"
      proof
        fix q
        {
           assume "[q in v]"
           moreover have "[(λ x . q) = (λ x . q) in v]"
             using id_eq_prop_prop_1 by auto
           ultimately have "[q & (λ x . q) = (λ x . q) in v]"
             using "&I" by auto
           hence "[( p . p & ((λ x . q) = (λ x . p))) in v]"
             by PLM_solver
           hence 4: "[xP, (λ x . q) in v]"
             using cqt_1[axiom_instance,deduction, OF DefX[conj2], equiv_rl]
             by blast
           have "[(xP  q) in v]"
             unfolding TrueInSituation_def apply (rule "&I")
              using PossWorldX unfolding PossibleWorld_def
              using "&E"(1) apply blast
             unfolding EncodeProposition_def apply (rule "&I")
              using DefX[conj1] apply simp
             using 4 .
          hence "[(xP  q) in w]"
            using TrueInWorldNecc[equiv_lr] Semantics.T6 by auto
        }
        moreover {
          assume "[(xP  q) in w]"
          hence "[(xP  q) in v]"
             using TrueInWorldNecc[equiv_lr] Semantics.T6
             by auto
          hence "[xP, (λ x . q) in v]"
            unfolding TrueInSituation_def EncodeProposition_def
            using "&E"(2) by blast
          hence "[( p . p & ((λ x . q) = (λ x . p))) in v]"
            using cqt_1[axiom_instance,deduction, OF DefX[conj2], equiv_lr]
            by blast
          then obtain p where 4:
            "[(p & ((λ x . q) = (λ x . p))) in v]"
            by (rule "E")
          have "[(λ x . p),xP  p in v]"
            apply (rule beta_C_meta_1)
            by show_proper
          hence "[(λ x . q),xP  p in v]"
              using l_identity[where β="(λ x . q)" and α="(λ x . p)",
                               axiom_instance, deduction, deduction]
              using 4[conj2,THEN id_eq_prop_prop_2[deduction]] by meson
          hence "[(λ x . q),xP in v]" using 4[conj1] "E"(2) by blast
          moreover have "[(λ x . q),xP  q in v]"
            apply (rule beta_C_meta_1)
            by show_proper
          ultimately have "[q in v]"
            using "E"(1) by blast
        }
        ultimately show "[q in v]  [(xP)  q in w]"
          by blast
      qed
      ultimately show " x . [PossibleWorld (xP) in w]
                            ( p . [p in v]  [(xP)  p in w])"
        by auto
    qed
end

(*<*)
end
(*>*)