Import of current (Isabelle 2016-1) release of Featherweight OCL.

This commit is contained in:
Achim D. Brucker 2016-12-26 11:28:09 +00:00
parent 02c1e24f17
commit 49ed81521f
11 changed files with 86 additions and 93 deletions

1
ROOT
View File

@ -65,4 +65,3 @@ session Featherweight_OCL (AFP) in "src" = HOL +
"root.bib"
"root.tex"
"FOCL_Syntax.tex"

View File

@ -82,7 +82,7 @@ done in our ``design model''
(see \autoref{ex:employee-design:uml}).
\endisatagafp
\isatagannexa
(see \url{http://afp.sourceforge.net/entries/Featherweight_OCL.shtml}).
(see \url{http://isa-afp.org/entries/Featherweight_OCL.shtml}).
\endisatagannexa
To be precise, this theory contains the formalization of the data-part
covered by the UML class model (see \autoref{fig:person-ana}):*}

View File

@ -210,7 +210,7 @@ begin
lemma defined_mono : "\<tau> \<Turnstile>\<upsilon>(f Y Z) \<Longrightarrow> (\<tau> \<Turnstile>\<delta> Y) \<and> (\<tau> \<Turnstile>\<upsilon> Z)"
by(auto simp: valid_def bot_fun_def invalid_def
def_scheme StrongEq_def OclValid_def false_def true_def
split: split_if_asm)
split: if_split_asm)
lemma cp_pre: "cp self' \<Longrightarrow> cp a1' \<Longrightarrow> cp (\<lambda>X. PRE (self' X) (a1' X) )"
by(rule_tac f=PRE in cpI2, auto intro: cp\<^sub>P\<^sub>R\<^sub>E)
@ -278,7 +278,7 @@ begin
lemma defined_mono : "\<tau> \<Turnstile>\<upsilon>(f X Y Z) \<Longrightarrow> (\<tau> \<Turnstile>\<delta> X) \<and> (\<tau> \<Turnstile>\<upsilon> Y) \<and> (\<tau> \<Turnstile>\<upsilon> Z)"
by(auto simp: valid_def bot_fun_def invalid_def
def_scheme StrongEq_def OclValid_def false_def true_def
split: split_if_asm)
split: if_split_asm)
lemma cp_pre: "cp self' \<Longrightarrow> cp a1' \<Longrightarrow> cp a2' \<Longrightarrow> cp (\<lambda>X. PRE (self' X) (a1' X) (a2' X) )"
by(rule_tac f=PRE in cpI3, auto intro: cp\<^sub>P\<^sub>R\<^sub>E)
@ -370,7 +370,7 @@ begin
lemma defined_mono : "\<tau> \<Turnstile>\<upsilon>(f W X Y Z) \<Longrightarrow> (\<tau> \<Turnstile>\<delta> W) \<and> (\<tau> \<Turnstile>\<upsilon> X) \<and> (\<tau> \<Turnstile>\<upsilon> Y) \<and> (\<tau> \<Turnstile>\<upsilon> Z)"
by(auto simp: valid_def bot_fun_def invalid_def
def_scheme StrongEq_def OclValid_def false_def true_def
split: split_if_asm)
split: if_split_asm)
lemma cp_pre: "cp self' \<Longrightarrow> cp a1' \<Longrightarrow> cp a2'\<Longrightarrow> cp a3'
\<Longrightarrow> cp (\<lambda>X. PRE (self' X) (a1' X) (a2' X) (a3' X) )"

View File

@ -710,7 +710,7 @@ apply(rule ext,auto simp: OclValid_def true_def defined_def)
apply(erule_tac x=a in allE)
apply(erule_tac x=b in allE)
apply(auto simp: false_def true_def defined_def bot_Boolean_def null_Boolean_def
split: option.split_asm HOL.split_if_asm)
split: option.split_asm HOL.if_split_asm)
done
text{* However, certain properties (like transitivity) can not
@ -859,7 +859,7 @@ by(auto simp: OclNot_def OclValid_def valid_def invalid_def false_def true_def n
(* ... and the usual rules on strictness, definedness propoagation, and cp ... *)
lemma foundation16: "\<tau> \<Turnstile> (\<delta> X) = (X \<tau> \<noteq> bot \<and> X \<tau> \<noteq> null)"
by(auto simp: OclValid_def defined_def false_def true_def bot_fun_def null_fun_def
split:split_if_asm)
split:if_split_asm)
lemma foundation16'': "\<not>(\<tau> \<Turnstile> (\<delta> X)) = ((\<tau> \<Turnstile> (X \<triangleq> invalid)) \<or> (\<tau> \<Turnstile> (X \<triangleq> null)))"
apply(simp add: foundation16)
@ -869,18 +869,18 @@ by(auto simp:defined_def false_def true_def bot_fun_def null_fun_def OclValid_d
lemma foundation16': "(\<tau> \<Turnstile> (\<delta> X)) = (X \<tau> \<noteq> invalid \<tau> \<and> X \<tau> \<noteq> null \<tau>)"
apply(simp add:invalid_def null_def null_fun_def)
by(auto simp: OclValid_def defined_def false_def true_def bot_fun_def null_fun_def
split:split_if_asm)
split:if_split_asm)
lemma foundation18: "(\<tau> \<Turnstile> (\<upsilon> X)) = (X \<tau> \<noteq> invalid \<tau>)"
by(auto simp: OclValid_def valid_def false_def true_def bot_fun_def invalid_def
split:split_if_asm)
split:if_split_asm)
(*legacy*)
lemma foundation18': "(\<tau> \<Turnstile> (\<upsilon> X)) = (X \<tau> \<noteq> bot)"
by(auto simp: OclValid_def valid_def false_def true_def bot_fun_def
split:split_if_asm)
split:if_split_asm)
lemma foundation18'': "(\<tau> \<Turnstile> (\<upsilon> X) )= (\<not>(\<tau> \<Turnstile> (X \<triangleq> invalid)))"
by(auto simp:foundation15)
@ -891,7 +891,7 @@ by(simp add: foundation18 foundation16 invalid_def)
lemma foundation21: "(not A \<triangleq> not B) = (A \<triangleq> B)"
by(rule ext, auto simp: OclNot_def StrongEq_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
lemma foundation22: "(\<tau> \<Turnstile> (X \<triangleq> Y)) = (X \<tau> = Y \<tau>)"
by(auto simp: StrongEq_def OclValid_def true_def)
@ -926,24 +926,24 @@ by (simp add: foundation12 foundation6)
lemma defined_not_I : "\<tau> \<Turnstile> \<delta> (x) \<Longrightarrow> \<tau> \<Turnstile> \<delta> (not x)"
by(auto simp: OclNot_def null_def invalid_def defined_def valid_def OclValid_def
true_def false_def bot_option_def null_option_def null_fun_def bot_fun_def
split: option.split_asm HOL.split_if_asm)
split: option.split_asm HOL.if_split_asm)
lemma valid_not_I : "\<tau> \<Turnstile> \<upsilon> (x) \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> (not x)"
by(auto simp: OclNot_def null_def invalid_def defined_def valid_def OclValid_def
true_def false_def bot_option_def null_option_def null_fun_def bot_fun_def
split: option.split_asm option.split HOL.split_if_asm)
split: option.split_asm option.split HOL.if_split_asm)
lemma defined_and_I : "\<tau> \<Turnstile> \<delta> (x) \<Longrightarrow> \<tau> \<Turnstile> \<delta> (y) \<Longrightarrow> \<tau> \<Turnstile> \<delta> (x and y)"
apply(simp add: OclAnd_def null_def invalid_def defined_def valid_def OclValid_def
true_def false_def bot_option_def null_option_def null_fun_def bot_fun_def
split: option.split_asm HOL.split_if_asm)
split: option.split_asm HOL.if_split_asm)
apply(auto simp: null_option_def split: bool.split)
by(case_tac "ya",simp_all)
lemma valid_and_I : "\<tau> \<Turnstile> \<upsilon> (x) \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> (y) \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> (x and y)"
apply(simp add: OclAnd_def null_def invalid_def defined_def valid_def OclValid_def
true_def false_def bot_option_def null_option_def null_fun_def bot_fun_def
split: option.split_asm HOL.split_if_asm)
split: option.split_asm HOL.if_split_asm)
by(auto simp: null_option_def split: option.split bool.split)
lemma defined_or_I : "\<tau> \<Turnstile> \<delta> (x) \<Longrightarrow> \<tau> \<Turnstile> \<delta> (y) \<Longrightarrow> \<tau> \<Turnstile> \<delta> (x or y)"
@ -1165,7 +1165,7 @@ lemma OclNot_defargs:
"\<tau> \<Turnstile> (not P) \<Longrightarrow> \<tau> \<Turnstile> \<delta> P"
by(auto simp: OclNot_def OclValid_def true_def invalid_def defined_def false_def
bot_fun_def bot_option_def null_fun_def null_option_def
split: bool.split_asm HOL.split_if_asm option.split option.split_asm)
split: bool.split_asm HOL.if_split_asm option.split option.split_asm)
lemma OclNot_contrapos_nn:

View File

@ -125,7 +125,7 @@ begin
apply(simp_all add:def_scheme)
apply(simp add: OclValid_def)
by(auto simp:foundation13 StrongEq_def false_def true_def defined_def bot_fun_def null_fun_def def_body
split: split_if_asm)
split: if_split_asm)
lemma def_valid_then_def: "\<upsilon>(f x) = (\<delta>(f x))"
apply(rule ext, rename_tac "\<tau>",subst foundation22[symmetric])
@ -137,7 +137,7 @@ begin
apply(simp add: OclValid_def valid_def, subst cp_StrongEq)
apply(subst (2) cp_defined, simp, simp add: cp_defined[symmetric])
by(auto simp:foundation13 StrongEq_def false_def true_def defined_def bot_fun_def null_fun_def def_body
split: split_if_asm)
split: if_split_asm)
end
subsection{* Property Profiles for Single *}
@ -262,7 +262,7 @@ proof -
apply(simp)
apply(simp add: def_scheme')
apply(simp add: defined_def OclValid_def false_def true_def
bot_fun_def null_fun_def def_scheme' split: split_if_asm, rule def_body')
bot_fun_def null_fun_def def_scheme' split: if_split_asm, rule def_body')
by(simp add: true_def)+
qed
@ -286,7 +286,7 @@ sublocale profile_bin\<^sub>d_\<^sub>d < profile_bin_scheme_defined defined
apply(erule StrongEq_L_subst2_rev, simp, simp)+
apply(simp add: def_scheme)
apply(simp add: defined_def OclValid_def false_def true_def bot_fun_def null_fun_def def_scheme)
apply(rule def_body, simp_all add: true_def false_def split:split_if_asm)
apply(rule def_body, simp_all add: true_def false_def split:if_split_asm)
done
locale profile_bin\<^sub>d_\<^sub>v =
@ -326,7 +326,7 @@ context profile_bin\<^sub>S\<^sub>t\<^sub>r\<^sub>o\<^sub>n\<^sub>g\<^sub>E\<^su
(* definedness *)
lemma defargs: "\<tau> \<Turnstile> f x y \<Longrightarrow> (\<tau> \<Turnstile> \<upsilon> x) \<and> (\<tau> \<Turnstile> \<upsilon> y)"
by(simp add: def_scheme OclValid_def true_def invalid_def valid_def bot_option_def
split: bool.split_asm HOL.split_if_asm)
split: bool.split_asm HOL.if_split_asm)
lemma defined_args_valid' : "\<delta> (f x y) = (\<upsilon> x and \<upsilon> y)"
by(auto intro!: transform2_rev defined_and_I simp:foundation10 defined_args_valid)
@ -370,7 +370,7 @@ sublocale profile_bin\<^sub>v_\<^sub>v < profile_bin_scheme valid valid
foundation1 foundation10' foundation16' foundation18 foundation21 foundation22 foundation9)
apply(simp add: def_scheme)
apply(simp add: defined_def OclValid_def false_def true_def
bot_fun_def null_fun_def def_scheme split: split_if_asm, rule def_body)
bot_fun_def null_fun_def def_scheme split: if_split_asm, rule def_body)
by (metis OclValid_def foundation18' true_def)+
end

View File

@ -106,7 +106,7 @@ text{* We derive the usual laws on definedness for (generic) object equality:*}
lemma StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_defargs:
"\<tau> \<Turnstile> (StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t x (y::('\<AA>,'a::{null,object})val))\<Longrightarrow> (\<tau> \<Turnstile>(\<upsilon> x)) \<and> (\<tau> \<Turnstile>(\<upsilon> y))"
by(simp add: StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_def OclValid_def true_def invalid_def bot_option_def
split: bool.split_asm HOL.split_if_asm)
split: bool.split_asm HOL.if_split_asm)
lemma defined_StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_I:
assumes val_x : "\<tau> \<Turnstile> \<upsilon> x"
@ -726,7 +726,7 @@ proof -
simp add: OclAllInstances_at_pre_def OclAllInstances_at_post_def
OclValid_def OclIncludes_def true_def F F'
valid_x[simplified OclValid_def] valid_y[simplified OclValid_def] bot_option_def
split: split_if_asm,
split: if_split_asm,
simp add: comp_def image_def, fastforce)+
qed
@ -807,7 +807,7 @@ lemma
apply(insert X_null,
simp add : OclIncludes_def OclIsModifiedOnly_def StrongEq_def OclValid_def true_def)
apply(case_tac \<tau>, simp)
apply(simp split: split_if_asm)
apply(simp split: if_split_asm)
by(simp add: null_fun_def, blast)
subsubsection{* Context Passing *}
@ -869,7 +869,7 @@ proof -
apply(erule bexE, rename_tac x')
apply(simp add: P_def)
apply(simp only: OclNot3[symmetric], simp only: not_inj)
apply(simp add: StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_def split: split_if_asm)
apply(simp add: StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_def split: if_split_asm)
apply(subgoal_tac "x \<tau> \<noteq> null \<and> x' \<noteq> null", simp)
apply (metis (mono_tags) drop.simps def_x foundation16[THEN iffD1] true_def)
by(simp add: invalid_def bot_option_def true_def)+
@ -881,7 +881,7 @@ proof -
apply(rule ballI, drule_tac x = "x'" in ballE) prefer 3 apply assumption
apply(simp add: P_def)
apply(simp only: OclNot4[symmetric], simp only: not_inj)
apply(simp add: StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_def false_def split: split_if_asm)
apply(simp add: StrictRefEq\<^sub>O\<^sub>b\<^sub>j\<^sub>e\<^sub>c\<^sub>t_def false_def split: if_split_asm)
apply(subgoal_tac "x \<tau> \<noteq> null \<and> x' \<noteq> null", simp)
apply (metis def_X' def_x foundation16[THEN iffD1])
by(simp add: invalid_def bot_option_def false_def)+
@ -912,13 +912,13 @@ theorem framing:
proof - show "\<tau> \<Turnstile> \<delta> x \<Longrightarrow> ?thesis" proof - assume def_x : "\<tau> \<Turnstile> \<delta> x" show ?thesis proof -
have def_X : "\<tau> \<Turnstile> \<delta> X"
apply(insert oid_is_typerepr, simp add: UML_Set.OclForall_def OclValid_def split: split_if_asm)
apply(insert oid_is_typerepr, simp add: UML_Set.OclForall_def OclValid_def split: if_split_asm)
by(simp add: bot_option_def true_def)
have def_X' : "\<And>x. x \<in> \<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>)\<rceil>\<rceil> \<Longrightarrow> x \<noteq> null"
apply(insert modifiesclause, simp add: OclIsModifiedOnly_def OclValid_def split: split_if_asm)
apply(case_tac \<tau>, simp split: split_if_asm)
apply(simp add: UML_Set.OclExcluding_def split: split_if_asm)
apply(insert modifiesclause, simp add: OclIsModifiedOnly_def OclValid_def split: if_split_asm)
apply(case_tac \<tau>, simp split: if_split_asm)
apply(simp add: UML_Set.OclExcluding_def split: if_split_asm)
apply(subst (asm) (2) Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse)
apply(simp, (rule disjI2)+)
apply (metis (hide_lams, mono_tags) Diff_iff Set_inv_lemma def_X)
@ -939,7 +939,7 @@ theorem framing:
apply(rule conjI, rule impI)
apply(rule_tac f = "\<lambda>x. P \<lceil>x\<rceil>" in arg_cong)
apply(insert modifiesclause[simplified OclIsModifiedOnly_def OclValid_def])
apply(case_tac \<tau>, rename_tac \<sigma> \<sigma>', simp split: split_if_asm)
apply(case_tac \<tau>, rename_tac \<sigma> \<sigma>', simp split: if_split_asm)
apply(subst (asm) (2) UML_Set.OclExcluding_def)
apply(drule foundation5[simplified OclValid_def true_def], simp)
apply(subst (asm) Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse, simp)
@ -971,7 +971,7 @@ theorem framing':
shows "\<tau> \<Turnstile> (x @pre P \<triangleq> (x @post P))"
proof -
have def_X : "\<tau> \<Turnstile> \<delta> X"
apply(insert oid_is_typerepr, simp add: UML_Set.OclForall_def OclValid_def split: split_if_asm)
apply(insert oid_is_typerepr, simp add: UML_Set.OclForall_def OclValid_def split: if_split_asm)
by(simp add: bot_option_def true_def)
show ?thesis
apply(case_tac "\<tau> \<Turnstile> \<delta> x", drule foundation20)
@ -991,32 +991,32 @@ lemma pre_post_new: "\<tau> \<Turnstile> (x .oclIsNew()) \<Longrightarrow> \<not
by(simp add: OclIsNew_def OclSelf_at_pre_def OclSelf_at_post_def
OclValid_def StrongEq_def true_def false_def
bot_option_def invalid_def bot_fun_def valid_def
split: split_if_asm)
split: if_split_asm)
lemma pre_post_old: "\<tau> \<Turnstile> (x .oclIsDeleted()) \<Longrightarrow> \<not> (\<tau> \<Turnstile> \<upsilon>(x @pre H1)) \<and> \<not> (\<tau> \<Turnstile> \<upsilon>(x @post H2))"
by(simp add: OclIsDeleted_def OclSelf_at_pre_def OclSelf_at_post_def
OclValid_def StrongEq_def true_def false_def
bot_option_def invalid_def bot_fun_def valid_def
split: split_if_asm)
split: if_split_asm)
lemma pre_post_absent: "\<tau> \<Turnstile> (x .oclIsAbsent()) \<Longrightarrow> \<not> (\<tau> \<Turnstile> \<upsilon>(x @pre H1)) \<and> \<not> (\<tau> \<Turnstile> \<upsilon>(x @post H2))"
by(simp add: OclIsAbsent_def OclSelf_at_pre_def OclSelf_at_post_def
OclValid_def StrongEq_def true_def false_def
bot_option_def invalid_def bot_fun_def valid_def
split: split_if_asm)
split: if_split_asm)
lemma pre_post_maintained: "(\<tau> \<Turnstile> \<upsilon>(x @pre H1) \<or> \<tau> \<Turnstile> \<upsilon>(x @post H2)) \<Longrightarrow> \<tau> \<Turnstile> (x .oclIsMaintained())"
by(simp add: OclIsMaintained_def OclSelf_at_pre_def OclSelf_at_post_def
OclValid_def StrongEq_def true_def false_def
bot_option_def invalid_def bot_fun_def valid_def
split: split_if_asm)
split: if_split_asm)
lemma pre_post_maintained':
"\<tau> \<Turnstile> (x .oclIsMaintained()) \<Longrightarrow> (\<tau> \<Turnstile> \<upsilon>(x @pre (Some o H1)) \<and> \<tau> \<Turnstile> \<upsilon>(x @post (Some o H2)))"
by(simp add: OclIsMaintained_def OclSelf_at_pre_def OclSelf_at_post_def
OclValid_def StrongEq_def true_def false_def
bot_option_def invalid_def bot_fun_def valid_def
split: split_if_asm)
split: if_split_asm)
lemma framing_same_state: "(\<sigma>, \<sigma>) \<Turnstile> (x @pre H \<triangleq> (x @post H))"
by(simp add: OclSelf_at_pre_def OclSelf_at_post_def OclValid_def StrongEq_def)
@ -1110,7 +1110,7 @@ lemma select_object_any_defined\<^sub>S\<^sub>e\<^sub>q:
apply(simp add: select_object_any\<^sub>S\<^sub>e\<^sub>q_def UML_Sequence.OclANY_def select_object\<^sub>S\<^sub>e\<^sub>q_def select_object_def
defined_def OclValid_def
false_def true_def bot_fun_def bot_option_def
split: split_if_asm)
split: if_split_asm)
apply(simp add: mtSequence_def, subst (asm) Abs_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse, simp, simp)
by(simp)
@ -1121,7 +1121,7 @@ lemma (*select_object_any_defined\<^sub>S\<^sub>e\<^sub>t:*)
apply(simp add: select_object_any0\<^sub>S\<^sub>e\<^sub>t_def UML_Sequence.OclANY_def select_object\<^sub>S\<^sub>e\<^sub>t_def select_object_def
defined_def OclValid_def
false_def true_def bot_fun_def bot_option_def
split: split_if_asm)
split: if_split_asm)
by(simp)
lemma select_object_any_defined\<^sub>S\<^sub>e\<^sub>t:
@ -1132,14 +1132,14 @@ lemma select_object_any_defined\<^sub>S\<^sub>e\<^sub>t:
defined_def OclValid_def
false_def true_def bot_fun_def bot_option_def
OclInt0_def OclInt1_def StrongEq_def OclIf_def null_fun_def null_option_def
split: split_if_asm)
split: if_split_asm)
by(simp)
lemma select_object_any_exec0\<^sub>S\<^sub>e\<^sub>q:
assumes def_sel: "\<tau> \<Turnstile> \<delta> (select_object_any\<^sub>S\<^sub>e\<^sub>q f s_set)"
shows "\<tau> \<Turnstile> (select_object_any\<^sub>S\<^sub>e\<^sub>q f s_set \<triangleq> f (hd s_set))"
apply(insert def_sel[simplified foundation16],
simp add: select_object_any\<^sub>S\<^sub>e\<^sub>q_def foundation22 UML_Sequence.OclANY_def split: split_if_asm)
simp add: select_object_any\<^sub>S\<^sub>e\<^sub>q_def foundation22 UML_Sequence.OclANY_def split: if_split_asm)
apply(case_tac "\<lceil>\<lceil>Rep_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e (select_object\<^sub>S\<^sub>e\<^sub>q f s_set \<tau>)\<rceil>\<rceil>", simp add: bot_option_def, simp)
apply(simp add: select_object\<^sub>S\<^sub>e\<^sub>q_def select_object_def)
apply(subst (asm) select_fold_exec\<^sub>S\<^sub>e\<^sub>q)
@ -1166,7 +1166,7 @@ proof -
show ?thesis
when "\<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (select_object\<^sub>S\<^sub>e\<^sub>t f s_set \<tau>)\<rceil>\<rceil> = z"
apply(insert that def_sel[simplified foundation16],
simp add: select_object_any0\<^sub>S\<^sub>e\<^sub>t_def foundation22 UML_Set.OclANY_def null_fun_def split: split_if_asm)
simp add: select_object_any0\<^sub>S\<^sub>e\<^sub>t_def foundation22 UML_Set.OclANY_def null_fun_def split: if_split_asm)
apply(simp add: select_object\<^sub>S\<^sub>e\<^sub>t_def select_object_def)
apply(subst (asm) select_fold_exec\<^sub>S\<^sub>e\<^sub>t)
@ -1239,10 +1239,10 @@ proof -
apply(insert that def_sel[simplified foundation16],
simp add: select_object_any\<^sub>S\<^sub>e\<^sub>t_def foundation22
Let_def null_fun_def bot_fun_def OclIf_def
split: split_if_asm)
split: if_split_asm)
apply(simp add: StrongEq_def OclInt1_def true_def UML_Set.OclSize_def
bot_option_def UML_Set.OclANY_def null_fun_def
split: split_if_asm)
split: if_split_asm)
apply(subgoal_tac "\<exists>z'. z = {z'}")
prefer 2
apply(rule finite.cases[where a = z], simp, simp, simp)

View File

@ -600,8 +600,8 @@ fun disp_msg title msg status = title ^ ": '" ^ msg ^ "' " ^ status
fun lemma msg specification_theorem concl in_local thy =
SOME
(in_local (fn lthy =>
specification_theorem Thm.theoremK NONE (K I) (@{binding ""}, []) [] []
(Element.Shows [((@{binding ""}, []),[(concl lthy, [])])])
specification_theorem Thm.theoremK NONE (K I) Binding.empty_atts [] []
(Element.Shows [(Binding.empty_atts, [(concl lthy, [])])])
false lthy
|> Proof.global_terminal_proof
((Method.Combinator ( Method.no_combinator_info
@ -616,9 +616,9 @@ fun outer_syntax_command command_spec theory in_local =
Outer_Syntax.command command_spec "assert that the given specification is true"
(Parse.term >> (fn elems_concl => theory (fn thy =>
case
lemma "code_unfold" Specification.theorem
lemma "code_unfold" (Specification.theorem true)
(fn lthy =>
let val expr = Value.value lthy (Syntax.read_term lthy elems_concl)
let val expr = Value_Command.value lthy (Syntax.read_term lthy elems_concl)
val thy = Proof_Context.theory_of lthy
open HOLogic in
if Sign.typ_equiv thy (fastype_of expr, @{typ "prop"}) then
@ -629,7 +629,7 @@ fun outer_syntax_command command_spec theory in_local =
thy
of NONE =>
let val attr_simp = "simp" in
case lemma attr_simp Specification.theorem_cmd (K elems_concl) in_local thy of
case lemma attr_simp (Specification.theorem_cmd true) (K elems_concl) in_local thy of
NONE => raise (ERROR "Assertion failed")
| SOME thy =>
(writeln (disp_msg "OK" "simp" "finished the normalization");
@ -637,13 +637,7 @@ fun outer_syntax_command command_spec theory in_local =
end
| SOME thy => thy)))
fun in_local decl thy =
thy
|> Named_Target.init ""
|> decl
|> Local_Theory.exit_global
val () = outer_syntax_command @{command_keyword Assert} Toplevel.theory in_local
val () = outer_syntax_command @{command_keyword Assert} Toplevel.theory Named_Target.theory_map
val () = outer_syntax_command @{command_keyword Assert_local} (Toplevel.local_theory NONE NONE) I
*}
(*>*)

View File

@ -228,7 +228,7 @@ lemma Bag_inv_lemma: "\<tau> \<Turnstile> (\<delta> X) \<Longrightarrow> \<lceil
apply(insert Rep_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e [of "X \<tau>"], simp)
apply(auto simp: OclValid_def defined_def false_def true_def cp_def
bot_fun_def bot_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_fun_def
split:split_if_asm)
split:if_split_asm)
apply(erule contrapos_pp [of "Rep_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>) = bot"])
apply(subst Abs_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inject[symmetric], rule Rep_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e, simp)
apply(simp add: Rep_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse bot_Bag\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def bot_option_def)
@ -684,7 +684,7 @@ text{* OclSize *}
lemma OclSize_defined_args_valid: "\<tau> \<Turnstile> \<delta> (X->size\<^sub>B\<^sub>a\<^sub>g()) \<Longrightarrow> \<tau> \<Turnstile> \<delta> X"
by(auto simp: OclSize_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
lemma OclSize_infinite:
assumes non_finite:"\<tau> \<Turnstile> not(\<delta>(S->size\<^sub>B\<^sub>a\<^sub>g()))"
@ -692,7 +692,7 @@ shows "(\<tau> \<Turnstile> not(\<delta>(S))) \<or> \<not> finite (Rep_Bag_bas
apply(insert non_finite, simp)
apply(rule impI)
apply(simp add: OclSize_def OclValid_def defined_def bot_fun_def null_fun_def bot_option_def null_option_def
split: split_if_asm)
split: if_split_asm)
done
lemma "\<tau> \<Turnstile> \<delta> X \<Longrightarrow> \<not> finite (Rep_Bag_base X \<tau>) \<Longrightarrow> \<not> \<tau> \<Turnstile> \<delta> (X->size\<^sub>B\<^sub>a\<^sub>g())"
@ -717,7 +717,7 @@ text{* OclIsEmpty *}
lemma OclIsEmpty_defined_args_valid:"\<tau> \<Turnstile> \<delta> (X->isEmpty\<^sub>B\<^sub>a\<^sub>g()) \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> X"
apply(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def
split: split_if_asm)
split: if_split_asm)
apply(case_tac "(X->size\<^sub>B\<^sub>a\<^sub>g() \<doteq> \<zero>) \<tau>", simp add: bot_option_def, simp, rename_tac x)
apply(case_tac x, simp add: null_option_def bot_option_def, simp)
apply(simp add: OclSize_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r valid_def)
@ -727,12 +727,12 @@ by (metis (hide_lams, no_types)
lemma "\<tau> \<Turnstile> \<delta> (null->isEmpty\<^sub>B\<^sub>a\<^sub>g())"
by(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def null_is_valid
split: split_if_asm)
split: if_split_asm)
lemma OclIsEmpty_infinite: "\<tau> \<Turnstile> \<delta> X \<Longrightarrow> \<not> finite (Rep_Bag_base X \<tau>) \<Longrightarrow> \<not> \<tau> \<Turnstile> \<delta> (X->isEmpty\<^sub>B\<^sub>a\<^sub>g())"
apply(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def
split: split_if_asm)
split: if_split_asm)
apply(case_tac "(X->size\<^sub>B\<^sub>a\<^sub>g() \<doteq> \<zero>) \<tau>", simp add: bot_option_def, simp, rename_tac x)
apply(case_tac x, simp add: null_option_def bot_option_def, simp)
by(simp add: OclSize_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r valid_def bot_fun_def false_def true_def invalid_def)
@ -764,10 +764,10 @@ show "\<tau> \<Turnstile> \<delta> X \<Longrightarrow>
apply(simp add: OclNotEmpty_def OclIsEmpty_def deMorgan1 deMorgan2, drule foundation5)
apply(subst (asm) (2) OclNot_def,
simp add: OclValid_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r StrongEq_def
split: split_if_asm)
split: if_split_asm)
prefer 2
apply(simp add: invalid_def bot_option_def true_def)
apply(simp add: OclSize_def valid_def split: split_if_asm,
apply(simp add: OclSize_def valid_def split: if_split_asm,
simp_all add: false_def true_def bot_option_def bot_fun_def OclInt0_def)
apply(drule s_non_empty[of "Rep_Bag_base X \<tau>"], erule exE, case_tac x)
by blast
@ -784,7 +784,7 @@ text{* OclANY *}
lemma OclANY_defined_args_valid: "\<tau> \<Turnstile> \<delta> (X->any\<^sub>B\<^sub>a\<^sub>g()) \<Longrightarrow> \<tau> \<Turnstile> \<delta> X"
by(auto simp: OclANY_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def OclAnd_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
lemma "\<tau> \<Turnstile> \<delta> X \<Longrightarrow> \<tau> \<Turnstile> X->isEmpty\<^sub>B\<^sub>a\<^sub>g() \<Longrightarrow> \<not> \<tau> \<Turnstile> \<delta> (X->any\<^sub>B\<^sub>a\<^sub>g())"
apply(simp add: OclANY_def OclValid_def)
@ -799,13 +799,13 @@ proof -
have A: "(\<tau> \<Turnstile> \<upsilon>(X->any\<^sub>B\<^sub>a\<^sub>g())) \<Longrightarrow> ((\<tau> \<Turnstile>(\<upsilon> X)))"
by(auto simp: OclANY_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
have B: "(\<tau> \<Turnstile>(\<upsilon> X)) \<Longrightarrow> (\<tau> \<Turnstile> \<upsilon>(X->any\<^sub>B\<^sub>a\<^sub>g()))"
apply(auto simp: OclANY_def OclValid_def true_def false_def StrongEq_def
defined_def invalid_def valid_def bot_fun_def null_fun_def
bot_option_def null_option_def null_is_valid
OclAnd_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
apply(frule Bag_inv_lemma[OF foundation16[THEN iffD2], OF conjI], simp)
apply(subgoal_tac "(\<delta> X) \<tau> = true \<tau>")
prefer 2

View File

@ -57,7 +57,7 @@ lemma Sequence_inv_lemma: "\<tau> \<Turnstile> (\<delta> X) \<Longrightarrow> \<
apply(insert Rep_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e [of "X \<tau>"], simp)
apply(auto simp: OclValid_def defined_def false_def true_def cp_def
bot_fun_def bot_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_fun_def
split:split_if_asm)
split:if_split_asm)
apply(erule contrapos_pp [of "Rep_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>) = bot"])
apply(subst Abs_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inject[symmetric], rule Rep_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e, simp)
apply(simp add: Rep_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse bot_Sequence\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def bot_option_def)

View File

@ -160,7 +160,7 @@ show "?thesis"
apply_end(erule ballE[where x = y], simp_all)
apply_end(case_tac y,
simp add: bot_option_def null_option_def OclValid_def defined_def split: split_if_asm,
simp add: bot_option_def null_option_def OclValid_def defined_def split: if_split_asm,
simp add: false_def true_def)
qed (erule disjE, simp add: bot_Void_def, simp)
qed qed qed qed qed
@ -221,7 +221,7 @@ lemma Set_inv_lemma: "\<tau> \<Turnstile> (\<delta> X) \<Longrightarrow> \<foral
apply(insert Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e [of "X \<tau>"], simp)
apply(auto simp: OclValid_def defined_def false_def true_def cp_def
bot_fun_def bot_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def null_fun_def
split:split_if_asm)
split:if_split_asm)
apply(erule contrapos_pp [of "Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>) = bot"])
apply(subst Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inject[symmetric], rule Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e, simp)
apply(simp add: Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse bot_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def bot_option_def)
@ -726,7 +726,7 @@ text{* OclSize *}
lemma OclSize_defined_args_valid: "\<tau> \<Turnstile> \<delta> (X->size\<^sub>S\<^sub>e\<^sub>t()) \<Longrightarrow> \<tau> \<Turnstile> \<delta> X"
by(auto simp: OclSize_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
lemma OclSize_infinite:
assumes non_finite:"\<tau> \<Turnstile> not(\<delta>(S->size\<^sub>S\<^sub>e\<^sub>t()))"
@ -760,7 +760,7 @@ text{* OclIsEmpty *}
lemma OclIsEmpty_defined_args_valid:"\<tau> \<Turnstile> \<delta> (X->isEmpty\<^sub>S\<^sub>e\<^sub>t()) \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> X"
apply(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def
split: split_if_asm)
split: if_split_asm)
apply(case_tac "(X->size\<^sub>S\<^sub>e\<^sub>t() \<doteq> \<zero>) \<tau>", simp add: bot_option_def, simp, rename_tac x)
apply(case_tac x, simp add: null_option_def bot_option_def, simp)
apply(simp add: OclSize_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r valid_def)
@ -770,12 +770,12 @@ by (metis (hide_lams, no_types)
lemma "\<tau> \<Turnstile> \<delta> (null->isEmpty\<^sub>S\<^sub>e\<^sub>t())"
by(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def null_is_valid
split: split_if_asm)
split: if_split_asm)
lemma OclIsEmpty_infinite: "\<tau> \<Turnstile> \<delta> X \<Longrightarrow> \<not> finite \<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>)\<rceil>\<rceil> \<Longrightarrow> \<not> \<tau> \<Turnstile> \<delta> (X->isEmpty\<^sub>S\<^sub>e\<^sub>t())"
apply(auto simp: OclIsEmpty_def OclValid_def defined_def valid_def false_def true_def
bot_fun_def null_fun_def OclAnd_def OclOr_def OclNot_def
split: split_if_asm)
split: if_split_asm)
apply(case_tac "(X->size\<^sub>S\<^sub>e\<^sub>t() \<doteq> \<zero>) \<tau>", simp add: bot_option_def, simp, rename_tac x)
apply(case_tac x, simp add: null_option_def bot_option_def, simp)
by(simp add: OclSize_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r valid_def bot_fun_def false_def true_def invalid_def)
@ -801,10 +801,10 @@ lemma OclNotEmpty_has_elt : "\<tau> \<Turnstile> \<delta> X \<Longrightarrow>
apply(simp add: OclNotEmpty_def OclIsEmpty_def deMorgan1 deMorgan2, drule foundation5)
apply(subst (asm) (2) OclNot_def,
simp add: OclValid_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r StrongEq_def
split: split_if_asm)
split: if_split_asm)
prefer 2
apply(simp add: invalid_def bot_option_def true_def)
apply(simp add: OclSize_def valid_def split: split_if_asm,
apply(simp add: OclSize_def valid_def split: if_split_asm,
simp_all add: false_def true_def bot_option_def bot_fun_def OclInt0_def)
by (metis equals0I)
@ -813,7 +813,7 @@ text{* OclANY *}
lemma OclANY_defined_args_valid: "\<tau> \<Turnstile> \<delta> (X->any\<^sub>S\<^sub>e\<^sub>t()) \<Longrightarrow> \<tau> \<Turnstile> \<delta> X"
by(auto simp: OclANY_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def OclAnd_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
lemma "\<tau> \<Turnstile> \<delta> X \<Longrightarrow> \<tau> \<Turnstile> X->isEmpty\<^sub>S\<^sub>e\<^sub>t() \<Longrightarrow> \<not> \<tau> \<Turnstile> \<delta> (X->any\<^sub>S\<^sub>e\<^sub>t())"
apply(simp add: OclANY_def OclValid_def)
@ -828,13 +828,13 @@ proof -
have A: "(\<tau> \<Turnstile> \<upsilon>(X->any\<^sub>S\<^sub>e\<^sub>t())) \<Longrightarrow> ((\<tau> \<Turnstile>(\<upsilon> X)))"
by(auto simp: OclANY_def OclValid_def true_def valid_def false_def StrongEq_def
defined_def invalid_def bot_fun_def null_fun_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
have B: "(\<tau> \<Turnstile>(\<upsilon> X)) \<Longrightarrow> (\<tau> \<Turnstile> \<upsilon>(X->any\<^sub>S\<^sub>e\<^sub>t()))"
apply(auto simp: OclANY_def OclValid_def true_def false_def StrongEq_def
defined_def invalid_def valid_def bot_fun_def null_fun_def
bot_option_def null_option_def null_is_valid
OclAnd_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
apply(frule Set_inv_lemma[OF foundation16[THEN iffD2], OF conjI], simp)
apply(subgoal_tac "(\<delta> X) \<tau> = true \<tau>")
prefer 2
@ -1466,7 +1466,7 @@ proof -
apply(simp add: Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse[OF C])
apply(simp_all add: false_def true_def defined_def valid_def
null_fun_def bot_fun_def null_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def bot_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def
split: bool.split_asm HOL.split_if_asm option.split)
split: bool.split_asm HOL.if_split_asm option.split)
apply(auto simp: G1 G2)
done
qed
@ -1911,7 +1911,7 @@ proof -
apply(rule impI)
apply(drule Finite_Set.card.insert[where x = "x \<tau>"])
apply(rule includes_notin, simp, simp)
apply (metis Suc_eq_plus1 int_1 of_nat_add)
apply (metis Suc_eq_plus1 of_nat_1 of_nat_add)
apply(subst (1 2) m[of \<tau>], simp only: OclAdd\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r.cp0[symmetric],simp, simp add:invalid_def)
apply(subst OclIncluding_finite_rep_set, fast+, simp add: OclValid_def)
@ -1999,7 +1999,7 @@ lemma OclANY_singleton_exec[simp,code_unfold]:
(* *)
apply(subgoal_tac "a \<tau> = \<bottom>")
prefer 2
apply(simp add: OclValid_def valid_def bot_fun_def split: split_if_asm)
apply(simp add: OclValid_def valid_def bot_fun_def split: if_split_asm)
apply(simp)
apply(subst (1 2 3 4) cp_OclAnd,
simp add: mtSet_defined[simplified mtSet_def] valid_def bot_fun_def)
@ -2692,7 +2692,7 @@ proof -
subst (asm) cp_OclAnd, subst (asm) cp_OclNot)
apply(simp only: OclValid_def foundation20[simplified OclValid_def]
cp_OclNot[symmetric] cp_OclAnd[symmetric] cp_OclOr[symmetric])
apply(simp add: Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse split: split_if_asm)
apply(simp add: Abs_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_inverse split: if_split_asm)
by(simp add: true_def OclInt0_def OclNot_def StrictRefEq\<^sub>I\<^sub>n\<^sub>t\<^sub>e\<^sub>g\<^sub>e\<^sub>r StrongEq_def)
have B: "\<And>X \<tau>. \<not> finite \<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (X \<tau>)\<rceil>\<rceil> \<Longrightarrow> (\<delta> (X->size\<^sub>S\<^sub>e\<^sub>t())) \<tau> = false \<tau>"
@ -2802,7 +2802,7 @@ proof -
simp only: cp_OclAnd[THEN sym],
simp add: defined_def bot_fun_def)
apply(split split_if_asm)
apply(split if_split_asm)
apply(simp add: OclIncluding_finite_rep_set[simplified OclValid_def] card_including_exec)+
apply(simp only: cp_OclAnd[THEN sym], simp, rule impI, erule conjE)
apply(case_tac "(\<upsilon> x) \<tau> = true \<tau>", simp add: cp_OclAnd[of "\<delta> X" "\<upsilon> x"])
@ -2856,7 +2856,7 @@ proof -
simp only: cp_OclAnd[THEN sym],
simp add: defined_def bot_fun_def)
apply(split split_if_asm)
apply(split if_split_asm)
apply(simp add: OclExcluding_finite_rep_set[simplified OclValid_def] card_excluding_exec)+
apply(simp only: cp_OclAnd[THEN sym], simp, rule impI, erule conjE)
apply(case_tac "(\<upsilon> x) \<tau> = true \<tau>", simp add: cp_OclAnd[of "\<delta> X" "\<upsilon> x"])
@ -2892,7 +2892,7 @@ proof -
by metis
show ?thesis
apply(simp add: OclForall_def OclValid_def true_def false_def invalid_def
bot_fun_def bot_option_def null_fun_def null_option_def split: split_if_asm)
bot_fun_def bot_option_def null_fun_def null_option_def split: if_split_asm)
apply(rule conjI, rule impI) apply (metis drop.simps option.distinct(1) invalid_def)
apply(rule impI, rule conjI, rule impI) apply (metis option.distinct(1))
apply(rule impI, rule conjI, rule impI) apply (metis drop.simps)
@ -2991,7 +2991,7 @@ lemma OclForall_cong:
shows "\<tau> \<Turnstile> OclForall X Q"
proof -
have def_X: "\<tau> \<Turnstile> \<delta> X"
by(insert P, simp add: OclForall_def OclValid_def bot_option_def true_def split: split_if_asm)
by(insert P, simp add: OclForall_def OclValid_def bot_option_def true_def split: if_split_asm)
show ?thesis
apply(insert P)
apply(subst (asm) OclForall_rep_set_true[OF def_X], subst OclForall_rep_set_true[OF def_X])
@ -3005,7 +3005,7 @@ lemma OclForall_cong':
shows "\<tau> \<Turnstile> OclForall X R"
proof -
have def_X: "\<tau> \<Turnstile> \<delta> X"
by(insert P, simp add: OclForall_def OclValid_def bot_option_def true_def split: split_if_asm)
by(insert P, simp add: OclForall_def OclValid_def bot_option_def true_def split: if_split_asm)
show ?thesis
apply(insert P Q)
apply(subst (asm) (1 2) OclForall_rep_set_true[OF def_X], subst OclForall_rep_set_true[OF def_X])
@ -3025,7 +3025,7 @@ proof -
x \<tau> \<noteq> y \<tau> \<Longrightarrow>
\<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (y \<tau>)\<rceil>\<rceil> \<noteq> \<lceil>\<lceil>Rep_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e (x \<tau>)\<rceil>\<rceil>"
apply(simp add: defined_def)
apply(split split_if_asm, simp add: false_def true_def)+
apply(split if_split_asm, simp add: false_def true_def)+
apply(simp add: null_fun_def null_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def bot_fun_def bot_Set\<^sub>b\<^sub>a\<^sub>s\<^sub>e_def)
apply(case_tac "x \<tau>", rename_tac x')
@ -3103,7 +3103,7 @@ qed
lemma StrictRefEq\<^sub>S\<^sub>e\<^sub>t_L_subst1 : "cp P \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> x \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> y \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> P x \<Longrightarrow> \<tau> \<Turnstile> \<upsilon> P y \<Longrightarrow>
\<tau> \<Turnstile> (x::('\<AA>,'\<alpha>::null)Set) \<doteq> y \<Longrightarrow> \<tau> \<Turnstile> (P x ::('\<AA>,'\<alpha>::null)Set) \<doteq> P y"
apply(simp only: StrictRefEq\<^sub>S\<^sub>e\<^sub>t OclValid_def)
apply(split split_if_asm)
apply(split if_split_asm)
apply(simp add: StrongEq_L_subst1[simplified OclValid_def])
by (simp add: invalid_def bot_option_def true_def)
@ -3127,7 +3127,7 @@ lemma OclIncluding_cong : "\<And>(s::('\<AA>,'a::null)Set) t x y \<tau>. \<tau>
\<tau> \<Turnstile> s \<doteq> t \<Longrightarrow> x = y \<Longrightarrow> \<tau> \<Turnstile> s->including\<^sub>S\<^sub>e\<^sub>t(x) \<doteq> (t->including\<^sub>S\<^sub>e\<^sub>t(y))"
apply(simp only:)
apply(rule OclIncluding_cong', simp_all only:)
by(auto simp: OclValid_def OclIf_def invalid_def bot_option_def OclNot_def split : split_if_asm)
by(auto simp: OclValid_def OclIf_def invalid_def bot_option_def OclNot_def split : if_split_asm)
(* < *)
lemma const_StrictRefEq\<^sub>S\<^sub>e\<^sub>t_empty : "const X \<Longrightarrow> const (X \<doteq> Set{})"

View File

@ -93,7 +93,7 @@ formal semantics of the core of OCL, called \FOCL\footnote{An updated,
machine-checked version and formally complete version of the
complete formalization is maintained by the Isabelle Archive of
Formal Proofs (AFP), see
\url{http://afp.sourceforge.net/entries/Featherweight_OCL.shtml}}. \FOCL
\url{http://isa-afp.org/entries/Featherweight_OCL.shtml}}. \FOCL
has a formal semantics in Isabelle/\HOL~\cite{nipkow.ea:isabelle:2002}.
\endisatagannexa