{-# OPTIONS --postfix-projections --safe --without-K #-} open import Level using (suc; _⊔_) open import Data.Bool.Base using (Bool; true; false; T; not) open import Relation.Nullary using (Dec; yes; no) open import Relation.Binary open import Relation.Binary.PropositionalEquality.Core using (_≡_; _≢_; refl) open import Relation.Nullary.Negation.Core using (¬_; contradiction) module NEL.Structure {a} (Atom : Set a) where infix 20 `+_ infix 20 `-_ infix 16 `!_ `?_ infix 15 `¬_ infix 10 _`◁_ infix 10 _`⅋_ infix 10 _`⊗_ data Structure : Set a where `I : Structure `+_ : Atom → Structure `-_ : Atom → Structure _`◁_ : Structure → Structure → Structure _`⅋_ : Structure → Structure → Structure _`⊗_ : Structure → Structure → Structure `!_ : Structure → Structure `?_ : Structure → Structure private variable P P′ : Structure Q Q′ : Structure R R′ : Structure S S′ : Structure `¬_ : Structure → Structure `¬ `I = `I `¬ (`+ A) = `- A `¬ (`- A) = `+ A `¬ (`! P) = `? (`¬ P) `¬ (`? P) = `! (`¬ P) `¬ (P `◁ Q) = `¬ P `◁ `¬ Q `¬ (P `⅋ Q) = `¬ P `⊗ `¬ Q `¬ (P `⊗ Q) = `¬ P `⅋ `¬ Q module _ {ℓ} (_∼_ : Rel Structure ℓ) where mutual private _≃_ : Rel Structure (suc a ⊔ ℓ) _≃_ = CongClosure data CongClosure : Rel Structure (suc a ⊔ ℓ) where emb : P ∼ P′ → P ≃ P′ _`⟨◁ : P ≃ P′ → (P `◁ Q) ≃ (P′ `◁ Q) `◁⟩_ : Q ≃ Q′ → (P `◁ Q) ≃ (P `◁ Q′) _`⟨⊗ : P ≃ P′ → (P `⊗ Q) ≃ (P′ `⊗ Q) `⊗⟩_ : Q ≃ Q′ → (P `⊗ Q) ≃ (P `⊗ Q′) _`⟨⅋ : P ≃ P′ → (P `⅋ Q) ≃ (P′ `⅋ Q) `⅋⟩_ : Q ≃ Q′ → (P `⅋ Q) ≃ (P `⅋ Q′) `!⟩_ : P ≃ P′ → (`! P) ≃ (`! P′)