{-# OPTIONS --safe --sized-types #-} module Generic.Bisimilar where open import Size open import Data.Unit open import Data.Bool open import Data.Nat.Base open import Data.Fin open import Data.Product open import Data.Environment open import Generic.Syntax open import Generic.Cofinite open import Generic.Relator open import Generic.Simulation open import Relation.Binary.PropositionalEquality using (_≡_ ; subst) private variable I : Set record ≈^∞Tm (d : Desc I) (s : Size) (i : I) (t u : ∞Tm d s i) : Set where coinductive field force : {s′ : Size< s} → ⟦ d ⟧ᴿ (λ _ i → ≈^∞Tm d s′ i) (t .force) (u .force) open ≈^∞Tm public module _ {I : Set} (d : Desc I) where private variable s : Size i : I t u v : ∞Tm d s i refl : ≈^∞Tm d s i t t sym : ≈^∞Tm d s i t u → ≈^∞Tm d s i u t trans : ≈^∞Tm d s i t u → ≈^∞Tm d s i u v → ≈^∞Tm d s i t v ≈^∞Tm.force refl = reflᴿ d (λ _ _ _ → refl) _ ≈^∞Tm.force (sym eq) = symᴿ d (λ _ _ → sym) (≈^∞Tm.force eq) ≈^∞Tm.force (trans t≈u u≈v) = transᴿ d (λ _ _ → trans) (≈^∞Tm.force t≈u) (≈^∞Tm.force u≈v)