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 |