| 
 | 1 | +------------------------------------------------------------------------  | 
 | 2 | +-- The Agda standard library  | 
 | 3 | +--  | 
 | 4 | +-- Symmetric interior of a binary relation  | 
 | 5 | +------------------------------------------------------------------------  | 
 | 6 | + | 
 | 7 | +{-# OPTIONS --cubical-compatible --safe #-}  | 
 | 8 | + | 
 | 9 | +module Relation.Binary.Construct.Interior.Symmetric where  | 
 | 10 | + | 
 | 11 | +open import Function.Base using (flip)  | 
 | 12 | +open import Level  | 
 | 13 | +open import Relation.Binary  | 
 | 14 | + | 
 | 15 | +private  | 
 | 16 | +  variable  | 
 | 17 | +    a b c ℓ r s t : Level  | 
 | 18 | +    A : Set a  | 
 | 19 | +    R S T : Rel A r  | 
 | 20 | + | 
 | 21 | +------------------------------------------------------------------------  | 
 | 22 | +-- Definition  | 
 | 23 | + | 
 | 24 | +record SymInterior (R : Rel A ℓ) (x y : A) : Set ℓ where  | 
 | 25 | +  constructor _,_  | 
 | 26 | +  field  | 
 | 27 | +    lhs≤rhs : R x y  | 
 | 28 | +    rhs≤lhs : R y x  | 
 | 29 | + | 
 | 30 | +open SymInterior public  | 
 | 31 | + | 
 | 32 | +------------------------------------------------------------------------  | 
 | 33 | +-- Properties  | 
 | 34 | + | 
 | 35 | +-- The symmetric interior is symmetric.  | 
 | 36 | +symmetric : Symmetric (SymInterior R)  | 
 | 37 | +symmetric (r , r′) = r′ , r  | 
 | 38 | + | 
 | 39 | +-- The symmetric interior of R is greater than (or equal to) any other symmetric  | 
 | 40 | +-- relation contained by R.  | 
 | 41 | +unfold : Symmetric S → S ⇒ R → S ⇒ SymInterior R  | 
 | 42 | +unfold sym f s = f s , f (sym s)  | 
 | 43 | + | 
 | 44 | +-- SymInterior preserves various properties.  | 
 | 45 | +reflexive : Reflexive R → Reflexive (SymInterior R)  | 
 | 46 | +reflexive refl = refl , refl  | 
 | 47 | + | 
 | 48 | +trans : Trans R S T → Trans S R T →  | 
 | 49 | +  Trans (SymInterior R) (SymInterior S) (SymInterior T)  | 
 | 50 | +trans trans-rs trans-sr (r , r′) (s , s′) = trans-rs r s , trans-sr s′ r′  | 
 | 51 | + | 
 | 52 | +transitive : Transitive R → Transitive (SymInterior R)  | 
 | 53 | +transitive tr = trans tr tr  | 
 | 54 | + | 
 | 55 | +-- The symmetric interior of a strict relation is empty.  | 
 | 56 | +asymmetric⇒empty : Asymmetric R → Empty (SymInterior R)  | 
 | 57 | +asymmetric⇒empty asym (r , r′) = asym r r′  | 
 | 58 | + | 
 | 59 | +-- A reflexive transitive relation _≤_ gives rise to a poset in which the  | 
 | 60 | +-- equivalence relation is SymInterior _≤_.  | 
 | 61 | + | 
 | 62 | +isEquivalence : Reflexive R → Transitive R → IsEquivalence (SymInterior R)  | 
 | 63 | +isEquivalence refl trans = record  | 
 | 64 | +  { refl = reflexive refl  | 
 | 65 | +  ; sym = symmetric  | 
 | 66 | +  ; trans = transitive trans  | 
 | 67 | +  }  | 
 | 68 | + | 
 | 69 | +isPartialOrder : Reflexive R → Transitive R → IsPartialOrder (SymInterior R) R  | 
 | 70 | +isPartialOrder refl trans = record  | 
 | 71 | +  { isPreorder = record  | 
 | 72 | +    { isEquivalence = isEquivalence refl trans  | 
 | 73 | +    ; reflexive = lhs≤rhs  | 
 | 74 | +    ; trans = trans  | 
 | 75 | +    }  | 
 | 76 | +  ; antisym = _,_  | 
 | 77 | +  }  | 
 | 78 | + | 
 | 79 | +poset : ∀ {a} {A : Set a} {R : Rel A ℓ} → Reflexive R → Transitive R → Poset a ℓ ℓ  | 
 | 80 | +poset {R = R} refl trans = record  | 
 | 81 | +  { _≤_ = R  | 
 | 82 | +  ; isPartialOrder = isPartialOrder refl trans  | 
 | 83 | +  }  | 
0 commit comments