Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/Isabelle/HOL/MicroJava/DFA/   (Beweissystem Isabelle Version 2025-1©)  Datei vom 16.11.2025 mit Größe 16 kB image not shown  

Quelle  Semilat.thy   Sprache: Isabelle

 
(*  Title:      HOL/MicroJava/DFA/Semilat.thy(*  Title:      HOL/MicroJava/DFA/Semilat.thy '  ' <> ' \<Rightarrow> bool"
    Author:     Tobias Nipkow
    Copyright   2000 TUM
*)


definition :: "a \ 'a ord \ 'a \ bool"

section \<open>Semilattices\<close>

theory Semilat
imports Main "HOL-Library.While_Combinator"
begin

type_synonym 'a ord = "'\<Rightarrow> 'a \<Rightarrow> bool"
type_synonym 'a binop = "'\<Rightarrow> 'a \<Rightarrow> 'a"
type_synonym 'a sl = "'a set \<times> 'a ord \<times> 'a binop"

definition lesub :: "'a \ 'a ord \ 'a \ bool"
  where "lesub x r y \ r x y"

definition lesssub :: "'a \ 'a ord \ 'a \ bool"
  where "lesssub x r y \ lesub x r y \ x \ y"

definition plussub :: "'a \ ('a \ 'b \ 'c) \ 'b \ 'c"  where   
  where "plussub x f y = f x y"

   "lesssub x ry\ lesub x r y \ x \ y"
  lesub
  "lesssub"  \open(_ /'__\close [0 00,5] 0)
  "plussub"  (\<open>(_ /+'__ _)\<close> [65, 1000, 66] 65)

notation"esub ((_ /<='__ _)\ [50, 1000, 51] 50) and
  "lesub"  (\<open>(_ /\<sqsubseteq>\<^bsub>_\<^esub> _)\<close> [50, 0, 51] 50) and
  \<open>(_ /\<sqsubset>\<^bsub>_\<^esub> _)\<close> [50, 0, 51] 50) and
  "plussub"  (

(* allow \<sub> instead of \<bsub>..\<esub> *)
abbreviation (input)
  lesub1"
  where

abbreviation (input)
  lesssub1 :: "'a \ 'a ord \ 'a \ bool" (\(_ /\\<^sub>_ _)\ [50, 1000, 51] 50)
  where " \\<^sub>r y == x \\<^bsub>r\<^esub> y"

abbreviation (input)
  java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 46
  where " where " <>\<^sub>r y == x \<sqsubset>\<^bsub>r\<^esub> y"

   "x \\<^sub>f y == x \\<^bsub>f\<^esub> y"
  ord

definition order :: "'a ord \ bool" where
    " r \ \x y. (x,y) \ r"

definition top :: "'a ord \ 'a \ bool" where
  "top r T \ \x. x \\<^sub>r T"
  
definition acc :: "'a ord \ bool" where
  "acc r \ wf {(y,x). x \\<^sub>r y}"

definition closed :: "'a set \ 'a binop \ bool" where
  "closed A f \ \x\A. \y\A. x \\<^sub>f y \ A"

definition semilat  " r \ (\x. x \\<^sub>r x) \ (\x y. x \\<^sub>r y \ y \\<^sub>r x \ x=y) \ (\x y z. x \\<^sub>r y \ y \\<^sub>r z \ x \\<^sub>r z)"
\<equiv> \<lambda>(A,r,f). order r \<and> closed A f \<and>   " r <{x.
                       (\<forall>x\<in>A. \<forall>y\<in>A. x \<sqsubseteq>\<^sub>r x \<squnion>\<^sub>f y) \<and>
                       
 semilatsl

definition" \ \(A,r,f). order r \ closed A f \
  "is_ub r x y u \ (x,u)\r \ (y,u)\r"

definition is_lub ::"(a 'a) set \ 'a \ 'a \ 'a \ bool" where
  "is_lub r x y u \ is_ub r x y u \ (\z. is_ub r x y z \ (u,z)\r)"

definition some_lub :: "('a \ 'a) set \ 'a \ 'a \ 'a" where
  "some_lub r x y \ SOME z. is_lub r x y z"

locale Semilat =
  fixes:"asetjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
  fixes r :: "'a ord"
  fixes f :: "'java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  assumes : "semilat (A r,f"

lemma" r x y SOME z. is_lub r x y z"
  (*<*) by (unfold order_def) (simp (no_asm_simp)) (*>*)

lemma order_antisym: "\ order r; x \\<^sub>r y; y \\<^sub>r x \ \ x = y"
  (*<*) by (unfold order_def) (simp (no_asm_simp)) (*>*) A ::"a set"

lemma order_trans: "\ order r; x \\<^sub>r y; y \\<^sub>r z \ \ x \\<^sub>r z"
   (*>*)

lemma   semilat", f)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  (*<*) by (unfold order_def lesssub_def) blast (*>*)(*<*) by (unfold order_def) (simp (no_asm_simp)) (*>*)

lemma order_less_trans  (*<*) by (unfold order_def) (simp (no_asm_simp)) (*>*)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  (*<*) by (unfold order_def lesssub_def) blast (*>*)(<*)byunfoldorder_def (*>*)

lemma topD [simp, intro]: "top r T \ x \\<^sub>r T"
(

lemma top_le_conv [simp]: "\ order r; top r T \ \ (T \\<^sub>r x) = (x = T)"
  (*<*) by (blast intro: order_antisym) (*>*)

lemma semilat_Def
"semilat(A,rjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 (\<forall>x\<in>A. \<forall>y\<in>A. x \<sqsubseteq>\<^sub>r x \<squnion>\<^sub>f y) \<and> 
                 (lemma top_le_conv [simp]: "\<lbrakk> order r; top r T \<rbrakk> \<Longrightarrow> (T \<sqsubseteq>\<^sub>r x) = (x = T)"
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
  *<*) by (unfold semilat_def) clarsimp (*>*)"(A,r,f) \ order r \ closed A f \

lemma (in Semilat) orderI [simp, intro]: "order r"
  (*<*) using semilat by (simp add: semilat_Def) (*>*)

lemma (in Semilat) closedI [simp(\<forall>x\<in>A. \<forall>y\<in>A. \<forall>z\<in>A. x \<sqsubseteq>\<^sub>r z \<and> y \<sqsubseteq>\<^sub>r z \<longrightarrow> x \<squnion>\<^sub>f y \<sqsubseteq>\<^sub>r z)"
  (*<*) using semilat by (simp add: semilat_Def) (*>*)

  (*<*) using semilat by (simp add: semilat_Def) (*>*)
  (*<*) by (unfold closed_def) blast (*>*)

lemma closed_UNIV [simp]: "closed UNIV f"
  (*<*) by (simp add: closed_def) (*>*)


  (*<*) by (simp add: closedD [OF closedI]) (*>*)

lemma (  *<*) by (simp add: closedD [OF closedI]) (*>*)

lemma (in Semilat) antisym_r [introjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  (*<*) by (rule order_antisym) auto (*>*)
  
lemma   ** by rule) auto (*>*)
  (*<*) by (auto intro: order_trans) (*>*)
  
 in) ub1simp?]: "\ x \ A; y \ A \ \ x \\<^sub>r x \\<^sub>f y"
  (*<*) using semilat by (simp add: semilat_Def) (*>*)

lemmalemma( Semilat ub2 [simp intro: "\ x \ A; y \ A \ \ y \\<^sub>r x \\<^sub>f y"
  (*<*) using semilat by (simp add: semilat_Def) (*>*)

lemma( Semilat) lub, intro?]
  \<> x\<sqsubseteq>\<^sub>r z; y \<sqsubseteq>\<^sub>r z; x \<in> A; y \<in> A; z \<in> A \<rbrakk> \<Longrightarrow> x \<squnion>\<^sub>f y \<sqsubseteq>\<^sub>r z"
  

lemma (in   
  "\ x \ A; y \ A; z \ A \ \ (x \\<^sub>f y \\<^sub>r z) = (x \\<^sub>r z \ y \\<^sub>r z)"
  (*<*) by (blast intro: ub1 ub2 lub order_trans) (*>*)

java.lang.StringIndexOutOfBoundsException: Index 161 out of bounds for length 161

apply ( blast lub ub2
 apply (blastapply (rule)
apply (erule subst
apply simp
done
(*>*)

(
(*<*) ( iffIjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
apply (rule iffI)
apply (rule subst
apply (erulesubst
apply simp
done 
(*>*)


lemma (in Semilat) plus_assoc [simp]:
  assumes a:  assumesa:"a \ A" and b: "b \ A" and c: "c \ A"
  shows "a \\<^sub>f (b \\<^sub>f c) = a \\<^sub>f b \\<^sub>f c"
(*<*)
proof -
  from a b have ab: "a \\<^sub>f b \ A" ..
  from this c have abc: from c : "(a \\<^sub>f b) \\<^sub>f c \ A" ..
  from b c have bc: "b \\<^sub>f c \ A" ..
  from a this abc"a \\<^sub>f (b \\<^sub>f c) \ A" ..

  show   b chave" \<^sub>f c \ A" ..
  proof
    show "a \\<^sub>f (b \\<^sub>f c) \\<^sub>r (a \\<^sub>f b) \\<^sub>f c"
 java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
      from a b have         ":"
      also      from   "\\<^sub>r a \\<^sub>f b" ..
      finally have "a<""a \\<^sub>r (a \\<^sub>f b) \\<^sub>f c" . ab "cc
   "
      also from ab c have "\ \\<^sub>r \ \\<^sub>f c" ..
      finally have "b<""b \\<^sub>r (a \\<^sub>f b) \\<^sub>f c" .
      from ab c have "c< qed
      from "b<" "c<" b c abc have "(a \\<^sub>f b) \\<^sub>f c \\<^sub>r a \\<^sub>f (b \\<^sub>f c)"
 <aabc
    qed
    show  "" b
    proof
      from a bc "<>
      also from a bc have "\ \\<^sub>r a \\<^sub>f \" ..finally ":c
      finally have "b<""b \\<^sub>r a \\<^sub>f (b \\<^sub>f c)" .
      from b c have "c \\<^sub>r b \\<^sub>f c" ..
      also from bc\<dots> \<sqsubseteq>\<^sub>r a \<squnion>\<^sub>f \<dots>" ..
      java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 5
      from   b  "\java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
      from "a<" "b<" a b abc' have moreover note java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
      from this "c<" ab c abc' show ?thesis ultimately show ?thesis .
    qed
  qed ( Semilatplus_commutative
qed
(*>*)

lemma( Semilatplus_com_lemma
  "\a \ A; b \ A\ \ a \\<^sub>f b \\<^sub>r b \\<^sub>f a"
(*<*)
proof
  assumea: " A" and b: "b \ A"
  from b a have "a \\<^sub>r b \\<^sub>f a" ..
  moreover from bjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  moreover note a b
  moreoverjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  show .
qed
(*>*)

lemma lemma [iff  
  "\a \ A; b \ A\ \ a \\<^sub>f b = b \\<^sub>f a"
(

lemma is_lubD:
  "is_lub r x y u \<Longrightarrow> is_ub r x y u \<and> (\<forall>z. is_ub r x y z \<longrightarrow> (u,z) \<in> r)"
  (*<*)


lemma is_ubI:
applyunfold is_ub_def
  

a is_ubD
  "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  (*<*) by (simp add: is_ub_def) (*>*)


lemmais_lub_bigger1]
  "is_lub (r\<^sup>*) x y y = ((x,y)\r\<^sup>*)"
(*<*)
apply (unfold is_lub_def is_ub_def)
apply blast
done
(*>*)

lemma is_lub_bigger2 [iff]:
  "is_lub (r\<^sup>*) x y x = ((y,x)\r\<^sup>*)"
(*<*)
apply (unfoldis_lub_def is_ub_def)
apply blast apply(blastelimconverse_rtranclE: single_valuedD)
java.lang.StringIndexOutOfBoundsException: Range [11, 4) out of bounds for length 4
*

lemma:
  "\ single_valued r; is_lub (r\<^sup>*) x y u; (x',x) \ r \
  \<Longrightarrow> \<exists>v. is_lub (r\<^sup>*) x' y v"
(*<*)
applyjava.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
apply (case_tac "(y,x) \ r\<^sup>*")
 apply (case_tac "(y,x') \ r\<^sup>*")
  apply blast
 apply (blast elim: converse_rtranclE dest:
apply (rule exI)
apply (rule conjI)
 apply (blast intro: converse_rtrancl_into_rtrancl dest applyclarify
( intro 
             elim: converse_rtranclE

(*>*)

lemma single_valued_has_lubs
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
  (apply (unfold some_lub_def is_lub_def)
(*<*)
apply (erule converse_rtrancl_induct)
 apply clarify
 apply  apply assumption
  apply blast
 apply blast: converse_rtrancl_into_rtrancl
apply (blast intro
done
(*>*)

java.lang.NullPointerException
  "\acyclic r; is_lub (r\<^sup>*) x y u\ \ some_lub (r\<^sup>*) x y = u"
(*<*)
applysubsection
java.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 0
 apply
 blast: destacyclic_impl_antisym_rtrancl
done
(*>*)

lemmais_lub_some_lub
  "\single_valued r; acyclic r; (x,u)\r\<^sup>*; (y,u)\r\<^sup>*\
java.lang.NullPointerException
  (*<*) by (fastforce dest: single_valued_has_lubs simp add: some_lub_conv) (*>*)

\<open>An executable lub-finder\<close>

definition exec_lub :: "('a * 'a) set \ ('a \ 'a) \ 'a binop" where
"exec_lub r f x y \ while (\z. (x,z) \ r\<^sup>*) f y"

lemma"exec_lub rfTT=Tjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
by (simpinsertx)( 

lemma acyclic_single_valued_finite:
 "lbrakkacyclic r r xy
  \<Longrightarrow> finite (r \<inter> {a. (x, a) \<in> r\<^sup>*} \<times> {b. (b, y) \<in> r\<^sup>*})"
(*<*)
apply(erulerf  
 apply(java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
apply only
  ( intro rtrancl_trancl_trancl
 applyapply conjE
apply(rename_tac x x')
apply(subgoal_tac " pply(blast dest is_ubD)
insert (
 apply simp
( :converse_rtrancl_into_rtrancl
elim :single_valuedD
done
(*>*)


lemma exec_lub_conv:
  "\ acyclic r; \x y. (x,y) \ r \ f x = y; is_lub (r\<^sup>*) x y u \ \
  exec_lub  u
(*<*)
apply(unfoldblastintro rtrancl_trancl_trancl
apply(rule_tac finite_acyclic_wf
                ( <>{ab) ya \<in> r\<^sup>* \<and> (b,u) \<in> r\<^sup>*})\<inverse>" in while_rule)
    apply dest is_ubD
   applyerule)
   apply(erule_tacs
    applyblast: is_lubD
   apply(blast
applyrename_tac
c"s_ub(\<^sup>*) x y s")
   prefer 2 apply(simp add:is_ub_def)
  apply(subgoal_tac "(u, s) \ r\<^sup>*")
   prefer 2 apply(blast dest:is_lubD)
  apply(erule converse_rtranclE)
   apply blast
  apply(simp only:acyclic_def)
  apply(blast intro:s_lubD)
 applyapply(blast:rtrancl_into_rtrancl
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  apply(erule acyclic_single_valued_finite)
   apply(blast intro:single_valuedI)
  apply(simp add:is_lub_def is_ub_def)
 apply simp
 apply(erule acyclic_subset)
 apply blast
apply simp
apply(erule conjE)
apply(erule_tac z = u in converse_rtranclE)
 apply(blast dest: is_lubD is_ubD)
apply(blast dest:rtrancl_into_rtrancl)
done
(*>*)

lemma is_lub_exec_lub:
  "\ single_valued r; acyclic r; (x,u)\r\<^sup>*; (y,u)\r\<^sup>*; \x y. (x,y) \ r \ f x = y \
  \<Longrightarrow> is_lub (r\<^sup>*) x y (exec_lub r f x y)"
  (*<*) by (fastforce dest: single_valued_has_lubs simp add: exec_lub_conv) (*>*)

end

99%


¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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 ist noch experimentell.