This is the Agda formalisation to accompany the paper A.W. Swan, Oracle modalities.
The main directory contains the following files:
Includes.agdaImports modules from the cubical library that are used multiple timesDoubleNegationSheaves.agdaImplementation of 0-truncated double negation sheafification using the classifier for double negation stable propositions and various results about itOracleModality.agdaMain results about oracle modalities, including their definition, proof of relativised Markov's principle and its applications, definition of Turing degreesParallelSearch.agdaparallel unbounded search using relativised Markov's principleRelativisedCC.agdaproof of relativised version of computable choice, with definition of Turing jump as applicationWeakTT.agdaa formulation of weak truth table reducibility and proof that Turing reducibility is strictly weakerContinuity.agdaa local continuity principle for Turing reducibility
Axioms/ This directory contains files postulating the main axioms that we will be using together with some basic results using the axioms.
NegativeResizing.agdaPostulates a small classifier for all negated types. Contains some basic results allowing us to use it as a classifier for double negation stable propositionsComputableChoice.agdaPostulates computable choice, derives ECT and CTMarkovInduction.agdaMarkov induction allows us to construct functions that include unbounded search. Includes a derivation of Markov's principle
Util/ Anything used in the formalisation that isn't specifically mentioned in the paper or isn't new
ModalOperatorSugar.agdaload the bind function required for syntactic sugar via instance resolution. Allows us to usedonotation for anything implementing theModalOperatortypePropositionalTruncationModalInstance.agdaPropositional truncation implementsModalOperatorDoubleNegation.agdaLemmas about double negation including implementation ofModalOperatorHasUnderlyingType.agdaUtility function for getting the underlying type of some structure via instance resolutionNullification.agdaa couple of useful functions regarding nullificationLexNull.agdaProof that nullification of a family of propositions is lexPartialElements.agdaImplementation of partial elements, including notation for any modal operator whose elements can be viewed as partial elements.StablePartial.agdaPartial elements with double negation stable domainNat.agdaMinor utility function on the naturalsList.agdaUtility for universal quantifiers over listsMisc.agdaMiscellaneous utility functionsEverything.agdaPackages commonly used utility functions into a single import
We use cubical mode Agda and the cubical Agda library. We need version v0.7 of the cubical library, which requires Agda 2.6.4 or later. The library needs to be in the Agda search path, as described at https://agda.readthedocs.io/en/v2.6.4.3/tools/package-system.html. These files have been tested and type check correctly with Agda 2.6.4.3 and cubical v0.7.