Theory Weaken_Transition
theory Weaken_Transition
imports Weakening
begin
context weak
begin
definition weakenTransition :: "'b ⇒ ('a, 'b, 'c) psi ⇒ 'a action ⇒ ('a, 'b, 'c) psi ⇒ bool" ("_ ⊳ _ ⟹_ ≺ _" [80, 80, 80, 80] 80)
where
"Ψ ⊳ P ⟹α ≺ P' ≡ (∃P''' P''. Ψ ⊳ P ⟹⇧^⇩τ P''' ∧ Ψ ⊳ P''' ⟼α ≺ P'' ∧ Ψ ⊳ P'' ⟹⇧^⇩τ P') ∨ (P = P' ∧ α = τ)"
lemma weakenTransitionCases[consumes 1, case_names cBase cStep]:
assumes "Ψ ⊳ P ⟹α ≺ P'"
and "Prop (τ) P"
and "⋀P''' P''. ⟦Ψ ⊳ P ⟹⇧^⇩τ P'''; Ψ ⊳ P''' ⟼α ≺ P''; Ψ ⊳ P'' ⟹⇧^⇩τ P'⟧ ⟹ Prop α P'"
shows "Prop α P'"
using assms
by(auto simp add: weakenTransition_def)
lemma statImpTauChainDerivative:
fixes Ψ :: 'b
and P :: "('a, 'b, 'c) psi"
and P' :: "('a, 'b, 'c) psi"
assumes "Ψ ⊳ P ⟹⇧^⇩τ P'"
shows "insertAssertion (extractFrame P) Ψ ↪⇩F insertAssertion (extractFrame P') Ψ"
using assms
by(induct rule: tauChainInduct) (auto intro: statImpTauDerivative dest: FrameStatImpTrans)
lemma weakenTauChain:
fixes Ψ :: 'b
and P :: "('a, 'b, 'c) psi"
and P' :: "('a, 'b, 'c) psi"
and Ψ' :: 'b
assumes "Ψ ⊳ P ⟹⇧^⇩τ P'"
shows "Ψ ⊗ Ψ' ⊳ P ⟹⇧^⇩τ P'"
using assms
proof(induct rule: tauChainInduct)
case(TauBase P)
thus ?case by simp
next
case(TauStep P P' P'')
note ‹Ψ ⊗ Ψ' ⊳ P ⟹⇧^⇩τ P'›
moreover from ‹Ψ ⊳ P' ⟼τ ≺ P''› have "Ψ ⊗ Ψ' ⊳ P' ⟼τ ≺ P''" by(rule weakenTransition)
ultimately show ?case by(auto dest: tauActTauChain)
qed
end
end