src/HOL/Lattice/Lattice.thy
changeset 25469 f81b3be9dfdd
parent 23393 31781b2de73d
child 35317 d57da4abb47d
equal deleted inserted replaced
25468:d2c618390928 25469:f81b3be9dfdd
   580     by (simp only: dual_join)
   580     by (simp only: dual_join)
   581   then show ?thesis ..
   581   then show ?thesis ..
   582 qed
   582 qed
   583 
   583 
   584 text {*
   584 text {*
   585   \medskip A semi-morphisms is a function $f$ that preserves the
   585   \medskip A semi-morphisms is a function @{text f} that preserves the
   586   lattice operations in the following manner: @{term "f (x \<sqinter> y) \<sqsubseteq> f x
   586   lattice operations in the following manner: @{term "f (x \<sqinter> y) \<sqsubseteq> f x
   587   \<sqinter> f y"} and @{term "f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)"}, respectively.  Any of
   587   \<sqinter> f y"} and @{term "f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)"}, respectively.  Any of
   588   these properties is equivalent with monotonicity.
   588   these properties is equivalent with monotonicity.
   589 *}  (* FIXME dual version !? *)
   589 *}
   590 
   590 
   591 theorem meet_semimorph:
   591 theorem meet_semimorph:
   592   "(\<And>x y. f (x \<sqinter> y) \<sqsubseteq> f x \<sqinter> f y) \<equiv> (\<And>x y. x \<sqsubseteq> y \<Longrightarrow> f x \<sqsubseteq> f y)"
   592   "(\<And>x y. f (x \<sqinter> y) \<sqsubseteq> f x \<sqinter> f y) \<equiv> (\<And>x y. x \<sqsubseteq> y \<Longrightarrow> f x \<sqsubseteq> f y)"
   593 proof
   593 proof
   594   assume morph: "\<And>x y. f (x \<sqinter> y) \<sqsubseteq> f x \<sqinter> f y"
   594   assume morph: "\<And>x y. f (x \<sqinter> y) \<sqsubseteq> f x \<sqinter> f y"
   595   fix x y :: "'a::lattice"
   595   fix x y :: "'a::lattice"
   596   assume "x \<sqsubseteq> y" then have "x \<sqinter> y = x" ..
   596   assume "x \<sqsubseteq> y"
       
   597   then have "x \<sqinter> y = x" ..
   597   then have "x = x \<sqinter> y" ..
   598   then have "x = x \<sqinter> y" ..
   598   also have "f \<dots> \<sqsubseteq> f x \<sqinter> f y" by (rule morph)
   599   also have "f \<dots> \<sqsubseteq> f x \<sqinter> f y" by (rule morph)
   599   also have "\<dots> \<sqsubseteq> f y" ..
   600   also have "\<dots> \<sqsubseteq> f y" ..
   600   finally show "f x \<sqsubseteq> f y" .
   601   finally show "f x \<sqsubseteq> f y" .
   601 next
   602 next
   609       have "x \<sqinter> y \<sqsubseteq> y" .. then show "f (x \<sqinter> y) \<sqsubseteq> f y" by (rule mono)
   610       have "x \<sqinter> y \<sqsubseteq> y" .. then show "f (x \<sqinter> y) \<sqsubseteq> f y" by (rule mono)
   610     qed
   611     qed
   611   qed
   612   qed
   612 qed
   613 qed
   613 
   614 
       
   615 lemma join_semimorph:
       
   616   "(\<And>x y. f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)) \<equiv> (\<And>x y. x \<sqsubseteq> y \<Longrightarrow> f x \<sqsubseteq> f y)"
       
   617 proof
       
   618   assume morph: "\<And>x y. f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)"
       
   619   fix x y :: "'a::lattice"
       
   620   assume "x \<sqsubseteq> y" then have "x \<squnion> y = y" ..
       
   621   have "f x \<sqsubseteq> f x \<squnion> f y" ..
       
   622   also have "\<dots> \<sqsubseteq> f (x \<squnion> y)" by (rule morph)
       
   623   also from `x \<sqsubseteq> y` have "x \<squnion> y = y" ..
       
   624   finally show "f x \<sqsubseteq> f y" .
       
   625 next
       
   626   assume mono: "\<And>x y. x \<sqsubseteq> y \<Longrightarrow> f x \<sqsubseteq> f y"
       
   627   show "\<And>x y. f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)"
       
   628   proof -
       
   629     fix x y
       
   630     show "f x \<squnion> f y \<sqsubseteq> f (x \<squnion> y)"
       
   631     proof
       
   632       have "x \<sqsubseteq> x \<squnion> y" .. then show "f x \<sqsubseteq> f (x \<squnion> y)" by (rule mono)
       
   633       have "y \<sqsubseteq> x \<squnion> y" .. then show "f y \<sqsubseteq> f (x \<squnion> y)" by (rule mono)
       
   634     qed
       
   635   qed
       
   636 qed
       
   637 
   614 end
   638 end