{-# OPTIONS --allow-unsolved-metas #-}
module Verona2024.DoubleNegation.StableAxioms where

open import Verona2024.Basics.Common hiding (; zero; succ)

-- Here we postulate the PA axioms as truths, and then use these below to establish
-- the truth of the translated statements.
--
-- More accurately, we should instead define an Agda datatype of PA and HA proofs:
-- With the setup in this file, we could cheat by employing advanced Agda features
-- in the proofs of the translated statements (like universes and universe polymorphism).
postulate
   : Set

  zero : 
  succ :   
  _+_  :     
  _·_  :     

  add-zero       : (x   : )      (x + zero)  x
  add-succ       : (x y : )      (x + succ y)  succ (x + y)
  mult-zero      : (x   : )      (x · zero)  zero
  mult-succ      : (x y : )      (x · succ y)  ((x · y) + y)
  succ-not-zero  : (x   : )      ¬ (succ x  zero)
  succ-injective : (x y : )      succ x  succ y  x  y
  zero-or-succ   : (x   : )      x  zero  Σ[ y   ] x  succ y
  induction      : (P :   Set)  P zero  ((n : )  P n  P (succ n))  ((n : )  P n)

return : {X : Set}  X  ¬ ¬ X
return x = λ k  k x

add-zero' : (x : )  ¬ ¬ ((x + zero)  x)
add-zero' x = return (add-zero x)

-- Add more translations and their proofs here.