(*<*) theory AOT_semantics imports AOT_syntax begin (*>*)
section‹Abstract Semantics for AOT›
specification(AOT_denotes) ―‹Relate object level denoting to meta-denoting. AOT's definitions of
denoting will become derivable at each type.›
AOT_sem_denotes: ‹[w ⊨ τ↓] = AOT_model_denotes τ› by (rule exI[where x=‹λ τ . ε\o w . AOT_model_denotes τ›])
(simp add: AOT_model_proposition_choice_simp)
lemma AOT_sem_vars_denote: ‹[v ⊨ α1...αn↓]› by induct simp
text‹Combine the introduced type classes and register them as
type constraints for individual terms.› class AOT_κs = AOT_IndividualTerm + AOT_RelationProjection + AOT_Enc class AOT_κ = AOT_κs + AOT_UnaryIndividualTerm +
AOT_UnaryRelationProjection + AOT_UnaryEnc
instance κ :: AOT_κ by standard instance prod :: (AOT_κ, AOT_κs) AOT_κs by standard
text‹We define semantic predicates to capture the conditions of cqt.2 (i.e.
the base cases of denoting terms) on matrices of @{text λ}-expressions.› definition AOT_instance_of_cqt_2 :: ‹('a::AOT_κs ==>o) ==> bool›where ‹AOT_instance_of_cqt_2 ≡ λ φ . ∀ x y . AOT_model_denotes x ∧ AOT_model_denotes y ∧
AOT_model_term_equiv x y ⟶ φ x = φ y› definition AOT_instance_of_cqt_2_exe_arg :: ‹('a::AOT_κs ==> 'b::AOT_κs) ==> bool›where ‹AOT_instance_of_cqt_2_exe_arg ≡ λ φ . ∀ x y .
AOT_model_denotes x ∧ AOT_model_denotes y ∧ AOT_model_term_equiv x y ⟶
AOT_model_term_equiv (φ x) (φ y)›
text‹@{text λ}-expressions with a matrix that satisfies our predicate denote.› lemma AOT_sem_cqt_2: assumes‹AOT_instance_of_cqt_2 φ› shows‹[v ⊨ [λν1...νn φ{ν1...νn}]↓]› using assms by (metis AOT_instance_of_cqt_2_def AOT_model_lambda_denotes AOT_sem_denotes)
text‹Prove introduction rules for the predicates that match the natural language
restrictions of the axiom.›
named_theorems AOT_instance_of_cqt_2_intro lemma AOT_instance_of_cqt_2_intros_const[AOT_instance_of_cqt_2_intro]: ‹AOT_instance_of_cqt_2 (λα. φ)› by (simp add: AOT_instance_of_cqt_2_def AOT_sem_denotes AOT_model_lambda_denotes) lemma AOT_instance_of_cqt_2_intros_not[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ› shows‹AOT_instance_of_cqt_2 (λτ. «¬φ{τ}¬)› using assms by (metis (no_types, lifting) AOT_instance_of_cqt_2_def) lemma AOT_instance_of_cqt_2_intros_imp[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ›and‹AOT_instance_of_cqt_2 ψ› shows‹AOT_instance_of_cqt_2 (λτ. «φ{τ} → ψ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_imp) lemma AOT_instance_of_cqt_2_intros_box[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ› shows‹AOT_instance_of_cqt_2 (λτ. «◻φ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_box) lemma AOT_instance_of_cqt_2_intros_act[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ› shows‹AOT_instance_of_cqt_2 (λτ. «\Aφ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_act) lemma AOT_instance_of_cqt_2_intros_diamond[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ› shows‹AOT_instance_of_cqt_2 (λτ. «♢φ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_dia) lemma AOT_instance_of_cqt_2_intros_conj[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ›and‹AOT_instance_of_cqt_2 ψ› shows‹AOT_instance_of_cqt_2 (λτ. «φ{τ} & ψ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_conj) lemma AOT_instance_of_cqt_2_intros_disj[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ›and‹AOT_instance_of_cqt_2 ψ› shows‹AOT_instance_of_cqt_2 (λτ. «φ{τ} ∨ ψ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_disj) lemma AOT_instance_of_cqt_2_intros_equib[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2 φ›and‹AOT_instance_of_cqt_2 ψ› shows‹AOT_instance_of_cqt_2 (λτ. «φ{τ} ≡ ψ{τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_equiv) lemma AOT_instance_of_cqt_2_intros_forall[AOT_instance_of_cqt_2_intro]: assumes‹∧ α . AOT_instance_of_cqt_2 (Φ α)› shows‹AOT_instance_of_cqt_2 (λτ. «∀α Φ{α,τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_forall) lemma AOT_instance_of_cqt_2_intros_exists[AOT_instance_of_cqt_2_intro]: assumes‹∧ α . AOT_instance_of_cqt_2 (Φ α)› shows‹AOT_instance_of_cqt_2 (λτ. «∃α Φ{α,τ}¬)› using assms by (auto simp: AOT_instance_of_cqt_2_def AOT_sem_denotes
AOT_model_lambda_denotes AOT_sem_exists) lemma AOT_instance_of_cqt_2_intros_exe_arg_self[AOT_instance_of_cqt_2_intro]: ‹AOT_instance_of_cqt_2_exe_arg (λx. x)› unfolding AOT_instance_of_cqt_2_exe_arg_def AOT_instance_of_cqt_2_def
AOT_sem_lambda_denotes by (auto simp: AOT_model_term_equiv_part_equivp equivp_reflp AOT_sem_denotes) lemma AOT_instance_of_cqt_2_intros_exe_arg_const[AOT_instance_of_cqt_2_intro]: ‹AOT_instance_of_cqt_2_exe_arg (λx. κ)› unfolding AOT_instance_of_cqt_2_exe_arg_def AOT_instance_of_cqt_2_def by (auto simp: AOT_model_term_equiv_part_equivp equivp_reflp
AOT_sem_denotes AOT_sem_lambda_denotes) lemma AOT_instance_of_cqt_2_intros_exe_arg_fst[AOT_instance_of_cqt_2_intro]: ‹AOT_instance_of_cqt_2_exe_arg fst› unfolding AOT_instance_of_cqt_2_exe_arg_def AOT_instance_of_cqt_2_def by (simp add: AOT_model_term_equiv_prod_def case_prod_beta) lemma AOT_instance_of_cqt_2_intros_exe_arg_snd[AOT_instance_of_cqt_2_intro]: ‹AOT_instance_of_cqt_2_exe_arg snd› unfolding AOT_instance_of_cqt_2_exe_arg_def AOT_instance_of_cqt_2_def by (simp add: AOT_model_term_equiv_prod_def AOT_sem_denotes AOT_sem_lambda_denotes) lemma AOT_instance_of_cqt_2_intros_exe_arg_Pair[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2_exe_arg φ›and‹AOT_instance_of_cqt_2_exe_arg ψ› shows‹AOT_instance_of_cqt_2_exe_arg (λτ. Pair (φ τ) (ψ τ))› using assms unfolding AOT_instance_of_cqt_2_exe_arg_def AOT_instance_of_cqt_2_def
AOT_sem_denotes AOT_sem_lambda_denotes AOT_model_term_equiv_prod_def
AOT_model_denotes_prod_def by auto lemma AOT_instance_of_cqt_2_intros_desc[AOT_instance_of_cqt_2_intro]: assumes‹∧z :: 'a::AOT_κ. AOT_instance_of_cqt_2 (Φ z)› shows‹AOT_instance_of_cqt_2_exe_arg (λ κ :: 'b::AOT_κ . «\ιz(Φ{z,κ})¬)› proof - have0: ‹∧ κ κ'. AOT_model_denotes κ ∧ AOT_model_denotes κ' ∧
AOT_model_term_equiv κ κ' ==>
Φ z κ = Φ z κ'›for z using assms unfolding AOT_instance_of_cqt_2_def
AOT_sem_denotes AOT_model_lambda_denotes by force
{ fix κ κ' have‹«\ιz(Φ{z,κ})¬ = «\ιz(Φ{z,κ'})¬› if‹AOT_model_denotes κ ∧ AOT_model_denotes κ' ∧ AOT_model_term_equiv κ κ'› using0[OF that] by auto moreoverhave‹AOT_model_term_equiv x x›for x :: ‹'a::AOT_κ› by (metis AOT_instance_of_cqt_2_exe_arg_def
AOT_instance_of_cqt_2_intros_exe_arg_const
AOT_model_A_objects AOT_model_term_equiv_denotes
AOT_model_term_equiv_eps(1)) ultimatelyhave‹AOT_model_term_equiv «\ιz(Φ{z,κ})¬«\ιz(Φ{z,κ'})¬› if‹AOT_model_denotes κ ∧ AOT_model_denotes κ' ∧ AOT_model_term_equiv κ κ'› using that by simp
} thus ?thesis using0 unfolding AOT_instance_of_cqt_2_exe_arg_def by simp qed
lemma AOT_instance_of_cqt_2_intros_exe_const[AOT_instance_of_cqt_2_intro]: assumes‹AOT_instance_of_cqt_2_exe_arg κs› shows‹AOT_instance_of_cqt_2 (λx :: 'b::AOT_κs. AOT_exe Π (κs x))› using assms unfolding AOT_instance_of_cqt_2_def AOT_sem_denotes AOT_model_lambda_denotes
AOT_sem_disj AOT_sem_conj
AOT_sem_not AOT_sem_box AOT_sem_act AOT_instance_of_cqt_2_exe_arg_def
AOT_sem_equiv AOT_sem_imp AOT_sem_forall AOT_sem_exists AOT_sem_dia by (auto intro!: AOT_sem_exe_equiv) lemma SestoftGC assumes‹
and ‹ x = Some * (delete x Γ, e , S@[Dummy x])"
shows ‹AOT_instance_of_cqt_2 (λκ1κn :: 'b::AOT_κs. «[λν1...νn φ{κ1...κn,ν1...νn}]«κs κ1κn¬¬)›
-
{
fix x y :: 'b
assume ‹AOT_model_denotes x›
moreover assume ‹AOT_model_denotes y›
moreover assume ‹AOT_model_term_equiv x y›
moreover have 1: ‹φ x = φ y›
using assms calculation unfolding AOT_instance_of_cqt_2_def by blast
ultimately have ‹AOT_exe (AOT_lambda (φ x)) (κs x) =
AOT_exe (AOT_lambda (φ y)) (κs y)›
unfolding 1
apply (safe intro!: AOT_sem_exe_equiv)
by (metis AOT_instance_of_cqt_2_exe_arg_def assms(2))
}
thus ?thesis
unfolding AOT_instance_of_cqt_2_def
AOT_instance_of_cqt_2_exe_arg_def
by blast
AOT_instance_of_cqt_2_intro_prod[AOT_instance_of_cqt_2_intro]:
assumes ‹∧ x . AOT_instance_of_cqt_2 (φ x)›
and ‹∧ x . AOT_instance_of_cqt_2 (λ z . φ z x)›
shows ‹AOT_instance_of_cqt_2 (λ(x,y) . φ x y)›
using assms unfolding AOT_instance_of_cqt_2_def
by (auto simp add: AOT_model_lambda_denotes AOT_sem_denotes
AOT_model_denotes_prod_def
AOT_model_term_equiv_prod_def)
‹The following are already derivable semantically, but not yet added
to @{attribute AOT_instance_of_cqt_2_intro}. They will be added with the
next planned extension of axiom cqt:2.›
AOT_instance_of_cqt_2_intro_next
AOT_instance_of_cqt_2_enc_arg :: ‹('a::AOT_κs ==> 'b::AOT_κs) ==> bool› where ‹AOT_instance_of_cqt_2_enc_arg ≡ λ φ . ∀ x y z .
AOT_model_denotes x ∧ AOT_model_denotes y ∧ AOT_model_term_equiv x y ⟶
AOT_enc (φ x) z = AOT_enc (φ y) z›
AOT_instance_of_cqt_2_enc_rel :: ‹('a::AOT_κs ==> <'b::AOT_κs>) ==> bool› where ‹AOT_instance_of_cqt_2_enc_rel ≡ λ φ . ∀ x y z .
AOT_model_denotes x ∧ AOT_model_denotes y ∧ AOT_model_term_equiv x y ⟶
AOT_enc z (φ x) = AOT_enc z (φ y)›
AOT_instance_of_cqt_2_intros_enc[AOT_instance_of_cqt_2_intro_next]:
assumes ‹AOT_instance_of_cqt_2_enc_rel Π› and ‹AOT_instance_of_cqt_2_enc_arg κs›
shows ‹AOT_instance_of_cqt_2 (λx . AOT_enc (κs x) «[«Π x¬]¬)›
using assms
unfolding AOT_instance_of_cqt_2_def AOT_sem_denotes AOT_model_lambda_denotes
AOT_instance_of_cqt_2_enc_rel_def AOT_sem_not AOT_sem_box AOT_sem_act
AOT_sem_dia AOT_sem_conj AOT_sem_disj AOT_sem_equiv AOT_sem_imp
AOT_sem_forall AOT_sem_exists AOT_instance_of_cqt_2_enc_arg_def
by fastforce+
AOT_instance_of_cqt_2_enc_arg_intro_const[AOT_instance_of_cqt_2_intro_next]: ‹AOT_instance_of_cqt_2_enc_arg (λx. c)›
unfolding AOT_instance_of_cqt_2_enc_arg_def by simp
AOT_instance_of_cqt_2_enc_arg_intro_desc[AOT_instance_of_cqt_2_intro_next]:
assumes ‹∧z :: 'a::AOT_κ. AOT_instance_of_cqt_2 (Φ z)›
shows ‹AOT_instance_of_cqt_2_enc_arg (λ κ :: 'b::AOT_κ . «\ιz(Φ{z,κ})¬)›
-
have 0: ‹∧ κ κ'. AOT_model_denotes κ ∧ AOT_model_denotes κ' ∧
AOT_model_term_equiv κ κ' ==>
Φ z κ = Φ z κ'› for z
using assms
unfolding AOT_instance_of_cqt_2_def
AOT_sem_denotes AOT_model_lambda_denotes by force
{
fix κ κ'
have ‹«\ιz(Φ{z,κ})¬ = «\ιz(Φ{z,κ'})¬›
if ‹AOT_model_denotes κ ∧ AOT_model_denotes κ' ∧ AOT_model_term_equiv κ κ'›
using 0[OF that]
by auto
}
thus ?thesis using 0
unfolding AOT_instance_of_cqt_2_enc_arg_def by meson
AOT_instance_of_cqt_2_enc_rel_intro[AOT_instance_of_cqt_2_intro_next]:
assumes ‹∧ κ . AOT_instance_of_cqt_2 (λκ' :: 'b::AOT_κs . φ κ κ')›
assumes ‹∧ κ' . AOT_instance_of_cqt_2 (λκ :: 'a::AOT_κs . φ κ κ')›
shows ‹AOT_instance_of_cqt_2_enc_rel (λκ :: 'a::AOT_κs. AOT_lambda (λκ'. φ κ κ'))›
-
{
fix x y :: 'a and z ::'b
assume ‹AOT_model_term_equiv x y›
moreover assume ‹AOT_model_denotes x›
moreover assume ‹AOT_model_denotes y›
ultimately have ‹φ x = φ y›
using assms unfolding AOT_instance_of_cqt_2_def by blast
hence ‹AOT_enc z (AOT_lambda (φ x)) = AOT_enc z (AOT_lambda (φ y))›
by simp
}
thus ?thesis
unfolding AOT_instance_of_cqt_2_enc_rel_def by auto
‹Further restrict unary individual variables to type @{typ κ} (rather
than class @{class AOT_κ} only) and define being ordinary and being abstract.›
‹Auxiliary lemmata.›
AOT_sem_ordinary: "«O!¬ = «[λx ♢E!x]¬"
using AOT_ordinary[THEN AOT_sem_id_def0E1] AOT_sem_ordinary_def_denotes
by (auto simp: AOT_sem_eq)
AOT_sem_abstract: "«A!¬ = «[λx ¬♢E!x]¬"
using AOT_abstract[THEN AOT_sem_id_def0E1] AOT_sem_abstract_def_denotes
by (auto simp: AOT_sem_eq)
AOT_sem_ordinary_denotes: ‹[w ⊨ O!↓]›
by (simp add: AOT_sem_ordinary AOT_sem_ordinary_def_denotes)
AOT_meta_abstract_denotes: ‹[w ⊨ A!↓]›
by (simp add: AOT_sem_abstract AOT_sem_abstract_def_denotes)
AOT_model_abstract_ακ: ‹∃ a . κ = ακ a› if ‹[v ⊨ A!κ]›
using that[unfolded AOT_sem_abstract, simplified
AOT_meta_abstract_denotes[unfolded AOT_sem_abstract, THEN AOT_sem_lambda_beta,
OF that[simplified AOT_sem_exe, THEN conjunct2, THEN conjunct1]]]
apply (simp add: AOT_sem_not AOT_sem_dia AOT_sem_concrete)
by (metis AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
AOT_model_denotes_κ_def AOT_sem_denotes AOT_sem_exe κ.exhaust_disc
is_ακ_def is_ψκ_def that)
AOT_model_ordinary_ψκ: ‹∃ a . κ = ψκ a› if ‹[v ⊨ O!κ]›
using that[unfolded AOT_sem_ordinary, simplified
AOT_sem_ordinary_denotes[unfolded AOT_sem_ordinary, THEN AOT_sem_lambda_beta,
OF that[simplified AOT_sem_exe, THEN conjunct2, THEN conjunct1]]]
apply (simp add: AOT_sem_dia AOT_sem_concrete)
by (metis AOT_model_concrete_κ.simps(2) AOT_model_concrete_κ.simps(3)
κ.exhaust_disc is_ακ_def is_ψκ_def is_nullκ_def)
AOT_model_ψκ_ordinary: ‹[v ⊨ O!«ψκ x¬]›
by (metis AOT_model_abstract_ακ AOT_model_denotes_κ_def AOT_sem_abstract
AOT_sem_denotes AOT_sem_ind_eq AOT_sem_ordinary κ.disc(7) κ.distinct(1))
AOT_model_ακ_ordinary: ‹[v ⊨ A!«ακ x¬]›
by (metis AOT_model_denotes_κ_def AOT_model_ordinary_ψκ AOT_sem_abstract
AOT_sem_denotes AOT_sem_ind_eq AOT_sem_ordinary κ.disc(8) κ.distinct(1))
prod_denotesE: assumes ‹«(κ1,κ2)¬↓› shows ‹κ1↓ & κ2↓›
using assms by (simp add: AOT_sem_denotes AOT_sem_conj AOT_model_denotes_prod_def)
prod_denotesE[AOT del]
prod_denotesI: assumes ‹κ1↓ & κ2↓› shows ‹«(κ1,κ2)¬↓›
using assms by (simp add: AOT_sem_denotes AOT_sem_conj AOT_model_denotes_prod_def)
prod_denotesI[AOT del]
‹Prepare the derivation of the additional axioms that are validated by
our extended models.›
AOT_ExtendedModel =
assumes AOT_ExtendedModel: ‹AOT_ExtendedModel›
AOT_sem_indistinguishable_ord_enc_all:
assumes Π_den: ‹[v ⊨ Π↓]›
assumes Ax: ‹[v ⊨ A!x]›
assumes Ay: ‹[v ⊨ A!y]›
assumes indist: ‹[v ⊨∀F ◻([F]x ≡ [F]y)]›
shows ‹[v ⊨∀G(∀z(O!z →◻([G]z ≡ [Π]z)) → x[G])] =
[v ⊨∀G(∀z(O!z →◻([G]z ≡ [Π]z)) → y[G])]›
-
have 0: ‹[v ⊨ [λx ¬♢[E!]x]x]›
using Ax by (simp add: AOT_sem_abstract)
have 1: ‹[v ⊨ [λx ¬♢[E!]x]y]›
using Ay by (simp add: AOT_sem_abstract)
{
assume ‹[v ⊨∀G(∀z (O!z →◻([G]z ≡ [Π]z)) → x[G])]›
hence 3: ‹[v ⊨∀G(∀z([λx ♢[E!]x]z →◻([G]z ≡ [Π]z)) → x[G])]›
by (simp add: AOT_sem_ordinary)
{
fix Π' :: ‹<\<kappa>>›
assume 1: ‹[v ⊨ Π'↓]›
assume 2: ‹[v ⊨ [λx ♢[E!]x]z →◻([Π']z ≡ [Π]z)]› for z
have ‹[v ⊨ x[Π']]›
using 3
by (auto simp: AOT_sem_forall AOT_sem_imp AOT_sem_box AOT_sem_denotes)
(metis (no_types, lifting) 1 2 AOT_term_of_var_cases AOT_sem_box
AOT_sem_denotes AOT_sem_imp)
} note 3 = this
fix Π' :: ‹<\<kappa>>›
assume Π_den: ‹[v ⊨ Π'↓]›
assume 4: ‹[v ⊨∀z (O!z →◻([Π']z ≡ [Π]z))]›
{
fix κ0
assume ‹[v ⊨ [λx ♢[E!]x]κ0]›
hence ‹[v ⊨ O!κ0]›
using AOT_sem_ordinary by metis
moreover have ‹[v ⊨ κ0↓]›
using calculation by (simp add: AOT_sem_exe)
ultimately have ‹[v ⊨◻([Π']κ0≡ [Π]κ0)]›
using 4 by (auto simp: AOT_sem_forall AOT_sem_imp)
} note 4 = this
{
fix Π'' :: ‹<\<kappa>>›
assume ‹[v ⊨ Π''↓]›
moreover assume ‹[w ⊨ [Π'']κ0] = [w ⊨ [Π']κ0]› if ‹[v ⊨ [λx ♢E!x]κ0]› for κ0 w
ultimately have 5: ‹[v ⊨ x[Π'']]›
using 4 3
by (auto simp: AOT_sem_imp AOT_sem_equiv AOT_sem_box)
} note 5 = this
have ‹[v ⊨ y[Π']]›
apply (rule AOT_sem_enc_indistinguishable_all[OF AOT_ExtendedModel])
apply (fact 0)
by (auto simp: 5 0 1 Π_den indist[simplified AOT_sem_forall
AOT_sem_box AOT_sem_equiv])
}
moreover {
{
assume ‹[v ⊨∀G(∀z (O!z →◻([G]z ≡ [Π]z)) → y[G])]›
hence 3: ‹[v ⊨∀G(∀z ([λx ♢[E!]x]z →◻([G]z ≡ [Π]z)) → y[G])]›
by (simp add: AOT_sem_ordinary)
{
fix Π' :: ‹<\<kappa>>›
assume 1: ‹[v ⊨ Π'↓]›
assume 2: ‹[v ⊨ [λx ♢[E!]x]z →◻([Π']z ≡ [Π]z)]› for z
have ‹[v ⊨ y[Π']]›
using 3
apply (simp add: AOT_sem_forall AOT_sem_imp AOT_sem_box AOT_sem_denotes)
by (metis (no_types, lifting) 1 2 AOT_model.AOT_term_of_var_cases
AOT_sem_box AOT_sem_denotes AOT_sem_imp)
} note 3 = this
fix Π' :: ‹<\<kappa>>›
assume Π_den: ‹[v ⊨ Π'↓]›
assume 4: ‹[v ⊨∀z (O!z →◻([Π']z ≡ [Π]z))]›
{
fix κ0
assume ‹[v ⊨ [λx ♢[E!]x]κ0]›
hence ‹[v ⊨ O!κ0]›
using AOT_sem_ordinary by metis
moreover have ‹[v ⊨ κ0↓]›
using calculation by (simp add: AOT_sem_exe)
ultimately have ‹[v ⊨◻([Π']κ0≡ [Π]κ0)]›
using 4 by (auto simp: AOT_sem_forall AOT_sem_imp)
} note 4 = this
{
fix Π'' :: ‹<\<kappa>>›
assume ‹[v ⊨ Π''↓]›
moreover assume ‹[w ⊨ [Π'']κ0] = [w ⊨ [Π']κ0]› if ‹[v ⊨ [λx ♢E!x]κ0]› for w κ0
ultimately have ‹[v ⊨ y[Π'']]›
using 3 4 by (auto simp: AOT_sem_imp AOT_sem_equiv AOT_sem_box)
} note 5 = this
have ‹[v ⊨ x[Π']]›
apply (rule AOT_sem_enc_indistinguishable_all[OF AOT_ExtendedModel])
apply (fact 1)
by (auto simp: 5 0 1 Π_den indist[simplified AOT_sem_forall
AOT_sem_box AOT_sem_equiv])
}
}
ultimately show ‹[v ⊨∀G (∀z (O!z →◻([G]z ≡ [Π]z)) → x[G])] =
[v ⊨∀G (∀z (O!z →◻([G]z ≡ [Π]z)) → y[G])]›
by (auto simp: AOT_sem_forall AOT_sem_imp)
AOT_sem_indistinguishable_ord_enc_ex:
assumes Π_den: ‹[v ⊨ Π↓]›
assumes Ax: ‹[v ⊨ A!x]›
assumes Ay: ‹[v ⊨ A!y]›
assumes indist: ‹[v ⊨∀F ◻([F]x ≡ [F]y)]›
shows ‹[v ⊨∃G(∀z (O!z →◻([G]z ≡ [Π]z)) & x[G])] =
[v ⊨∃G(∀z(O!z →◻([G]z ≡ [Π]z)) & y[G])]›
-
have Aux: ‹[v ⊨ [λx ♢[E!]x]κ] = ([v ⊨ [λx ♢[E!]x]κ] ∧ [v ⊨ κ↓])› for v κ
using AOT_sem_exe by blast
AOT_modally_strict {
fix x y
AOT_assume Π_den: ‹[Π]↓›
AOT_assume 2: ‹∀F ◻([F]x ≡ [F]y)›
AOT_assume ‹A!x›
AOT_hence 0: ‹[λx ¬♢[E!]x]x›
by (simp add: AOT_sem_abstract)
AOT_assume ‹A!y›
AOT_hence 1: ‹[λx ¬♢[E!]x]y›
by (simp add: AOT_sem_abstract)
{
AOT_assume ‹∃G(∀z (O!z →◻([G]z ≡ [Π]z)) & x[G])›
then AOT_obtain Π'
where Π'_den: ‹Π'↓›
and Π'_indist: ‹∀z (O!z →◻([Π']z ≡ [Π]z))›
and x_enc_Π': ‹x[Π']›
by (meson AOT_sem_conj AOT_sem_exists)
{
fix κ0
AOT_assume ‹[λx ♢[E!]x]κ0›
AOT_hence ‹◻([Π']κ0≡ [Π]κ0)›
using Π'_indist
by (auto simp: AOT_sem_exe AOT_sem_imp AOT_sem_exists AOT_sem_conj
AOT_sem_ordinary AOT_sem_forall)
} note 3 = this
AOT_have ‹∀z ([λx ♢[E!]x]z →◻([Π']z ≡ [Π]z))›
using Π'_indist by (simp add: AOT_sem_ordinary)
AOT_obtain Π'' where
Π''_den: ‹Π''↓› and
Π''_indist: ‹[λx ♢[E!]x]κ0→◻([Π'']κ0≡ [Π]κ0)› and
y_enc_Π'': ‹y[Π'']› for κ0
using AOT_sem_enc_indistinguishable_ex[OF AOT_ExtendedModel,
OF 0, OF 1, rotated, OF Π_den,
OF exI[where x=Π'], OF conjI, OF Π'_den, OF conjI,
OF x_enc_Π', OF allI, OF impI,
OF 3[simplified AOT_sem_box AOT_sem_equiv], simplified, OF
2[simplified AOT_sem_forall AOT_sem_equiv AOT_sem_box,
THEN spec, THEN mp, THEN spec], simplified]
unfolding AOT_sem_imp AOT_sem_box AOT_sem_equiv by blast
{
AOT_have ‹Π''↓›
and ‹∀x ([λx ♢[E!]x]x →◻([Π'']x ≡ [Π]x))›
and ‹y[Π'']›
apply (simp add: Π''_den)
apply (simp add: AOT_sem_forall Π''_indist)
by (simp add: y_enc_Π'')
} note 2 = this
AOT_have ‹∃G(∀z (O!z →◻([G]z ≡ [Π]z)) & y[G])›
apply (simp add: AOT_sem_exists AOT_sem_ordinary
AOT_sem_imp AOT_sem_box AOT_sem_forall AOT_sem_equiv AOT_sem_conj)
using 2[simplified AOT_sem_box AOT_sem_equiv AOT_sem_imp AOT_sem_forall]
by blast
}
} note 0 = this
AOT_modally_strict {
{
fix x y
AOT_assume Π_den: ‹[Π]↓›
moreover AOT_assume ‹∀F ◻([F]x ≡ [F]y)›
moreover AOT_have ‹∀F ◻([F]y ≡ [F]x)›
using calculation(2)
by (auto simp: AOT_sem_forall AOT_sem_box AOT_sem_equiv)
moreover AOT_assume ‹A!x›
moreover AOT_assume ‹A!y›
ultimately AOT_have ‹∃G (∀z (O!z →◻([G]z ≡ [Π]z)) & x[G]) ≡ ∃G (∀z (O!z →◻([G]z ≡ [Π]z)) & y[G])›
using 0 by (auto simp: AOT_sem_equiv)
}
have 1: ‹[v ⊨∀F ◻([F]y ≡ [F]x)]›
using indist
by (auto simp: AOT_sem_forall AOT_sem_box AOT_sem_equiv)
thus ‹[v ⊨∃G (∀z (O!z →◻([G]z ≡ [Π]z)) & x[G])] =
[v ⊨∃G (∀z (O!z →◻([G]z ≡ [Π]z)) & y[G])]›
using assms
by (auto simp: AOT_sem_imp AOT_sem_conj AOT_sem_equiv 0)
}
and store them in a blacklist. *) setup‹setup_AOT_no_atp› bundle AOT_no_atp begindeclare AOT_no_atp[no_atp] end (* Can be used as: "including AOT_no_atp sledgehammer" or
"sledgehammer(del: AOT_no_atp) *)
(*<*) end (*>*)
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.159Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.