text‹We introduce a primitive type for hyperintensional propositions.› typedeclo
text‹To be able to model modal operators following Kripke semantics,
we introduce a primitive type for possible worlds and assert, by axiom,
that there is a surjective function mapping propositions to the
boolean-valued functions acting on possible worlds. We call the result
of applying this function to a proposition the Montague intension
of the proposition.› typedecl w ―‹The primtive type of possible worlds.› axiomatization AOT_model_do :: ‹o==>(w==>bool)›where
do_surj: ‹surj AOT_model_do›
text‹The axioms of PLM require the existence of a non-actual word.› consts w0 :: w ―‹The designated actual world.› axiomatizationwhere AOT_model_nonactual_world: ‹∃w . w ≠ w0›
text‹Validity of a proposition in a given world can now be modelled as the result
of applying that world to the Montague intension of the proposition.› definition AOT_model_valid_in :: ‹w==>o==>bool›where ‹AOT_model_valid_in w φ ≡ AOT_model_do φ w›
text‹By construction, we can choose a proposition for any given Montague intension,
s.t. the proposition is valid in a possible world iff the Montague intension
evaluates to true at that world.› definition AOT_model_proposition_choice :: ‹(w==>bool) ==>o› (binder‹ε\o›8) where‹ε\o w. φ w ≡ (inv AOT_model_do) φ› lemma AOT_model_proposition_choice_simp: ‹AOT_model_valid_in w (ε\o w. φ w) = φ w› by (simp add: surj_f_inv_f[OF do_surj] AOT_model_valid_in_def
AOT_model_proposition_choice_def)
text‹Nitpick can trivially show that there are models for the axioms above.› lemma‹True› nitpick[satisfy, user_axioms, expect = genuine] ..
typedecl ψ ―‹The primtive type of ordinary objects/urelements.›
text‹Validating extended relation comprehension requires a large set of
special urelements. For simple models that do not validate extended
relation comprehension (and consequently the predecessor axiom in the
theory of natural numbers), it suffices to use a primitive type as @{text σ},
i.e. @{theory_text ‹typedecl σ›}.› typedecl σ' typedef σ = ‹UNIV::((ψ ==> w ==> bool) set × (ψ ==> w ==> bool) set × σ') set› ..
text‹Urrelations are proposition-valued functions on urelements.
Urrelations are required to evaluate to necessarily false propositions for
null-urelements (note that there may be several distinct necessarily false
propositions).› typedef urrel = ‹{ φ . ∀ x w . ¬AOT_model_valid_in w (φ (nullυ x)) }› by (rule exI[where x=‹λ x . (ε\o w . ¬is_nullυ x)›])
(auto simp: AOT_model_proposition_choice_simp)
text‹Abstract objects will be modelled as sets of urrelations and will
have to be mapped surjectively into the set of special urelements.
We show that any mapping from abstract objects to special urelements
has to involve at least one large set of collapsed abstract objects.
We will use this fact to extend arbitrary mappings from abstract objects
to special urelements to surjective mappings.› lemma ασ_pigeonhole: ―‹For any arbitrary mapping @{term ασ} from sets of urrelations to special
urelements, there exists an abstract object x, s.t. the cardinal of the set
of special urelements is strictly smaller than the cardinal of the set of
abstract objects that are mapped to the same urelement as x under @{term ασ}.› ‹∃x . |UNIV::σ set| <o |{y . ασ x = ασ y}|› for ασ :: ‹urrel set ==> σ› proof(rule ccontr) have card_σ_set_set_bound: ‹|UNIV::σ set set| ≤o |UNIV::urrel set|› proof - let ?pick = ‹λu s . ε\o w . case u of (συ s') ==> s' ∈ s | _ ==> False› have‹∃f :: σ set ==> urrel . inj f› proof show‹inj (λs . Abs_urrel (λu . ?pick u s))› proof(rule injI) fix x y assume‹Abs_urrel (λu. ?pick u x) = Abs_urrel (λu. ?pick u y)› hence‹(λu. ?pick u x) = (λu. ?pick u y)› by (auto intro!: Abs_urrel_inject[THEN iffD1]
simp: AOT_model_proposition_choice_simp) hence‹AOT_model_valid_in w0 (?pick (συ s) x) =
AOT_model_valid_in w0 (?pick (συ s) y)› for s by metis hence‹(s ∈ x) = (s ∈ y)›for s by (auto simp: AOT_model_proposition_choice_simp) thus‹x = y› by blast qed qed thus ?thesis by (metis card_of_image inj_imp_surj_inv) qed
text‹Assume, for a proof by contradiction, that there is no large collapsed set.› assume‹∄x . |UNIV::σ set| <o |{y . ασ x = ασ(
x . |{y . . αα ≤>
by auto
have union_univ: ‹(∪x ∈ range(inv ασ) . {y . ασ x = ασ y}) = UNIV›
by auto (meson f_inv_into_f range_eqI)
text‹
infinitely many special urelements and in both cases we can derive
a contradiction from the assumption above.›
{
text‹ Vero Ortner and NorbeSchirmer
assume finite_σ_set: ‹free software; ; yoyou can redistribute it and/or mod
hence finite_collapsed: ‹
using A card_of_ordLeq_infinite by blast
hence 0: ‹
by (metis A finite_σ_set card_of_ordLeq inj_on_iff_card_le)
have 1: ‹your option) any later version.
using finiteσ
hence 2: ‹ hope that it w be u useful,, but
using finite_σ_set by blast
define n where ‹
define m where ‹
have ‹
unfolding n_def using union_univ by argo
also have ‹
using card_UN_le 2 by blast
also have ‹…
by (metis (no_types, lifting) 0 sum_mono)
also have ‹…
using sum_bounded_above by auto
also have ‹… card (UNIV::σ set) * card (UNIV::σ
using 1 by force
also have ‹
unfolding m_def by blast
finally have n_upper: ‹Gamma>⊨} PO Ea \acute<>varvalR)
have ‹}"
using 2 finite_collapsed by blast
hence finite_α
using union_univ by argo
(n a_plElse:
moreover have ‹ (card (UNIV::urrel set))›
using card_σsetset_bound
by (meson Finite_Set.finite_set card_of_ordLeq finite_αR :== PROC Eval(🍋varval)
finite_σ_set inj_on_iff_card_le)
ultimately have ‹}
by simp
also have \<open set1
unfolding n_def
by (metis Finite_Set.finite_set (cact)
ave <pen2 🚫
moreover {
have ‹(2::nat)^(2^m) ≥ (2^(m + 1))›
by (metis Suc_eq_plus1 Suc_leI less_exp one_le_numeral power_increasing)
also have ‹(2^(m + 1)) = (2::nat) * 2^m›
by auto
have ‹m < 2tht of th GN Le Gener Pub Licas
by (simp add: less_exp)
hence 🚫
by (simp add: mult_strict_mono)
moreover have ‹
by (simp add: power_add)
ultimately have ‹
moreover have ‹m+m ≤ 2^m›
proof (induct m)
case 0
thus ?case by auto
next
case (Suc m)
thus ?case
(meis Suc_leI less_e mult_2 mult_le_mpower_Suc)
qed
ultimately have ‹m*m < 2^2^m›
by (meson less_le_trans one_le_numeral power_increasing)
}
ultimately have False by auto
}
moreover {
text 🚫using y_in_2[deduction] unfolding identity_ν_def by blast
hence Cinfσ: ‹Cinfinite |UNIV::σ set|›
by (simp add: cinfinite_def)
have 1: ‹
by auto
have 2: ‹∀i∈range (inv αInc, 5 Temple Pl, Su 330, Boston, MA 02111-13
proof
fix i :: ‹
assume ‹σ
show ‹o |UNIV::σs›
using A by blast
qed
have ‹
|Sigma (range (inv αsi) (λ y..\alphasigm> i = ασ y})|›
using card_of_UNION_Sigma by blast
hence ‹
|Sigma (range (inv ασ) t. t may_not_modify_gl \sigma"
using union_univ bapply hoae_ruleHarertial.ProcR1
eover hae \open>Sgma(rag iv\alpha🚫 set|\close
using card_of_Sigma_ordLeq_Cinfinite[OF Cinfσ
mately he\open>|UNIV:urlsetet ≤
usingoLe_transitive by blast
moreover {
have ‹
by auto
moreover have ‹|›acu>R ::== PROC Eval(🍋p, 🍋varval)
using card_σ_set_set_boun by blast
moreover have ‹
by auto
ultimately have ‹
by (metis ordLess_imp_ordLeq ordLess_ordLeq_tran)
}
ultimately have False
sisimp
}
ultimatelytforc
\<penWe
special urelements @{text ‹
abstract objects that are distinguished by a (not necessarily surjective)
mapping @{text ‹ασ'›}. @{text ‹ασ'›} will be used to model extended relation
comprehension.›
ασ' :: ‹urrel set ==> σ›
ασ :: ‹
(ασ)
ασ_surj: ‹surj ασ›
ασ_ασ': ‹ασ x = ασ y ==> ασ' x = ασ' y›
-
obtain x where x_prop: ‹|UNIV::σ set| <o |{y. ασ' x = ασ' y}|›
using ασ_pigeonhole by blast
have ‹∃f :: urrel set ==> σ . f ` {y. ασ' x = ασ' y} = UNIV ∧ f x = ασ' x›
proof -
have ‹∃f :: urrel set ==> σ . f ` {y. ασ' x = ασ' y} = UNIV›
by (simp add: x_prop card_of_ordLeq2 ordLess_imp_ordLeq)
then obtain f :: ‹urrel set ==> σ› where ‹f ` {y. ασ' x = ασ' y} = UNIV›
by presburger
moreover obtain a where ‹f a = ασ' x› and ‹ασ' a = ασ' x›
by (smt (verit, best) calculation UNIV_I image_iff mem_Collect_eq)
ultimately have ‹(f (a := f x, x := f a)) ` {y. ασ' x = ασ' y} = UNIV ∧
(f (a := f x, x := f a)) x = ασ' x›
by (auto simp: image_def)
thus ?thesis by blast
qed
then obtain f where fimage: ‹f ` {y. ασ' x = ασ' y} = UNIV›
and fx: ‹f x = ασ' x›
by blast
define ασ :: \< deduction ‹ασ ≡ λ urrels . if ασ' urrels = ασ' x ∧ f urrels ∉ range ασ'
then f urrels
else ασ' urrels›
have ‹surj ασ›
proof -
{
fix s :: σ
{
assume ‹s ∈ range ασ'›
hence 0: ‹ασ' (inv ασ' s) = s›
by (meson f_inv_into_f)
{
assume ‹s = ασ' x›
hence ‹ασ x = s›
using ασ_def fx by presburger
hence ‹∃f . ασ (f s) = s›
by auto
}
moreover {
assume ‹s ≠ ασ' x›
hence ‹ασ (inv ασ' s) = s›
unfolding ασ_def 0 by presburger
hence ‹∃f . ασ (f s) = s›
by blast
}
ultimately have ‹∃f . ασ (f s) = s›
by blast
}
moreover {
assume ‹s ∉ range ασ'›
moreover obtain urrels where ‹
by (smt (verit, best) UNIV_I fimage image_iff mem_Collect_eq)
ultimately have ‹ασ urrels = s›
using ασ_def by presburger
hence ‹∃f . ασ (f s) = s›
by (meson f_inv_into_f range_eqI)
}
ultimately have ‹∃f . ασ (f s) = s›
by blast
}
thus ?thesis
by (metis surj_def)
qed
moreover have ‹∀x y. ασ x = ασ y ⟶ ασ' x = ασ' y›
by (metis ασ_def rangeI)
ultimately show ?thesis
by blast
‹For extended models that validate extended relation comprehension
(and consequently the predecessor axiom), we specify which
abstract objects are distinguished by @{const ασ'}.›
urrel_to_ψrel :: ‹urrel ==> (ψ ==> w ==> bool)› where ‹urrel_to_ψrel ≡ λ r u w . AOT_model_valid_in w (Rep_urrel r (ψυ u))›
ψrel_to_urrel :: ‹(ψ ==> w ==> bool) ==> urrel\< lemma ‹ψrel_to_urrel ≡ λ φ . Abs_urrel
(λ u . ε\o w . case u of ψυ x ==> φ x w | _ ==> False)›
AOT_urrel_ψequiv :: ‹urrel ==> urrel ==> bool› where ‹AOT_urrel_ψequiv ≡ λ r s . ∀ u v . AOT_model_valid_in v (Rep_urrel r (ψυ u)) =
AOT_model_valid_in v (Rep_urrel s (ψυ u))›
urrel_ψrel_quot: ‹Quotient3 AOT_urrel_ψequiv urrel_to_ψrel ψrel_to_urrel›
(rule Quotient3I)
show ‹urrel_to_ψrel (ψrel_to_urrel a) = a› for a
unfolding ψrel_to_urrel_def urrel_to_ψrel_def
apply (rule ext)
apply (subst Abs_urrel_inverse)
by (auto simp: AOT_model_proposition_choice_simp)
show ‹AOT_urrel_ψequiv (ψrel_to_urrel a) (ψrel_to_urrel a)› for a
unfolding ψrel_to_urrel_def AOT_urrel_ψequiv_def
apply (subst (1 2) Abs_urrel_inverse)
by (auto simp: AOT_model_proposition_choice_simp)
show ‹AOT_urrel_ψequiv r s = (AOT_urrel_ψequiv r r ∧ AOT_urrel_ψequiv s s ∧
urrel_to_ψrel r = urrel_to_ψrel s)› for r s
proof
assume ‹AOT_urrel_ψequiv r s›
hence ‹AOT_model_valid_in v (Rep_urrel r (ψυ u)) =
AOT_model_valid_in v (Rep_urrel s (ψυ u))› for u v
using AOT_urrel_ψequiv_def by metis
hence ‹urrel_to_ψrel r = urrel_to_ψrel s›
unfolding urrel_to_ψrel_def
by simp
thus ‹AOT_urrel_ψ<\<A\>≡ z = x) in v]"
urrel_to_ψrel r = urrel_to_ψrel s›
unfolding AOT_urrel_ψequiv_def
by auto
next
assume ‹AOT_urrel_ψequiv r r ∧ψ s ∧
urrel_to_ψrel r = urrel_to_ψrel s›
hence ‹υ =
AOT_model_valid_in v (Rep_urrel s (ψυ u))› for u v
by (metis urrel_to_ψrel_def)
thus ‹AOT_urrel_ψequiv r s›
using AOT_urrel_ψequiv_def by presburger
qed
(ασ')
ασ_eq_ord_exts_all: ‹ασ' a = ασ' b ==> (∧s . urrel_to_ψrel s = urrel_to_ψrel r ==> s ∈ a) ==> (∧ s . urrel_to_ψrel s = urrel_to_ψrel r ==> s ∈ b)›
ασ_eq_ord_exts_ex: ‹ασ' a = ασ' b ==> (∃ s . s ∈ a ∧ urrel_to_ψrel s = urrel_to_ψrel r) ==> (∃s . s ∈ b ∧ urrel_to_ψrel s = urrel_to_ψrel r)›
-
define ασ_wit_intersection where ‹ασ_wit_intersection ≡ λ urrels .
{ordext . ∀urrel . urrel_to_ψrel urrel = ordext ⟶ urrel ∈ urrels}›
define ασ_wit_union where ‹ασ_wit_union ≡ λ urrels .
{ordext . ∃urrel∈urrels . urrel_to_ψrel urrel = ordext}›
let ?ασ_wit = ‹λ urrels .
let ordexts = ασ_wit_intersection urrels in
let ordexts' = ασ_wit_union urrels in
(ordexts, ordexts', undefined)›
define ασ_wit :: ‹urrel set ==> σ› where ‹ασ_wit ≡ λ urrels . Abs_σ (?ασ_wit urrels)›
{
fix a b :: ‹urrel set› and r s
assume ‹ασ_wit a = ασ_wit b›
hence 0: ‹{ordext. ∀urrel. urrel_to_ψrel urrel = ordext ⟶ urrel ∈ a} =
{ordext. ∀urrel. urrel_to_ψrel urrel = ordext ⟶ urrel ∈ b}›
unfolding ασ_wit_def Let_def
apply (subst (asm) Abs_σ_inject)
by (auto simp: ασ_wit_intersection_def ασ_wit_union_def)
assume ‹urrel_to_ψrel s = urrel_to_ψrel r ==> s ∈ a› for s
hence ‹urrel_to_ψrel r ∈
{ordext. ∀urrel. urrel_to_ψrel urrel = ordext ⟶ urrel ∈ a}›
by auto
hence ‹urrel_to_ψrel r ∈
{ordext. ∀urrel. urrel_to_ψrel urrel = ordext ⟶ urrel ∈ b}›
using 0 by blast
moreover assume ‹urrel_to_ψrel s = urrel_to_ψrel r›
ultimately have ‹s ∈ b›
by blast
}
moreover {
fix a b :: ‹urrel set› and s r
assume ‹ασ_wit a = ασ_wit b›
hence 0: ‹{ordext. ∃urrel ∈ a. urrel_to_ψrel urrel = ordext} =
{ordext. ∃urrel ∈ b. urrel_to_ψrel urrel = ordext}›
unfolding ασ_wit_def
using Abs_σ_inject ασ_wit_union_def by auto
assume ‹s ∈ a›
hence ‹urrel_to_ψrel s ∈ {ordext. ∃urrel ∈ a. urrel_to_ψrel urrel = ordext}›
by blast
moreover assume ‹urrel_to_ψrel s = urrel_to_ψrel r›
ultimately have ‹urrel_to_ψrel r ∈
{ordext. ∃urrel ∈ b. urrel_to_ψrel urrel = ordext}›
using "0" by argo
hence ‹∃s. s ∈ b ∧ urrel_to_ψrel s = urrel_to_ψrel r›
by blast
}
ultimately show ?thesis
by (safe intro!: exI[where x=ασ_wit]; metis)
‹We enable the extended model version.›
(input) AOT_ExtendedModel where ‹AOT_ExtendedModel ≡ True›
‹Individual terms are either ordinary objects, represented by ordinary urelements,
abstract objects, modelled as sets of urrelations, or null objects, used to
represent non-denoting definite descriptions.›
κ = ψκ ψ | ακ ‹urrel set› | is_nullκ: nullκ null
‹The mapping from abstract objects to urelements can be naturally
lifted to a surjective mapping from individual terms to urelements.›
κυ :: ‹κ==>υ› where ‹κυ (ψκ x) = ψυ x› ‹κυ (ακ x) = συ (ασ x)› ‹κυ (nullκ x) = nullυ x›
κυ_surj: ‹surj κυ›
using ασ_surj by (metis κυ.simps(1) κυ.simps(2) κυ.simps(3) υ.exhaust surj_def)
‹By construction if the urelement of an individual term is exemplified by
an urrelation, it cannot be a null-object.›
urrel_null_false:
assumes ‹AOT_model_valid_in w (Rep_urrel f (κυ x))›
shows ‹¬is_nullκ x›
by (metis (mono_tags, lifting) assms Rep_urrel κ.collapse(3) κυ.simps(3)
mem_Collect_eq)
‹AOT requires any ordinary object to be @{emph ‹possibly concrete›} and that
there is an object that is not actually, but possibly concrete.›
AOT_model_concreteψ :: ‹ψ ==> w ==> bool›
(AOT_model_concreteψ)
AOT_model_ψ_concrete_in_some_world: ‹∃ w . AOT_model_concreteψ x w›
AOT_model_contingent_object: ‹∃ x w . AOT_model_concreteψ x w ∧¬AOT_model_concreteψ x w0›
by (rule exI[where x=‹λ_ w. w ≠ w0›]) (auto simp: AOT_model_nonactual_world)
‹We define a type class for AOT's terms specifying the conditions under which
objects of that type denote and require the set of denoting terms to be
non-empty.›
AOT_Term =
fixes AOT_model_denotes :: ‹'a ==> bool›
assumes AOT_model_denoting_ex: ‹∃ x . AOT_model_denotes x›
‹All types except the type of propositions involve non-denoting terms. We
define a refined type class for those.›
AOT_IncompleteTerm = AOT_Term +
assumes AOT_model_nondenoting_ex: ‹∃ x . ¬AOT_model_denotes x›
‹Generic non-denoting term.›
AOT_model_nondenoting :: ‹'a::AOT_IncompleteTerm› where ‹AOT_model_nondenoting ≡ SOME τ . ¬AOT_model_denotes τ›
AOT_model_nondenoing: ‹¬AOT_model_denotes (AOT_model_nondenoting)›
using someI_ex[OF AOT_model_nondenoting_ex]
unfolding AOT_model_nondenoting_def by blast
‹@{const AOT_model_denotes} can trivially be extended to products of types.›
prod :: (AOT_Term, AOT_Term) AOT_Term
AOT_model_denotes_prod :: ‹'a×'b ==> bool› where ‹AOT_model_denotes_prod ≡ λ(x,y) . AOT_model_denotes x ∧ AOT_model_denotes y›
proof
show ‹∃x::'a×'b. AOT_model_denotes x›
by (simp add: AOT_model_denotes_prod_def AOT_model_denoting_ex)
‹We specify a transformation of proposition-valued functions on terms, s.t.
the result is fully determined by @{emph ‹regular›} terms. This will be required
for modelling n-ary relations as functions on tuples while preserving AOT's
definition of n-ary relation identity.›
AOT_model_irregular_spec =
fixes AOT_model_irregular :: ‹('a ==>o) ==> 'a ==>o›
and AOT_model_regular :: ‹'a ==> bool›
and AOT_model_term_equiv :: ‹'a ==> 'a ==> bool›
assumes AOT_model_irregular_false: ‹¬AOT_model_valid_in w (AOT_model_irregular φ x)›
assumes AOT_model_irregular_equiv: ‹AOT_model_term_equiv x y ==>
AOT_model_irregular φ x = AOT_model_irregular φ y›
assumes AOT_model_irregular_eqI: ‹(∧ x . AOT_model_regular x ==> φ x = ψ x) ==>
AOT_model_irregular φ x = AOT_model_irregular ψ x›
‹We introduce a type class for individual terms that specifies being regular,
being equivalent (i.e. conceptually @{emph ‹sharing urelements›}) and the
transformation on proposition-valued functions as specified above.›
AOT_IndividualTerm = AOT_IncompleteTerm +
fixes AOT_model_regular :: ‹'a ==> bool›
fixes AOT_model_term_equiv :: ‹'a ==> 'a ==> bool›
fixes AOT_model_irregular :: ‹('a ==>o) ==> 'a ==>o›
assumes AOT_model_irregular_nondenoting: ‹¬AOT_model_regular x ==>¬AOT_model_denotes x›
assumes AOT_model_term_equiv_part_equivp: ‹equivp AOT_model_term_equiv›
assumes AOT_model_term_equiv_denotes: ‹AOT_model_term_equiv x y ==> (AOT_model_denotes x = AOT_model_denotes y)›
assumes AOT_model_term_equiv_regular: ‹AOT_model_term_equiv x y ==> (AOT_model_regular x = AOT_model_regular y)›
assumes AOT_model_irregular: ‹AOT_model_irregular_spec AOT_model_irregular AOT_model_regular
AOT_model_term_equiv›
AOT_model_irregular_spec AOT_model_irregular AOT_model_regular
AOT_model_term_equiv
using AOT_model_irregular .
‹Our concrete type for individual terms satisfies the type class of
individual terms.
Note that all unary individuals are regular. In general, an individual term
may be a tuple and is regular, if at most one tuple element does not denote.›
κ :: AOT_IndividualTerm
AOT_model_term_equiv_κ :: ‹κ ==> κ ==> bool› where ‹
AOT_model_denotes_κ :: ‹κ ==> bool› where ‹AOT_model_denotes_κ ≡ λ x . ¬is_nullκ x›
AOT_model_regular_κ :: ‹κ ==> bool› where ‹AOT_model_regular_κ ≡ λ x . True›
AOT_model_irregular_κ :: ‹(κ ==>o) ==> κ ==>o› where ‹AOT_model_irregular_κ ≡ SOME φ . AOT_model_irregular_spec φ
AOT_model_regular AOT_model_term_equiv›
proof
show ‹∃x :: κ. AOT_model_denotes x›
by (rule exI[where x=‹ψκ undefined›])
(simp add: AOT_model_denotes_κ_def)
show ‹∃x :: κ. ¬AOT_model_denotes x›
by (rule exI[where x=‹nullκ undefined›])
(simp add: AOT_model_denotes_κ_def AOT_model_regular_κ_def)
show "¬AOT_model_regular x ==>¬ AOT_model_denotes x" for x :: κ
by (simp add: AOT_model_regular_κ_def)
show ‹equivp (AOT_model_term_equiv :: κ ==> κ ==> bool)›
by (rule equivpI; rule reflpI exI sympI transpI)
(simp_all add: AOT_model_term_equiv_κ_def)
fix x y :: κ
show ‹AOT_model_term_equiv x y ==> AOT_model_denotes x = AOT_model_denotes y›
by (metis AOT_model_denotes_κ_def AOT_model_term_equiv_κ_def κ.exhaust_disc
κυ.simps υ.disc(1,3,5,6) is_ακ_def is_ψκ_def is_nullκ_def)
fix x y :: κ
show ‹AOT_model_term_equiv x y ==> AOT_model_regular x = AOT_model_regular y›
by (simp add: AOT_model_regular_κ_def)
have "AOT_model_irregular_spec (λ φ (x::κ) . ε\o w . False)
AOT_model_regular AOT_model_term_equiv"
by standard (auto simp: AOT_model_proposition_choice_simp)
thus ‹AOT_model_irregular_spec (AOT_model_irregular::(κ==>o) ==> κ ==>o)
AOT_model_regular AOT_model_term_equiv›
unfolding AOT_model_irregular_κ_def by (metis (no_types, lifting) someI_ex)
‹We define relations among individuals as proposition valued functions.
@{emph ‹Denoting›} unary relations (among @{typ κ}) will match the
urrelations introduced above.›
'a rel (‹🪙›) = ‹UNIV::('a::AOT_IndividualTerm ==>o) set› ..
type_definition_rel
‹We will use the transformation specified above to "fix" the behaviour of
functions on irregular terms when defining @{text ‹λ›}-expressions.›
fix_irregular :: ‹('a::AOT_IndividualTerm ==>o) ==> ('a ==>o)› where ‹fix_irregular ≡ λ φ x . if AOT_model_regular x
then φ x else AOT_model_irregular φ x›
fix_irregular_denoting: ‹AOT_model_denotes x ==> fix_irregular φ x = φ x›
by (meson AOT_model_irregular_nondenoting fix_irregular_def)
fix_irregular_regular: ‹AOT_model_regular x ==> fix_irregular φ x = φ x›
by (meson AOT_model_irregular_nondenoting fix_irregular_def)
fix_irregular_irregular:
<><> x›
by (simp add: fix_irregular_def)
‹Relations among individual terms are (potentially non-denoting) terms.
A relation denotes, if it agrees on all equivalent terms (i.e. terms sharing
urelements), is necessarily false on all non-denoting terms and is
well-behaved on irregular terms.›
rel :: (AOT_IndividualTerm) AOT_IncompleteTerm
‹\linelabel{AOT_model_denotes_rel}›
AOT_model_denotes_rel :: ‹<'a> ==> bool› is ‹λ φ . (∀ x y . AOT_model_term_equiv x y ⟶ φ x = φ y) ∧
(∀ w x . AOT_model_valid_in w (φ x) ⟶ AOT_model_denotes x) ∧
(∀ x . ¬AOT_model_regular x ⟶ φ x = AOT_model_irregular φ x)› .
proof
have ‹AOT_model_irregular (fix_irregular φ) x = AOT_model_irregular φ x›
for φ and x :: 'a
by (rule AOT_model_irregular_eqI) (simp add: fix_irregular_def)
thus ‹∃ x :: <'a> . AOT_model_denotes x›
by (safe intro!: exI[where x=‹Abs_rel (fix_irregular (λx. ε\o w . False))›])
(transfer; auto simp: AOT_model_proposition_choice_simp fix_irregular_def
AOT_model_irregular_equiv AOT_model_term_equiv_regular
AOT_model_irregular_false)
show ‹∃f :: <'a> . ¬AOT_model_denotes f›
by (rule exI[where x=‹Abs_rel (λx. ε\o w . True)›];
auto simp: AOT_model_denotes_rel.abs_eq AOT_model_nondenoting_ex
AOT_model_proposition_choice_simp)
AOT_model_denotes_Abs_rel_fix_irregularI:
assumes ‹
and ‹Schirmer, norber.schiat wweb de
shows ‹
-
have ‹reserved, TU Muen \lambdax. if A AOT_model_ x then \<phi x›
if ‹¬ AOT_model_regular x›
for x
by (rule AOT_model_irregular_eqI) auto
thus ?thesis
unfolding AOT_model_denotes_rel.rep_eq
using assms by (auto simp: AOT_model_irregular_false Abs_rel_inverse
AOT_model_irregular_equiv fix_irregular_def
AOT_model_term_equiv_regular)
AOT_model_term_equiv_rel_equiv:
assumes ‹AOT_model_denotes x›
andpublished by the Free Soft Foundation; e eieith ver 2. ofthe
shows ic, or (at your option) any l ver.
AOT_model_valid_in w (Rep_
assume ‹
thus ‹
AOT_model_valid_in w (Rep_rel Π y)›
by (simp add: AOT_model_denotes_rel.rep_eq)
have 0: ‹(AOT_model_denotes x' ∧ AOT_model_term_equiv x' y) =
(AOT_model_denotes y' ∧ AOT_model_term_equiv y' y)›
if ‹330, Boston, MA 0211-1307
by (metis that AOT_model_term_equiv_denotes AOT_model_term_equiv_part_equivp
equivp_def)
assume ‹Proof of Procedure Eval›
AOT_model_valid_in w (Rep_rel Π y)›s ocdeSesein
moreover have ‹l.ocec1)
ows \forall t bdt1. Γ
(is "AOT_model_denotes ?r")
by (rule AOT_model_denotes_Abs_rel_fix_irregularI)
(auto simp: 0 AOT_model_denotes_rel.rep_eq Abs_rel_inverse fix_irregular_def
AOT_model_proposition_choice_simp AOT_model_irregular_false)
ultimately have ‹
AOT_model_valid_in w (Rep_rel ?r y)›
by blast
thus ‹AOT_model_term_equiv x y›
by (simp add: Abs_rel_inverse AOT_model_proposition_choice_simp
fix_irregular_denoting[OF assms(1)] AOT_model_term_equiv_part_equivp
fix_irregular_denoting[OF assms(2)] assms equivp_reflp)
‹Denoting relations among terms of type @{typ κ} correspond to urrelations.›
rel_to_urrel :: ‹<\<kappa>> ==> urrel› where ‹rel_to_urrel ≡ λ Π . Abs_urrel (λ u . Rep_rel Π (SOME x . κυ x = u))›
urrel_to_rel :: ‹"\^b≡ ‹urrel_to_rel ≡ λ φ . Abs_rel (λ x . Rep_urrel φ (κυ x))›
AOT_rel_equiv :: ‹<'a::AOT_IndividualTerm> ==> <'a> ==> bool› where ‹AOT_rel_equiv ≡ λ f g . AOT_model_denotes f ∧ AOT_model_denotes g ∧ f = g›
urrel_quotient3: ‹Quotient3 AOT_rel_equiv rel_to_urrel urrel_to_rel›
(rule Quotient3I)
have ‹(λu. Rep_urrel a (κυ (SOME x. κυ x = u))) = (λu. Rep_urrel a u)› for a
by (rule ext) (metis (mono_tags, lifting) κυ_surj surj_f_inv_f verit_sko_ex')
thus ‹rel_to_urrel (urrel_to_rel a) = a› for a
(simp add Absrel_in rel_to urrel_
Rep_urrel_inverse)
show ‹AOT_rel_equiv (urrel_to_rel a) (urrel_to_rel a)› for a
unfolding AOT_rel_equiv_def urrel_to_rel_def
by transfer (simp add: AOT_model_regular_κ_def AOT_model_denotes_κ_def
AOT_model_term_equiv_κ_def urrel_null_false)
{
fix a
assume ‹∀w x. AOT_model_valid_in w (a x) ⟶¬ is_nullκ x›
hence ‹(λu. a (SOME x. κυ x = u)) ∈
{φ. ∀x w. ¬ AOT_model_valid_in w (φ (nullυ x))}›
by (simp; metis (mono_tags, lifting) κ.exhaust_disc κυ.simps υ.disc(1,3,5)
υ.disc(6) is_ακ_def is_ψκ_def someI_ex)
} note 1 = this
{
fix r s :: ‹κ ==>o›
assume A: ‹
assume ‹∀w x. AOT_model_valid_in w (r x) ⟶ AOT_model_denotes x›
hence 2: ‹(λu. r (SOME x. κυ x = u)) ∈
{φ. ∀x w. ¬ AOT_model_valid_in w (φ (nullυ x))}›
using 1 AOT_model_denotes_κ_def by meson
assume B: ‹∀x y. AOT_model_term_equiv x y ⟶ s x = s y›
assume ‹∀w x. AOT_model_valid_in w (s x) ⟶ AOT_model_denotes x›
hence 3: ‹(λu. s (SOME x. κυ x = u)) ∈
{φ. ∀x w. ¬ AOT_model_valid_in w (φ (nullυ x))}›
using 1 AOT_model_denotes_κ_def by meson
assume ‹Abs_urrel (λu. r (SOME x. κυ x = u)) =
Abs_urrel (λu. s (SOME x. κυ x = u))›
hence 4: ‹r (SOME x. κυ x = u) = s (SOME x::κ. κυ x = u)› for u
unfolding Abs_urrel_inject[OF 2 3] by metis
have ‹r x = s x› for x
using 4[of ‹κυ x›]
by (metis (mono_tags, lifting) A B AOT_model_term_equiv_κ_def someI_ex)
hence ‹r = s› by auto
}
thus ‹AOT_rel_equiv r s = (AOT_rel_equiv r r ∧ AOT_rel_equiv s s ∧
rel_to_urrel r = rel_to_urrel s)› for r s
unfolding AOT_rel_equiv_def rel_to_urrel_def
by transfer auto
urrel_quotient: ‹Quotient AOT_rel_equiv rel_to_urrel urrel_to_rel
(λx y. AOT_rel_equiv x x ∧ rel_to_urrel x = y)›
using Quotient3_to_Quotient[OF urrel_quotient3] by auto
‹Unary individual terms are always regular and equipped with encoding and
concreteness. The specification of the type class anticipates the required
properties for deriving the axiom system.›
AOT_UnaryIndividualTerm =
java.lang.NullPointerException
and AOT_model_concrete :: ‹w ==> 'a ==> bool›
assumes AOT_model_unary_regular: ‹AOT_model_regular x›―‹All unary individual terms are regular.›
and AOT_model_enc_relid: ‹AOT_model_denotes F ==>
AOT_model_denotes G ==>
(∧ x . AOT_model_enc x F ⟷ AOT_model_enc x G) ==> F = G›
and AOT_model_A_objects: ‹∃x . AOT_model_denotes x ∧
(∀w. ¬ AOT_model_concrete w x) ∧
(∀F. AOT_model_denotes F ⟶ AOT_model_enc x F = φ F)›
and AOT_model_contingent: ‹∃ x w. AOT_model_concrete w x ∧¬ AOT_model_concrete w0 x›
and AOT_model_nocoder: ‹AOT_model_concrete w x ==>¬AOT_model_enc x F›
and AOT_model_concrete_equiv: ‹AOT_model_term_equiv x y ==>
AOT_model_concrete w x = AOT_model_concrete w y›
and AOT_model_concrete_denotes: ‹AOT_model_concrete w x ==> AOT_model_denotes x› ―
and AOT_model_enc_indistinguishable_all: ‹AOT_ExtendedModel ==>
AOT_model_denotes a ==>¬(∃ w . AOT_model_concrete w a) ==>
AOT_model_denotes b ==>¬(∃ w . AOT_model_concrete w b) ==>
AOT_model_denotes Π ==>
(∧ Π' . AOT_model_denotes Π' ==>
(∧ v . AOT_model_valid_in v (Rep_rel Π' a) =
AOT_model_valid_in v (Rep_rel Π' b))) ==>
(∧ Π' . AOT_model_denotes Π' ==>
(∧ v x . ∃ w . AOT_model_concrete w x ==>
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x)) ==>
AOT_model_enc a Π') ==>
(∧ Π' . AOT_model_denotes Π' ==>
(∧ v x . ∃ w . AOT_model_concrete w x ==>
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x)) ==>
AOT_model_enc b Π')›
and AOT_model_enc_indistinguishable_ex: ‹AOT_ExtendedModel ==>
AOT_model_denotes a ==>¬(∃ w . AOT_model_concrete w a) ==>
AOT_model_denotes b ==>¬(∃ w . AOT_model_concrete w b) ==>
AOT_model_denotes Π ==>
(∧ Π' . AOT_model_denotes Π' ==>
(∧ v . AOT_model_valid_in v (Rep_rel Π' a) =
AOT_model_valid_in v (Rep_rel Π' b))) ==>
(∃ Π' . AOT_model_denotes Π' ∧ AOT_model_enc a Π' ∧
(∀ v x . (∃ w . AOT_model_concrete w x) ⟶
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x))) ==>
(∃ Π' . AOT_model_denotes Π' ∧ AOT_model_enc b Π' ∧
(∀ v x . (∃ w . AOT_model_concrete w x) ⟶
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x)))›
‹Instantiate the class of unary individual terms for our concrete type of
individual terms @{typ κ}.›
κ :: AOT_UnaryIndividualTerm
AOT_model_enc_κ :: ‹κ ==> <\<kappa>> ==> bool› where ‹AOT_model_enc_κ ≡ λ x F .
case x of ακ a ==> AOT_model_denotes F ∧ rel_to_urrel F ∈ a
| _ ==> False›
AOT_model_concrete_κ :: ‹w ==> κ ==> bool› where ‹AOT_model_concrete_κ w (ψκ x) = AOT_model_concreteψ x w› ‹AOT_model_concrete_κ w (ακ x) = False› ‹AOT_model_concrete_κ w (nullκ x) = False›
AOT_meta_A_objects_κ: ‹∃x :: κ. AOT_model_denotes x ∧
(∀w. ¬ AOT_model_concrete w x) ∧
(∀F. AOT_model_denotes F ⟶ AOT_model_enc x F = φ F)› for φ
apply (rule exI[where x=‹ακ {f . φ (urrel_to_rel f)}›])
apply (simp add: AOT_model_enc_κ_def AOT_model_denotes_κ_def)
by (metis (no_types, lifting) AOT_rel_equiv_def urrel_quotient
Quotient_rep_abs_fold_unmap)
proof
show ‹AOT_model_regular x› for x :: κ
by (simp add: AOT_model_regular_κ_def)
fix F G :: ‹<\<kappa>>›
assume ‹AOT_model_denotes F›
moreover assume ‹AOT_model_denotes G›
moreover assume ‹∧x. AOT_model_enc x F = AOT_model_enc x G›
moreover obtain x where ‹∀G. AOT_model_denotes G ⟶ AOT_model_enc x G = (F = G)›
using AOT_meta_A_objects_κ by blast
ultimately show ‹F = G› by blast
show ‹∃x :: κ. AOT_model_denotes x ∧
(∀w. ¬ AOT_model_concrete w x) ∧
(∀F. AOT_model_denotes F ⟶ AOT_model_enc x F = φ F)› for φ
using AOT_meta_A_objects_κ .
show ‹∃ (x::κ) w. AOT_model_concrete w x ∧¬ AOT_model_concrete w0 x›
using AOT_model_concrete_κ.simps(1) AOT_model_contingent_object by blast
show ‹AOT_model_concrete w x ==>¬ AOT_model_enc x F› for w and x :: κ and F
by (metis AOT_model_concrete_κ.simps(2) AOT_model_enc_κ_def κ.case_eq_if
κ.collapse(2))
show ‹AOT_model_concrete w x = AOT_model_concrete w y›
if ‹AOT_model_term_equiv x y›
for x y :: κ and w
using that by (induct x; induct y; auto simp: AOT_model_term_equiv_κ_def)
show ‹AOT_model_concrete w x ==> AOT_model_denotes x› for w and x :: κ
by (metis AOT_model_concrete_κ.simps(3) AOT_model_denotes_κ_def κ.collapse(3))
(* Extended models only *) next fix κ κ' :: κ and Π Π' :: ‹<\<kappa>>›and w :: w assume ext: ‹AOT_ExtendedModel› assume‹AOT_model_denotes κ› moreoverassume‹∄w. AOT_model_concrete w κ› ultimatelyobtain a where a_def: ‹ακ a = κ› by (metis AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
AOT_model_denotes_κ_def κ.discI(3) κ.exhaust_sel) assume‹AOT_model_denotes κ'› moreoverassume‹∄w. AOT_model_concrete w κ'› ultimatelyobtain b where b_def: ‹ακ b = κ'› by (metis AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
AOT_model_denotes_κ_def κ.discI(3) κ.exhaust_sel) assume‹AOT_model_denotes Π' ==> AOT_model_valid_in w (Rep_rel Π' κ) =
AOT_model_valid_in w (Rep_rel Π' κ')›for Π' w hence‹AOT_model_valid_in w (Rep_urrel r (κυ κ)) =
AOT_model_valid_in w (Rep_urrel r (κυ κ'))›for r by (metis AOT_rel_equiv_def Abs_rel_inverse Quotient3_rel_rep
iso_tuple_UNIV_I urrel_quotient3 urrel_to_rel_def) hence‹let r = (Abs_urrel (λ u . ε\o w . u = κυ κ)) in
AOT_model_valid_in w (Rep_urrel r (κυ κ)) =
AOT_model_valid_in w (Rep_urrel r (κυ κ'))› by presburger hence ασ_eq: ‹ασ a = ασ b› unfolding Let_def apply (subst (asm) (12) Abs_urrel_inverse) using AOT_model_proposition_choice_simp a_def b_def by force+ assume Π_den: ‹AOT_model_denotes Π› have‹ hence "[A!,y&\A(\∀ F . {yP,F}\≡ φ F) in v]"
by (metis (mono_tags, lifting) AOT_model_denotes_κ_def
AOT_model_denotes_rel.rep_eq κ.exhaust_disc κυ.simps(1,2,3) ‹AOT_model_denotes Π› υ.disc(8,9) υ.distinct(3)
is_ακ_def is_ψκ_def verit_sko_ex')
moreover hav \open \<i Pi> (SOME y. \kappa<psilon
by (metis (mono_tags, lifting) AOT_model_denotes_rel.rep_eq
AOT_model_term_equiv_κ_def κυ.simps(1) Π_den verit_sko_ex')
ultimately have ‹Rep_rel Π (ψκ x) = Rep_urrel (rel_to_urrel Π) (ψυ x)›
unfolding rel_to_urrel_def
by (subst Abs_urrel_inverse) auto
hence ‹∃r . ∀ x . Rep_rel Π (ψκAct_Basic_2[equivlr]by bast
by (auto intro!: exI[where x=‹rel_to_urrel Π›])
then obtain r where r_prop: ‹Rep_rel Π (ψκ x) = Rep_urrel r (ψυ x)› for x
by blast
assume \< thus
(∧v x. ∃w. AOT_model_concrete w x ==>
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x)) ==> AOT_model_enc κ Π'› for Π'
hence ‹&E" by blast
(∧v x. AOT_model_valid_in v (Rep_rel Π' (ψκ x)) =
AOT_model_valid_in v (Rep_rel Π (ψκ x))) ==> AOT_model_enc κ Π'› for Π'
by (metis AOT_model_concrete_κ.simps(2) AOT_model_concrete_κ.simps(3)
κ.exhaust_disc is_ακ_def is_ψκ_def is_nullκ_def)
hence ‹)in v]
AOT_model_valid_in v (Rep_rel Π (ψκ x))) ==> r ∈ a› for r
unfolding a_def[symmetric] AOT_model_enc_κ_def apply simp
by (smt (verit, best) AOT_rel_equiv_def Abs_rel_inverse Quotient3_def
κυ.simps(1) iso_tuple_UNIV_I urrel_quotient3 urrel_to_rel_def)
hence ‹(∧v x. AOT_model_valid_in v (Rep_urrel r' (ψυ x)) =
AOT_model_valid_in v (Rep_urrel r (ψυ x))) ==> r' ∈ a› for r'
unfolding r_prop.
hence ‹∧s. urrel_to_ψrel s = urrel_to_ψrel r ==> s ∈ a›
by (metis urrel_to_ψrel_def)
lemma d desc_encode[PLM]:java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
σσσσ
assume Π'_den: ‹AOT_model_denotes Π'›
assume ‹∃w. AOT_model_concrete w x ==> AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π
hence ‹AOT_model_valid_in v (Rep_rel Π' (ψκ x)) =
AOT_model_valid_in v (Rep_rel Π (ψκ
using AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
by presburger
hence ‹AOT_model_valid_in v (Rep_urrel (rel_to_urrel Π') (ψυ x)) =
AOT_model_valid_in v (Rep_urrel r (ψυ x))› for v x
by (smt (verit, best) AOT_rel_equiv_def Abs_rel_inverse Quotient3_def
κυ.simps(1) iso_tuple_UNIV_I r_prop urrel_quotient3 urrel_to_rel_def Π'_den)
hence ‹urrel_to_ψrel (rel_to_urrel Π') = urrel_to_ψrel r›
by (metis (full_types) AOT_urrel_ψequiv_def Quotient3_def urrel_ψrel_quot)
hence ‹rel_to_urrel Π' ∈ b› using 0 by blast
thus ‹AOT_model_enc κ' Π'›
unfolding b_def[symmetric] AOT_model_enc_κ_def by (auto simp: Π'_den)
fix κ κ' :: κ and Π Π' :: ‹<\<kappa>>› and w :: w
assume ext: ‹AOT_ExtendedModel›
assume ‹AOT_model_denotes κ›
moreover assume ‹∄P<A>φ x) in v]"
ultimately obtain a where a_def: ‹ακ a = κ›
by (metis AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
AOT_model_denotes_κ_def κ.discI(3) κ.exhaust_sel)
assume ‹
moreover assume ‹∄w. AOT_model_concrete w κ'›
ultimately obtain b where b_def: ‹ακ b = κ'›
by (metis AOT_model_ψ_concrete_in_some_world AOT_model_concrete_κ.simps(1)
AOT_model_denotes_κ_def κ.discI(3) κ.exhaust_sel)
assume ‹AOT_model_denotes Π' ==> AOT_model_valid_in w (Rep_rel Π' κ) =
AOT_model_valid_in w (Rep_rel Π' κ')› for Π' w
hence ‹AOT_model_valid_in w (Rep_urrel r (κυ κ)) =
AOT_model_valid_in w (Rep_urrel r (κυ κ'))› for r
by (metis AOT_rel_equiv_def Abs_rel_inverse Quotient3_rel_rep
iso_tuple_UNIV_I urrel_quotient3 urrel_to_rel_def)
hence ‹let r = (Abs_urrel (λ u . ε\o w . u = κυ κ)) in
AOT_model_valid_in w (Rep_urrel r (κυ κ)) =
AOT_model_valid_in w (Rep_urrel r (κυ κ'))›
by presburger
hence ασ_eq: ‹ασ a = ασ b›
unfolding Let_def
apply (subst (asm) (1 2) Abs_urrel_inverse)
using AOT_model_proposition_choice_simp a_def b_def by force+
assume Π_den: ‹AOT_model_denotes Π›
have ‹¬AOT_model_valid_in w (Rep_rel Π (SOME xa. κυ xa = nullυ x))› for x w
by (metis (mono_tags, lifting) AOT_model_denotes_κ_def
AOT_model_denotes_rel.rep_eq κ.exhaust_disc κυ.simps(1,2,3) ‹AOT_model_denotes Π› υ.disc(8) υ.disc(9) υ.distinct(3)
is_ακ_def is_ψκ_def verit_sko_ex')
moreover have ‹Rep_rel Π (ψκ x) = Rep_rel Π (SOME xa. κυ xa = ψυ x)› for x
by (metis (mono_tags, lifting) AOT_model_denotes_rel.rep_eq
AOT_model_term_equiv_κ_def κυ.simps(1) Π_den verit_sko_ex')
ultimately have ‹Rep_rel Π (ψκ x) = Rep_urrel (rel_to_urrel Π) (ψυ x)› for x
unfolding rel_to_urrel_def
by (subst Abs_urrel_inverse) auto
hence ‹∃r . ∀ (ψκ x) = Rep_urrel r (ψυ x)›
by (auto intro!: exI[where x=‹rel_to_urrel Π›])
then obtain r where r_prop: ‹Rep_rel Π (ψκ x) = Rep_urrel r (ψυ x)› for x
by blast
assume ‹∃Π'. AOT_model_denotes Π' ∧
AOT_model_enc κ Π' ∧
(∀v x. (∃using A_dscripton by (rl"\<^>\
AOT_model_valid_in v (Rep_rel Π x))›
then obtain Π' where
Π'_den: ‹AOT_model_denotes Π'› and
κ_enc_Π': ‹AOT_model_enc κ Π'› and
Π'_prop: ‹∃w. AOT_model_concrete w x ==>
AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x)› for v x
by blast
have ‹AOT_model_valid_in v (Rep_rel Π' (ψκ x)) =
AOT_model_valid_in v (Rep_rel Π (ψκ x))› for x v
ddO🚫
hence 0: ‹)›
unfolding AOT_urrel_ψthus\openAOT_ x y›
by (smt (verit) AOT_rel_equiv_def Abs_rel_inveition_ch
κυ
Π_den Π
have ‹ a›
rrel\Pi) = urrel_to_ψrel (rel_to_urrel Π)›
java.lang.NullPointerException
by (metis Quotient3_rel 0 urrel_ψrel_quot)
hence ‹Quotient3 AOT_rel_equiv rel_to_urrel urrel_to_rel› (rule Quotient3I)
σσσσ
then obtain s where
s_prop: ‹ relto<>relAOT_rel_equiv (urrel_to_rel a) (urrel_to_rel a)›
by blast
then obtain Π'' where
Π''_prop: ‹∀(λu. a (SOME x. κ x = u)) ∈
by (metis AOT_rel_equiv_def Quotient3_def urrel_quotient3)
moreover have ‹
by (metis AOT_model_enc_κ_def Π
moreover have ‹
AOT_model_valid_in v(R_e <>x
>∃. AOT_model_concrete w x›
assume ‹
then obtain u where x_def: ‹
by (metis AOT_model_concrete_κ.simps(2,3) κ.xhst)
show ‹AOT_model_term_equiv x apply (rul beta_C_meta_1
java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
unfolding x_def
by (smt (verit, best) AOT_rel_equiv_def A' \Longrightarrow
Π''_den Π''_prop Π_den κupsilon>.simps(1) iso_tuple_UNIV_I s_prop
urrel_quotient3 urrel_to_ψrel_def urrel_to_rel_def)
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
ultimately show ‹
(∀v x. (∃w. AOT_model_concrete w x) ⟶ AOT_model_valid_in v (Rep_rel Π' x) =
AOT_model_valid_in v (Rep_rel Π x))›
apply (safe intro!: exI[where x=Π''])
by auto
‹
A tuple is regular, if at most one element does not denote. I.e. a pair is
regular, if the first (unary) element denotes and the second is regular (i.e.
at most one of its recursive tuple elements does not denote), or the first does
not denote, but the second denotes (i.e. all its recursive tuple elements
denote).›
prod :: (AOT_UnaryIndividualTerm, AOT_IndividualTerm) AOT_IndividualTerm
AOT_model_regular_prod :: ‹'a× ‹ ¬AOT_model_denotes x ∧ AOT_model_denotes y› 🚫 ‹ (x1 (\^>2^sub>2>2) .
java.lang.NullPointerException
AOT_model_irregular_prod :: ‹('a×'b ==>o) ==> 'a×"[1) in v]"
AOT_model_irregular_proj2: ‹AOT_model_denotes x ==>
AOT_model_irregular φ (x,y) =
AOT_model_irregular (\<lambdayxx', y)) y›
AOT_model_irregular_proj1: ‹¬AOT_model_denotes x ∧ AOT_model_denotes y ==>
AOT_model_irregular φ (x,y) =
AOT_model_irregular (λx. φ (x, SOME y' . AOT_model_term_equiv y y')) x›
AOT_model_irregular_prod_generic: ‹¬AOT_model_denotes x ∧¬AOT_model_denotes y ==>Ap&\λ y . p= (1)) in v]"
AOT_model_irregular φ (x,y) =
(SOME Φ
java.lang.NullPointerException
by auto blast
using "termination" by blast
proof
obtain x :: 'a and y :: 'b where
java.lang.NullPointerException
( AOT_model_nondenoting_ex AOT_model_denoting_ex)
thus ‹∃x::'a×'b. ¬AOT_model_denotes x›
by (auto simp: AOT_model_denotes_prod_def AOT_model_regular_prod_def)
show ‹ no>AOT_model_denotes x›'a×'b›
by (metis (mono_tags, lifting) AOT_model_denotes_prod_def case_prod_unfold
AOT_model_irregular_nondenoting AOT_model_regular_prod_def)
fix x y :: ‹
show ‹
by (metis (mono_tags, lifting) AOT_model_denotes_prod_def case_prod_beta
AOT_model_term_equiv_denotes AOT_model_term_equiv_prod_def )
fix x y :: ‹
show ‹AOT_model_concrete_κ w (nullκ x) = False›
by (induct x; induct y;
simp add: AOT_model_term_equiv_prod_def AOT_model_regular_prod_def)
(meson AOT_model_term_equiv_denotes AOT_model_term_equiv_regu (🚫ακ {f . φ (urrel_to_rel f)}›
interpret sp: AOT_model_irregular_spec ‹
AOT_model_regular AOT_model_term_equiv
by (simp add: AOT_model_irregular_spec_def AOT_model_proposition_choice_simp)
have ex_spec: ‹<\<
AOT_model_irregular_spec φ>AOT_model_denotes F›
using sp.AOT_model_irregular_spec_axioms by blast
have some_spec: ‹
(SOME φ :: ('a×) ==>'a×🚫∀🚫 AOT_model_enc x G = (F = G)›
AOT_model_irregular_spec φ AOT_model_regular AOT_model_term_equiv)
AOT_model_regular AOT_model_term_equiv›
using someI_ex[OF ex_spec] by argo
interpret sp_some: AOT_model_irregular_spec ‹'b ==>
AOT_model_irregular_spec φ AOT_model_regular AOT_model_term_equiv›F. AOT_model_denotes F \longrightarrow AOT_model_enc x F = φ for φ
AOT_model_regular AOT_model_term_equiv
using some_spec by blast
show ‹ 'a×
AOT_model_regular AOT_model_term_equiv› AOT_model_concrete_\<kappa._mode_contngent_ojctb blat
roof
have ‹
for w φ and a :: 'a and b :: 'b
by (induct arbitrary: φ r
(auto simp: AOT_model_irregular_false sp_some.AOT_model_irregular_false)
thus "¬ and x :: ‹
by (induct x)
next
{
fix x_def)
assume x1yAOT_model_concrete w x ==> AOT_model_denotes x› for w and x :: κ
moreover assume x2_equiv: ‹2›
ultimately have xy_equiv: ‹
by (simp add: AOT_model_term_equiv_prod_def)
{
java.lang.NullPointerException
moreover hence ‹AOT_model_denotes κ›
using AOT_model_term_equiv_denotes AOT_model_term_equiv_regular
x1y\ακ a = κ
ti AT_ode_<>_
AOT_model_irregular \phi (y2)›
using AOT_model_irregular_equiv AOT_model_term_equiv_eps(3)
x\∄w. AOT_model_concrete w κ'›
}
moreover {
assume ‹oncrete_\kappa.simps(1)
moreover hence ‹
java.lang.NullPointerException
ultimately have ‹2) =
AOT_model_irregular φ (yAOT_model_valid_in w (Rep_urrel r (κυ \)) =
using AOT_model_irregular_equiv AOT_model_term_equiv_eps(3)
java.lang.NullPointerException
}
moreover {
assume denotes_x: ‹
hence denotes_y: ‹1 ∧AOT_model_denotesy\^>2›
by (meson AOT_model_term_equiv_denotes AOT_model_term_equiv_regular
x1quivv x2_equiv)
have eps_eq: ‹ασ a = ασ b›
by (simp add: AOT_ Abs_urre)
have ‹AOT_model_denotes Π›
using denotes_x denotes_y
using sp_some.AOT_model_irregular_equiv xy_equiv by auto
}
moreover {
assume denotes_x: ‹AOT_model_denotes xxsu2›
hence denotes_y: <open\¬AOT_model_denotes yenotes\›
by (meson AOT_model_term_equiv_denotes x1_equiv x2_equiv)
have eps_eq: ‹
java.lang.NullPointerException
have ‹rel_to_urrel Π›])
using denotes_x denotes_y
using AOT_model_irregular_nondenoting calculation(2) by blast
}
ultimately have ‹2) = AOT_model_irregular φ (y2)›
odel_term_equiv_denotes_oe_tmu_el
sp_some.AOT_model_irregular_equiv x1_equiv x2_equiv xy_equiv
yblast
} note 0 = this
how\>_oel_term_equv y==>
AOT_model_irregular\phix = AOT_model_irregular φ y›
for x y :: ‹ and φ
by (induct x OT_modev (Rpre \Pi(\omega>κ))==> a›
next
xφ :: ‹'b ==>›
assume ‹ for x
hence ‹(∧v x. AOT_model_valid_in v (Rep_urrel r' (ψυ x)) =
if ‹ \not>AOT_modeldnote x<nd
using that unfolding AOT_model_regular_prod_def by simp
hence ‹ (x,y)›
for x :: 'a and y :: 'b
proof: 🚫
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
thus ?case
apply simp
by (meson AOT_model_irregular_eqI AOT_model_irregular_nondenoting
dlr_ui_s))
est_qv_def b_e_nveseQuoiet_df
(2 x y φ)
thus ?case
apply simp
by (meson AOT_model_irregular_nondenoting AOT_model_term_equiv_denotes
AOT_model_term_equiv_eps(1))
next
hence \<penrel_to_urrel using 0 by blast
thus ?case
apply simp
by (metis (mono_tags, lifting) AOT_model_regular_prod_def case_prod_conv
sp_some.AOT_model_irreular_q sr_ar)
qed
\<penn'a×'b›
ext:openATEeddMoel\close
qed
‹ακ a = κ›
AOT_meta_prod_equivI:
shows"∧':T_nrIiiulTem)x y: bA_diiuaTe.
AOT_model_term_equiv x y ==> AOT_model_term_equiv (a,x) (a,y)"
and "∧∄w. AOT_model_concrete w κ'›
AOT_model_term_equiv x y ==> AOT_model_term_qui (,b (,"
unfolding AOT_model_term_equiv_prod_def
by (simp add: AOTodel_tem_equivpat_quip qup_rf)+
‹
o :: AOT_Term
AOT_model_denotes_o :: ‹o==> bool› where ‹AOT_model_valid_in w (Rep_urrel r (κυ κ)) =
proof
wopen>∃x::o. AOT_model_denotes x›
by ( so_tupe_I_Iurr_quoint3rel__rel_de)
rrel\kappaυ ‹
that denote.\close
'a AOT_var = ‹{ x :: 'a::AOT_Term . AOT_model_denotes x }›
morphisms AOT_term_of_var AOT_var_of_term
by (simp add: AOT_model_denoting_ex)
‹Simplify automatically generated theorems and rules.›
AOT_var_of_term_induct[induct del]
AOT_var_of_term_cases[cases del]
AOT_term_of_var_induct[induct del]
AOT_term_of_var_cases[cases del]
AOT_var_of_term_inverse = AOT_var_of_term_inverse[simplified]
and AOT_var_of_term_inject = AOT_var_of_term_inject[simplified]
and AOT_var_of_term_induct =
AOT_var_of_term_induct[simplified, induct type: AOT_var]
and AOT_var_of_term_cases =
AOT_var_of_term_cases[simplified, cases type: AOT_var]
and AOT_term_of_var = AOT_term_of_var[simplified]
and AOT_term_of_var_cases =
AOT_term_of_var_cases[simplified, induct pred: AOT_term_of_var]
and AOT_term_of_var_induct =
AOT_term_of_var_induct[simplified, induct pred: AOT_term_of_var]
and AOT_term_of_var_inverse = AOT_term_of_var_inverse[simplified]
and AOT_term_of_var_inject = AOT_term_of_var_inject[simplified]
‹Equivalence by definition is modelled as necessary equivalence.›
AOT_model_equiv_def :: \>o==>o==> bool›
(AOT_model_equiv_def)
AOT_model_equiv_def: ‹AOT_model_equiv_def φ ψ = (∀ v . AOT_model_valid_in v φ =
AOT_model_valid_in v ψ)›
by (rule exI[where x=‹λ φ ψ . ∀ v .
AOT_model_valid_in v ψ›
‹Identity by definition is modelled as identity for denoting terms plus
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
AOT_model_id_def :: ‹('b ==> 'a::AOT_Term) ==> ('b ==> 'a) ==> bool›
(AOT_model_id_def)
AOT_model_id_def: ‹(AOT_model_id_def τ σ(rule CP
then τ α = σ α
java.lang.NullPointerException
by (rule exI[where x="λ τ σ . ∀ α . if AOT_model_denotes (σ α)
then τ α = σ α
else ¬AOT_model_denotes (τ α)"])
blast ‹To reduce definitions by identity without free variables to definitions
identit with free variables acting on the unit type, we ive the unit ttype
a trivial instantiation to @{class AOT_Term}.›
unit :: AOT_Term
‹Modally-strict and modally-fragile axioms are as necessary,
resp. actually valid propositions.›
AOT_model_axiom where ‹
AOT_model_act_axiom where ‹AOT_model_act_axiom ≡ λ φ . AOT_model_valid_in w[
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.