module Order.Frame.Reasoning {o β} {P : Poset o β} (frm : is-frame P) where
open Order.Reasoning P public open is-frame frm hiding (meets ; joins) public
Reasoning about framesπ
This module exposes a large collection of reasoning combinators for working with frames, along with re-exporting tools for working with the underlying lattice.
meets : Meet-semilattice o β meets = P , has-meet-slat joins : Join-semilattice o β joins = P , has-join-slat lattice : Lattice o β lattice = P , has-lattice open Order.Lattice.Reasoning has-lattice using ( β©-idl; β©-idr; module β© ; βͺ-idl; βͺ-idr; module βͺ ; β©-absorbl; β©-absorbr; βͺ-absorbl; βͺ-absorbr ) public
This module also has further lemmas about the interplay between meets and arbitrary joins. The following result holds in any cocomplete lattice:
β-product : β {I J : Type o} (F : I β β P β) (G : J β β P β) β β (Ξ» i β β Ξ» j β G i β© F j) β‘ β {I = I Γ J} (Ξ» p β F (p .fst) β© G (p .snd)) β-product {I} {J} F G = β€-antisym (β-universal _ Ξ» j β β-universal _ Ξ» i β G j β© F i =β¨ β©-comm β©= F i β© G j β€β¨ β-inj (i , j) β©β€ β {I = I Γ J} (Ξ» v β F (v .fst) β© G (v .snd)) β€β) (β-universal _ Ξ» where (i , j) β F i β© G j β€β¨ β-inj i β©β€ β (Ξ» i β F i β© G j) β€β¨ β-inj j β©β€ β (Ξ» i β β Ξ» j β F j β© G i) =β¨ ap β (funext Ξ» i β ap β $ funext Ξ» j β β©-comm) β©= β (Ξ» i β β Ξ» j β G i β© F j) β€β)
But this result relies on the cocontinuity of meets.
β-β©-product : β {I J : Type o} (F : I β β P β) (G : J β β P β) β β F β© β G β‘ β {I = I Γ J} (Ξ» i β F (i .fst) β© G (i .snd)) β-β©-product F G = β F β© β G β‘β¨ β-distribl (β F) G β©β‘ β (Ξ» i β β F β© G i) β‘β¨ ap β (funext Ξ» i β β©-comm β β-distribl (G i) F) β©β‘ β (Ξ» i β β Ξ» j β G i β© F j) β‘β¨ β-product F G β©β‘ β (Ξ» i β F (i .fst) β© G (i .snd)) β
β-distribr : β {I} (f : I β Ob) x β β f β© x β‘ β Ξ» i β f i β© x β-distribr f x = β©-comm Β·Β· β-distribl x f Β·Β· ap β (funext Ξ» _ β β©-comm)
Meets distribute over binary joins, so every frame is a distributive lattice.
opaque unfolding Lubs._βͺ_ β©-distribl : β {x y z} β x β© (y βͺ z) β‘ (x β© y) βͺ (x β© z) β©-distribl = β-distribl _ _ β ap β (funext (Ξ» { (lift true) β refl ; (lift false) β refl })) open Distributive.from-β© has-lattice β©-distribl public