view paper/src/Reasoning.agda.replaced @ 2:c7acb9211784

add code, figure. and paper fix content
author ryokka
date Mon, 27 Jan 2020 20:41:36 +0900
parents
children
line wrap: on
line source

open import Relation.Binary.PropositionalEquality
open import nat
open import nat_add
open @$\equiv$@-Reasoning

module nat_add_sym_reasoning where

addToRight : (n m : Nat) @$\rightarrow$@ S (n + m) @$\equiv$@ n + (S m)
addToRight O m     = refl
addToRight (S n) m = cong S (addToRight n m)

addSym : (n m : Nat) @$\rightarrow$@ n + m @$\equiv$@ m + n
addSym O       O   = refl
addSym O    (S m)  = cong S (addSym O m)
addSym (S n)   O   = cong S (addSym n O)
addSym (S n) (S m) = begin
  (S n) + (S m)  @$\equiv$@@$\langle$@ refl @$\rangle$@
  S (n + S m)    @$\equiv$@@$\langle$@ cong S (addSym n (S m)) @$\rangle$@
  S ((S m) + n)  @$\equiv$@@$\langle$@ addToRight (S m) n @$\rangle$@
  S (m + S n)    @$\equiv$@@$\langle$@ refl @$\rangle$@
  (S m) + (S n)  @$\blacksquare$@