module HoareLogic.Utilities where open import Level using (Level) open import Data.Sum open import Data.Bool open import Data.Nat as Nat open import Relation.Nullary open import Relation.Nullary.Decidable open import Relation.Binary open import Relation.Binary.PropositionalEquality trueFromWitness : {l : Level} {P : Set l} {d : Dec P} → P → ⌊ d ⌋ ≡ true trueFromWitness {d = yes _} p = refl trueFromWitness {d = no ¬p} p with ¬p p trueFromWitness {d = no ¬p} p | () trueToWitness : {l : Level} {P : Set l} {d : Dec P} → ⌊ d ⌋ ≡ true → P trueToWitness {d = yes p} eq = p trueToWitness {d = no ¬p} () falseFromWitness : {l : Level} {P : Set l} {d : Dec P} → ¬ P → ⌊ d ⌋ ≡ false falseFromWitness {d = yes p} ¬p with ¬p p falseFromWitness {d = yes p} ¬p | () falseFromWitness {d = no _ } ¬p = refl falseToWitness : {l : Level} {P : Set l} {d : Dec P} → ⌊ d ⌋ ≡ false → ¬ P falseToWitness {d = yes p} () falseToWitness {d = no ¬p} eq = ¬p pred-lemma : {m n : ℕ} → suc m ≡ n → pred n < n pred-lemma refl = DecTotalOrder.refl Nat.decTotalOrder pred-inverse-lemma : {n : ℕ} → pred n < n → suc (pred n) ≡ n pred-inverse-lemma {zero } () pred-inverse-lemma {suc n} _ = refl