Mercurial > hg > Papers > 2022 > soto-sigos
view Paper/src/agda/utilities.agda.replaced @ 0:14a0e409d574
ADD fast commit
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Apr 2022 23:13:44 +0900 |
parents | |
children |
line wrap: on
line source
{-!$\#$! OPTIONS --allow-unsolved-metas !$\#$!-} module utilities where open import Function open import Data.Nat open import Data.Product open import Data.Bool hiding ( _≟_ ; _!$\leq$!?_) open import Level renaming ( suc to succ ; zero to Zero ) open import Relation.Nullary using (!$\neg$!_; Dec; yes; no) open import Relation.Binary.PropositionalEquality Pred : Set !$\rightarrow$! Set!$\_{1}$! Pred X = X !$\rightarrow$! Set Imply : Set !$\rightarrow$! Set !$\rightarrow$! Set Imply X Y = X !$\rightarrow$! Y Iff : Set !$\rightarrow$! Set !$\rightarrow$! Set Iff X Y = Imply X Y !$\times$! Imply Y X record _!$\wedge$!_ {n : Level } (a : Set n) (b : Set n): Set n where field pi1 : a pi2 : b open _!$\wedge$!_ _-_ : !$\mathbb{N}$! !$\rightarrow$! !$\mathbb{N}$! !$\rightarrow$! !$\mathbb{N}$! x - zero = x zero - _ = zero (suc x) - (suc y) = x - y +zero : { y : !$\mathbb{N}$! } !$\rightarrow$! y + zero !$\equiv$! y +zero {zero} = refl +zero {suc y} = cong ( !$\lambda$! x !$\rightarrow$! suc x ) ( +zero {y} ) +-sym : { x y : !$\mathbb{N}$! } !$\rightarrow$! x + y !$\equiv$! y + x +-sym {zero} {zero} = refl +-sym {zero} {suc y} = let open !$\equiv$!-Reasoning in begin zero + suc y !$\equiv$!!$\langle$!!$\rangle$! suc y !$\equiv$!!$\langle$! sym +zero !$\rangle$! suc y + zero !$\blacksquare$! +-sym {suc x} {zero} = let open !$\equiv$!-Reasoning in begin suc x + zero !$\equiv$!!$\langle$! +zero !$\rangle$! suc x !$\equiv$!!$\langle$!!$\rangle$! zero + suc x !$\blacksquare$! +-sym {suc x} {suc y} = cong ( !$\lambda$! z !$\rightarrow$! suc z ) ( let open !$\equiv$!-Reasoning in begin x + suc y !$\equiv$!!$\langle$! +-sym {x} {suc y} !$\rangle$! suc (y + x) !$\equiv$!!$\langle$! cong ( !$\lambda$! z !$\rightarrow$! suc z ) (+-sym {y} {x}) !$\rangle$! suc (x + y) !$\equiv$!!$\langle$! sym ( +-sym {y} {suc x}) !$\rangle$! y + suc x !$\blacksquare$! ) minus-plus : { x y : !$\mathbb{N}$! } !$\rightarrow$! (suc x - 1) + (y + 1) !$\equiv$! suc x + y minus-plus {zero} {y} = +-sym {y} {1} minus-plus {suc x} {y} = cong ( !$\lambda$! z !$\rightarrow$! suc z ) (minus-plus {x} {y}) +1!$\equiv$!suc : { x : !$\mathbb{N}$! } !$\rightarrow$! x + 1 !$\equiv$! suc x +1!$\equiv$!suc {zero} = refl +1!$\equiv$!suc {suc x} = cong ( !$\lambda$! z !$\rightarrow$! suc z ) ( +1!$\equiv$!suc {x} ) lt : !$\mathbb{N}$! !$\rightarrow$! !$\mathbb{N}$! !$\rightarrow$! Bool lt x y with (suc x ) !$\leq$!? y lt x y | yes p = true lt x y | no !$\neg$!p = false pred!$\mathbb{N}$! : {n : !$\mathbb{N}$! } !$\rightarrow$! lt 0 n !$\equiv$! true !$\rightarrow$! !$\mathbb{N}$! pred!$\mathbb{N}$! {zero} () pred!$\mathbb{N}$! {suc n} refl = n pred!$\mathbb{N}$!+1=n : {n : !$\mathbb{N}$! } !$\rightarrow$! (less : lt 0 n !$\equiv$! true ) !$\rightarrow$! (pred!$\mathbb{N}$! less) + 1 !$\equiv$! n pred!$\mathbb{N}$!+1=n {zero} () pred!$\mathbb{N}$!+1=n {suc n} refl = +1!$\equiv$!suc suc-pred!$\mathbb{N}$!=n : {n : !$\mathbb{N}$! } !$\rightarrow$! (less : lt 0 n !$\equiv$! true ) !$\rightarrow$! suc (pred!$\mathbb{N}$! less) !$\equiv$! n suc-pred!$\mathbb{N}$!=n {zero} () suc-pred!$\mathbb{N}$!=n {suc n} refl = refl Equal : !$\mathbb{N}$! !$\rightarrow$! !$\mathbb{N}$! !$\rightarrow$! Bool Equal x y with x ≟ y Equal x y | yes p = true Equal x y | no !$\neg$!p = false _!$\Rightarrow$!_ : Bool !$\rightarrow$! Bool !$\rightarrow$! Bool false !$\Rightarrow$! _ = true true !$\Rightarrow$! true = true true !$\Rightarrow$! false = false !$\Rightarrow$!t : {x : Bool} !$\rightarrow$! x !$\Rightarrow$! true !$\equiv$! true !$\Rightarrow$!t {x} with x !$\Rightarrow$!t {x} | false = refl !$\Rightarrow$!t {x} | true = refl f!$\Rightarrow$! : {x : Bool} !$\rightarrow$! false !$\Rightarrow$! x !$\equiv$! true f!$\Rightarrow$! {x} with x f!$\Rightarrow$! {x} | false = refl f!$\Rightarrow$! {x} | true = refl !$\wedge$!-pi1 : { x y : Bool } !$\rightarrow$! x !$\wedge$! y !$\equiv$! true !$\rightarrow$! x !$\equiv$! true !$\wedge$!-pi1 {x} {y} eq with x | y | eq !$\wedge$!-pi1 {x} {y} eq | false | b | () !$\wedge$!-pi1 {x} {y} eq | true | false | () !$\wedge$!-pi1 {x} {y} eq | true | true | refl = refl !$\wedge$!-pi2 : { x y : Bool } !$\rightarrow$! x !$\wedge$! y !$\equiv$! true !$\rightarrow$! y !$\equiv$! true !$\wedge$!-pi2 {x} {y} eq with x | y | eq !$\wedge$!-pi2 {x} {y} eq | false | b | () !$\wedge$!-pi2 {x} {y} eq | true | false | () !$\wedge$!-pi2 {x} {y} eq | true | true | refl = refl !$\wedge$!true : { x : Bool } !$\rightarrow$! x !$\wedge$! true !$\equiv$! x !$\wedge$!true {x} with x !$\wedge$!true {x} | false = refl !$\wedge$!true {x} | true = refl true!$\wedge$! : { x : Bool } !$\rightarrow$! true !$\wedge$! x !$\equiv$! x true!$\wedge$! {x} with x true!$\wedge$! {x} | false = refl true!$\wedge$! {x} | true = refl bool-case : ( x : Bool ) { p : Set } !$\rightarrow$! ( x !$\equiv$! true !$\rightarrow$! p ) !$\rightarrow$! ( x !$\equiv$! false !$\rightarrow$! p ) !$\rightarrow$! p bool-case x T F with x bool-case x T F | false = F refl bool-case x T F | true = T refl impl!$\Rightarrow$! : {x y : Bool} !$\rightarrow$! (x !$\equiv$! true !$\rightarrow$! y !$\equiv$! true ) !$\rightarrow$! x !$\Rightarrow$! y !$\equiv$! true impl!$\Rightarrow$! {x} {y} p = bool-case x (!$\lambda$! x=t !$\rightarrow$! let open !$\equiv$!-Reasoning in begin x !$\Rightarrow$! y !$\equiv$!!$\langle$! cong ( !$\lambda$! z !$\rightarrow$! x !$\Rightarrow$! z ) (p x=t ) !$\rangle$! x !$\Rightarrow$! true !$\equiv$!!$\langle$! !$\Rightarrow$!t !$\rangle$! true !$\blacksquare$! ) ( !$\lambda$! x=f !$\rightarrow$! let open !$\equiv$!-Reasoning in begin x !$\Rightarrow$! y !$\equiv$!!$\langle$! cong ( !$\lambda$! z !$\rightarrow$! z !$\Rightarrow$! y ) x=f !$\rangle$! true !$\blacksquare$! ) Equal!$\rightarrow$!!$\equiv$! : { x y : !$\mathbb{N}$! } !$\rightarrow$! Equal x y !$\equiv$! true !$\rightarrow$! x !$\equiv$! y Equal!$\rightarrow$!!$\equiv$! {x} {y} eq with x ≟ y Equal!$\rightarrow$!!$\equiv$! {x} {y} refl | yes refl = refl Equal!$\rightarrow$!!$\equiv$! {x} {y} () | no !$\neg$!p Equal+1 : { x y : !$\mathbb{N}$! } !$\rightarrow$! Equal x y !$\equiv$! Equal (suc x) (suc y) Equal+1 {x} {y} with x ≟ y Equal+1 {x} {.x} | yes refl = {!!} Equal+1 {x} {y} | no !$\neg$!p = {!!} open import Data.Empty !$\equiv$!!$\rightarrow$!Equal : { x y : !$\mathbb{N}$! } !$\rightarrow$! x !$\equiv$! y !$\rightarrow$! Equal x y !$\equiv$! true !$\equiv$!!$\rightarrow$!Equal {x} {.x} refl with x ≟ x !$\equiv$!!$\rightarrow$!Equal {x} {.x} refl | yes refl = refl !$\equiv$!!$\rightarrow$!Equal {x} {.x} refl | no !$\neg$!p = !$\bot$!-elim ( !$\neg$!p refl )