(* Title: A Definitional Encoding of TLA in Isabelle/HOL Authors:GudmundGrov<ggrovatinf.ed.ac.uk> StephanMerz<Stephan.Merzatloria.fr> Year:2011 Maintainer:GudmundGrov<ggrovatinf.ed.ac.uk>
*)
section"Reasoning about PreFormulas"
theory PreFormulas imports Semantics begin
text‹
Semantic separation of formulas and pre-formulas requires a deep embedding.
We introduce a syntactically distinct notion of validity, written ‹|~ A›,
for pre-formulas. Although it is semantically identical to ‹⊨ A›, it
helps users distinguish pre-formulas from formulas in \tlastar{} proofs. ›
definition PreValid :: "('w::world) form ==> bool" where"PreValid A ≡∀ w. w ⊨ A"
syntax "_PreValid" :: "lift ==> bool" (‹(|~ _)›5)
translations "_PreValid"⇌"CONST PreValid"
lemma prefD[dest]: "|~ A ==> w ⊨ A" by (simp add: PreValid_def)
lemma prefI[intro!]: "(∧ w. w ⊨ A) ==> |~ A" by (simp add: PreValid_def)
lemma prefeq_reflection: assumes P1: "|~ x=y"shows"(x ≡ y)" using P1 by (intro eq_reflection) force
lemma pref_True[simp]: "|~ #True" by auto
lemma pref_eq: "|~ X = Y ==> X = Y" by (auto simp: prefeq_reflection)
lemma pref_iffI: assumes"|~ F ⟶ G"and"|~ G ⟶ F" shows"|~ F = G" using assms by force
lemma pref_iffD1: assumes"|~ F = G"shows"|~ F ⟶ G" using assms by auto
lemma pref_iffD2: assumes"|~ F = G"shows"|~ G ⟶ F" using assms by auto
lemma unl_pref_imp: assumes"|~ F ⟶ G"shows"∧ w. w ⊨ F ==> w ⊨ G" using assms by auto
lemma pref_imp_trans: assumes"|~ F ⟶ G"and"|~ G ⟶ H" shows"|~ F ⟶ H" using assms by force
subsection"Lemmas about ‹Unchanged›"
text ‹ Many of the \tlastar{} axioms only require a state function witness which leaves the state space unchanged. An obvious witness is the @{term id} function. The lemmas require that the given formula is invariant under stuttering. \<close>
lemma pre_id_unch: assumes h: " F"
shows "|~ F ∧ Unchanged id ⟶◯F"
(pref_unlift, clarify)
fix s
assume a1: "s ⊨ F" and a2: "s ⊨ Unchanged id"
from a2 have "(id (second s) = id (first s))" by (simp add: unch_defs)
hence "s ≈ (tail s)" by (simp add: addfirststut)
with h a1 have "(tail s) ⊨ F" by (simp add: stutinv_def)
thus "s ⊨◯F" by (unfold nexts_def)
pre_ex_unch:
assumes h: "stutinv F"
shows "∃(v::'a::world ==> 'a). ( |~ F ∧ Unchanged v ⟶◯F)"
pre_id_unch[OF h] by blast
unch_pair: "|~ Unchanged (x,y) = (Unchanged x ∧ Unchanged y)"
by (auto simp: unch_def before_def after_def nexts_def)
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.