From 4527250aee1d1d4655e84f0583d04410b7c53642 Mon Sep 17 00:00:00 2001 From: Chloe Brown Date: Mon, 22 Jan 2024 11:51:56 +0000 Subject: Advent of proof submissions. Completed all problems save 12, where I had to postulate two lemma. --- src/Problem23.agda | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/Problem23.agda (limited to 'src/Problem23.agda') diff --git a/src/Problem23.agda b/src/Problem23.agda new file mode 100644 index 0000000..6ee5faf --- /dev/null +++ b/src/Problem23.agda @@ -0,0 +1,136 @@ +{-# OPTIONS --safe #-} + +module Problem23 where + +open import Data.List +open import Data.List.Properties +open import Data.Fin using (fromℕ<) +open import Data.Fin.Properties using (fromℕ<-cong) +open import Data.Empty +open import Data.Nat +open import Data.Nat.Properties +open import Data.Product +open import Function +open import Relation.Binary.PropositionalEquality +open import Relation.Nullary +open import Relation.Nullary.Negation + +open ≡-Reasoning + + +variable State : Set +variable f : State → State + +Assertion : Set → Set₁ +Assertion State = State → Set +variable ϕ ϕ′ ψ ψ′ π g : Assertion State + +_∧_ : Assertion State → Assertion State → Assertion State +ϕ ∧ ψ = λ σ → ϕ σ × ψ σ + +¬'_ : Assertion State → Assertion State +¬' ϕ = λ σ → (ϕ σ → ⊥) + +_⇒_ : Assertion State → Assertion State → Set +ϕ ⇒ ψ = ∀ σ → ϕ σ → ψ σ + +data Program (State : Set) : Set₁ where + SKIP : Program State + IF_THEN_ELSE_FI : Assertion State → Program State → Program State → Program State + WHILE_DO_OD : Assertion State → Program State → Program State + _∶_ : Program State → Program State → Program State + UPD : (State → State) → Program State + +infixl 5 _∶_ + +variable P Q : Program State + +data ⟨_⟩_⟨_⟩ {State : Set} : Assertion State → Program State → Assertion State → Set₁ where + skipₕ : ⟨ ϕ ⟩ SKIP ⟨ ϕ ⟩ + ifₕ : ⟨ ϕ ∧ g ⟩ P ⟨ ψ ⟩ → ⟨ ϕ ∧ (¬' g) ⟩ Q ⟨ ψ ⟩ → ⟨ ϕ ⟩ IF g THEN P ELSE Q FI ⟨ ψ ⟩ + whileₕ : ⟨ ϕ ∧ g ⟩ P ⟨ ϕ ⟩ → ⟨ ϕ ⟩ WHILE g DO P OD ⟨ ϕ ∧ (¬' g) ⟩ + seqₕ : ⟨ ϕ ⟩ P ⟨ π ⟩ → ⟨ π ⟩ Q ⟨ ψ ⟩ → ⟨ ϕ ⟩ P ∶ Q ⟨ ψ ⟩ + updₕ : ⟨ ϕ ∘ f ⟩ UPD f ⟨ ϕ ⟩ + conseqₕ : ϕ ⇒ ϕ′ → ⟨ ϕ′ ⟩ P ⟨ ψ′ ⟩ → ψ′ ⇒ ψ → ⟨ ϕ ⟩ P ⟨ ψ ⟩ + + +record ListSum : Set where + field + A : List ℕ + s : ℕ + i : ℕ + +lookup' : List ℕ → ℕ → ℕ +lookup' V n with n