\begin{code}
module linear.Relation.Functional where

open import Data.Unit
open import Function
open import Relation.Binary.PropositionalEquality

Functional :
  {RI : Set}      -- Relevant Input
  {II : RI → Set} -- Irelevant Input
  {O  : RI → Set} -- Output
  (R  : (ri : RI) → II ri → O ri → Set) → Set
Functional {RI} {II} {O} R =
  (ri : RI) {ii₁ ii₂ : II ri} {o₁ o₂ : O ri} →
  R ri ii₁ o₁ → R ri ii₂ o₂ → o₁ ≡ o₂

Functional′ : {I : Set} {O : I → Set} (R : (i : I) → O i → Set) → Set
Functional′ R = Functional {II = const ⊤} (λ ri _ o → R ri o)
\end{code}
