{-# OPTIONS --safe #-}

module Multiset.Prelude where

open import Cubical.Foundations.Prelude
  public

_$_ :  { ℓ'} {A : Type } {B : Type ℓ'}
   (f : A  B)
   (a : A)
   B
f $ a = f a
{-# INLINE _$_ #-}

infixr -1 _$_

module PathReasoning where
  private
    variable
       : Level
      A : Type 

  ≡⟨⟩∎-syntax :  (x y : A)  x  y  x  y
  ≡⟨⟩∎-syntax _ _ p = p
  {-# INLINE ≡⟨⟩∎-syntax #-}

  syntax ≡⟨⟩∎-syntax x y p = x ≡⟨ p ⟩∎ y 

  private
    open import Cubical.Data.Nat.Base
    open import Cubical.Data.Nat.Properties
    idr : (n : )  n + 0  n
    idr zero = refl
    idr (suc n) =
      suc (n + 0) ≡⟨ cong suc (idr n) ⟩∎
      suc n 

    comm : (m n : )  m + n  n + m
    comm m zero = idr m
    comm m (suc n) =
      m + suc n   ≡⟨ +-suc m n 
      suc (m + n) ≡⟨ cong suc (comm m n) ⟩∎
      suc (n + m) 

open PathReasoning using (≡⟨⟩∎-syntax) public