# HG changeset patch # User kleing # Date 1017173433 -3600 # Node ID 3ccbd3a97bcb6993a6cbd1865e1da19d3ee7c0a9 # Parent 472b1c91b09f0227403be4943dd5054debbefd8b lub property of ++_f diff -r 472b1c91b09f -r 3ccbd3a97bcb src/HOL/MicroJava/BV/SemilatAlg.thy --- a/src/HOL/MicroJava/BV/SemilatAlg.thy Tue Mar 26 21:10:16 2002 +0100 +++ b/src/HOL/MicroJava/BV/SemilatAlg.thy Tue Mar 26 21:10:33 2002 +0100 @@ -142,6 +142,29 @@ qed +lemma lub: + assumes sl: "semilat (A, r, f)" and "z \ A" + shows + "\y. y \ A \ set xs \ A \ \x \ set xs. x <=_r z \ y <=_r z \ xs ++_f y <=_r z" +proof (induct xs) + fix y assume "y <=_r z" thus "[] ++_f y <=_r z" by simp +next + fix y l ls assume y: "y \ A" and "set (l#ls) \ A" + then obtain l: "l \ A" and ls: "set ls \ A" by auto + assume "\x \ set (l#ls). x <=_r z" + then obtain "l <=_r z" and lsz: "\x \ set ls. x <=_r z" by auto + assume "y <=_r z" have "l +_f y <=_r z" by (rule semilat_lub) + moreover + from sl l y have "l +_f y \ A" by (fast intro: closedD) + moreover + assume "\y. y \ A \ set ls \ A \ \x \ set ls. x <=_r z \ y <=_r z + \ ls ++_f y <=_r z" + ultimately + have "ls ++_f (l +_f y) <=_r z" using ls lsz by - assumption + thus "(l#ls) ++_f y <=_r z" by simp +qed + + lemma ub1': "\semilat (A, r, f); \(p,s) \ set S. s \ A; y \ A; (a,b) \ set S\ \ b <=_r map snd [(p', t')\S. p' = a] ++_f y"