tuned proofs;
authorwenzelm
Sun, 05 Jan 2025 22:28:05 +0100
changeset 81734 78d95ff11ade
parent 81733 94f018b2a4fb
child 81735 527daf6823fb
tuned proofs;
src/HOL/HOLCF/IOA/TL.thy
--- a/src/HOL/HOLCF/IOA/TL.thy	Sun Jan 05 21:17:36 2025 +0100
+++ b/src/HOL/HOLCF/IOA/TL.thy	Sun Jan 05 22:28:05 2025 +0100
@@ -57,34 +57,53 @@
 subsection \<open>TLA Axiomatization by Merz\<close>
 
 lemma suffix_refl: "suffix s s"
-  apply (simp add: suffix_def)
-  apply (rule_tac x = "nil" in exI)
-  apply auto
-  done
+proof -
+  have "Finite nil \<and> s = nil @@ s" by simp
+  then show ?thesis unfolding suffix_def ..
+qed
+
+lemma suffix_trans:
+  assumes "suffix y x"
+    and "suffix z y"
+  shows "suffix z x"
+proof -
+  from assms obtain s1 s2
+    where "Finite s1 \<and> x = s1 @@ y"
+      and "Finite s2 \<and> y = s2 @@ z"
+    unfolding suffix_def by iprover
+  then have "Finite (s1 @@ s2) \<and> x = (s1 @@ s2) @@ z"
+    by (simp add: Conc_assoc)
+  then show ?thesis unfolding suffix_def ..
+qed
 
 lemma reflT: "s \<noteq> UU \<and> s \<noteq> nil \<longrightarrow> (s \<Turnstile> \<box>F \<^bold>\<longrightarrow> F)"
-  apply (simp add: satisfies_def IMPLIES_def Box_def)
-  apply (rule impI)+
-  apply (erule_tac x = "s" in allE)
-  apply (simp add: tsuffix_def suffix_refl)
-  done
-
-lemma suffix_trans: "suffix y x \<Longrightarrow> suffix z y \<Longrightarrow> suffix z x"
-  apply (simp add: suffix_def)
-  apply auto
-  apply (rule_tac x = "s1 @@ s1a" in exI)
-  apply auto
-  apply (simp add: Conc_assoc)
-  done
+proof
+  assume s: "s \<noteq> UU \<and> s \<noteq> nil"
+  have "F s" if box_F: "\<forall>s2. tsuffix s2 s \<longrightarrow> F s2"
+  proof -
+    from s and suffix_refl [of s] have "tsuffix s s"
+      by (simp add: tsuffix_def)
+    also from box_F have "?this \<longrightarrow> F s" ..
+    finally show ?thesis .
+  qed
+  then show "s \<Turnstile> \<box>F \<^bold>\<longrightarrow> F"
+    by (simp add: satisfies_def IMPLIES_def Box_def)
+qed
 
 lemma transT: "s \<Turnstile> \<box>F \<^bold>\<longrightarrow> \<box>\<box>F"
-  apply (simp add: satisfies_def IMPLIES_def Box_def tsuffix_def)
-  apply auto
-  apply (drule suffix_trans)
-  apply assumption
-  apply (erule_tac x = "s2a" in allE)
-  apply auto
-  done
+proof -
+  have "F s2" if *: "tsuffix s1 s" "tsuffix s2 s1"
+    and **: "\<forall>s'. tsuffix s' s \<longrightarrow> F s'"
+    for s1 s2
+  proof -
+    from * have "tsuffix s2 s"
+      by (auto simp: tsuffix_def elim: suffix_trans)
+    also from ** have "?this \<longrightarrow> F s2" ..
+    finally show ?thesis .
+  qed
+  then show ?thesis
+    by (simp add: satisfies_def IMPLIES_def Box_def)
+qed
 
 lemma normalT: "s \<Turnstile> \<box>(F \<^bold>\<longrightarrow> G) \<^bold>\<longrightarrow> \<box>F \<^bold>\<longrightarrow> \<box>G"
   by (simp add: satisfies_def IMPLIES_def Box_def)
@@ -98,10 +117,11 @@
 lemma STL1b: "\<TTurnstile> P \<Longrightarrow> \<^bold>\<TTurnstile> (Init P)"
   by (simp add: valid_def validT_def satisfies_def Init_def)
 
-lemma STL1: "\<TTurnstile> P \<Longrightarrow> \<^bold>\<TTurnstile> (\<box>(Init P))"
-  apply (rule STL1a)
-  apply (erule STL1b)
-  done
+lemma STL1: assumes "\<TTurnstile> P" shows "\<^bold>\<TTurnstile> (\<box>(Init P))"
+proof -
+  from assms have "\<^bold>\<TTurnstile> (Init P)" by (rule STL1b)
+  then show ?thesis by (rule STL1a)
+qed
 
 (*Note that unlift and HD is not at all used!*)
 lemma STL4: "\<TTurnstile> (P \<^bold>\<longrightarrow> Q) \<Longrightarrow> \<^bold>\<TTurnstile> (\<box>(Init P) \<^bold>\<longrightarrow> \<box>(Init Q))"