{-# OPTIONS --without-K --safe #-}

module Fragment.Examples.CSemigroup.Arith.Reasoning where

open import Fragment.Examples.CSemigroup.Arith.Base

+-direct :  {m n}  (m + 2) + (3 + n)  m + (n + 5)
+-direct {m} {n} = begin
    (m + 2) + (3 + n)
  ≡⟨ fragment CSemigroupFrex +-csemigroup 
    m + (n + 5)
  

open import Data.Nat.Properties using (*-distribˡ-+)

+-inner :  {m n k}  k * (m + 2) + k * (3 + n)  (m + n + 5) * k
+-inner {m} {n} {k} = begin
    k * (m + 2) + k * (3 + n)
  ≡⟨ sym (*-distribˡ-+ k (m + 2) (3 + n)) 
    k * ((m + 2) + (3 + n))
  ≡⟨ cong (k *_) (fragment CSemigroupFrex +-csemigroup) 
    k * (m + n + 5)
  ≡⟨ fragment CSemigroupFrex *-csemigroup 
    (m + n + 5) * k