{-# OPTIONS --allow-unsolved-metas #-} module Verona2024.Basics.Minima where open import Verona2024.Basics.Common HasMin : (ℕ → Set) → Set HasMin X = Σ[ n ∈ ℕ ] X n ∧ ((m : ℕ) → X m → n ≤ m) Detachable : (ℕ → Set) → Set Detachable X = (n : ℕ) → X n ∨ ¬ (X n) LEM : Set₁ LEM = (P : Set) → P ∨ (¬ P) triv : (X : ℕ → Set) → X zero → HasMin X triv X 0∈X = {!!} shift : (ℕ → Set) → (ℕ → Set) shift X = λ n → X (succ n) module _ {X : ℕ → Set} where lemma : ¬ (X zero) → HasMin (shift X) → HasMin X lemma p (n , n∈X' , n-min) = {!!} where go : (m : ℕ) → X m → succ n ≤ m go zero zero∈X = {!!} go (succ m) succm∈X = {!!} a : (X : ℕ → Set) (x₀ : ℕ) → X x₀ → Detachable X → HasMin X a X zero x₀∈X dec = {!!} a X (succ x₀) succx₀∈X dec with dec zero ... | left p = {!!} ... | right p = {!!} return : {A : Set} → A → ¬ ¬ A return x = {!!} oracle : {A : Set} → ¬ ¬ (A ∨ ¬ A) oracle = {!!} _⟫=_ : {A B : Set} → ¬ ¬ A → (A → ¬ ¬ B) → ¬ ¬ B h ⟫= f = {!!} ¬¬-map : {A B : Set} → (A → B) → (¬ ¬ A → ¬ ¬ B) ¬¬-map f h = {!!} b : (X : ℕ → Set) (x₀ : ℕ) → X x₀ → ¬ ¬ HasMin X b X zero zero∈X = {!!} b X (succ x₀) succx₀∈X = oracle ⟫= go where go : X zero ∨ ¬ (X zero) → ¬ ¬ HasMin X go (left p) = {!!} go (right p) = {!!} data ⊤ : Set where tt : ⊤ ¬succ≤zero : {n : ℕ} → ¬ (succ n ≤ zero) ¬succ≤zero () c : ((X : ℕ → Set) (x₀ : ℕ) → X x₀ → HasMin X) → LEM c r P = {!!} where X : ℕ → Set X zero = P X (succ _) = ⊤ go : HasMin X → P ∨ ¬ P go (zero , n∈X , n-min) = {!!} go (succ n , n∈X , n-min) = {!!}