summaryrefslogtreecommitdiff
path: root/source/Checking/Transition.hs
diff options
context:
space:
mode:
Diffstat (limited to 'source/Checking/Transition.hs')
-rw-r--r--source/Checking/Transition.hs2584
1 files changed, 0 insertions, 2584 deletions
diff --git a/source/Checking/Transition.hs b/source/Checking/Transition.hs
deleted file mode 100644
index a2e7054..0000000
--- a/source/Checking/Transition.hs
+++ /dev/null
@@ -1,2584 +0,0 @@
-{-# LANGUAGE DerivingStrategies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
--- | Closed in-memory carrier used while declaration families migrate from the
--- disposable legacy checker to checked typed semantics.
-module Checking.Transition
- ( ModuleName
- , moduleName
- , moduleNameNamespace
- , moduleNameRelativePath
- , LocalDeclarationOrdinal
- , localDeclarationOrdinalValue
- , LocalFactOrdinal
- , localFactOrdinalValue
- , LocalAssumptionOrdinal
- , localAssumptionOrdinalValue
- , OpaqueDeclarationRef
- , opaqueDeclarationModule
- , opaqueDeclarationOrdinal
- , Origin
- , origin
- , CheckedGlobalRef
- , checkedGlobalReference
- , checkedGlobalType
- , FactRef
- , factReferenceModule
- , factReferenceOrdinal
- , TransitionFactRef
- , transitionTypedFactReference
- , TypedDirectAxiomManifestEntry
- , typedDirectAssumptionFact
- , typedDirectAssumptionKind
- , typedDirectAssumptionStatement
- , SessionTypedDeclaredAssumptionRef
- , sessionTypedAssumptionFact
- , sessionTypedAssumptionOrdinal
- , sessionTypedAssumptionKind
- , sessionTypedAssumptionStatement
- , SessionTypedTrustedVampireUse
- , TypedTrustDependencies
- , typedDeclaredAssumptionUses
- , typedTrustedVampireUses
- , typedVampireLoweringUses
- , typedFoundationUses
- , typedKernelRuleUses
- , TransitionDerivationImport
- , transitionDerivationImport
- , lookupTransitionTypedImport
- , AdmittedFact
- , admittedFactReference
- , admittedFactIsKernelProof
- , admittedFactIsReconstructedKernelProof
- , admittedFactIsTrustedVampire
- , admittedFactTypedTrustDependencies
- , TransitionModuleBuilder
- , openTransitionModuleBuilder
- , transitionBuilderLegacyStage
- , transitionBuilderImportedCheckingEnvironment
- , transitionBuilderFoundation
- , GlobalPremisePolicy(..)
- , TransitionTypedProblemError(..)
- , planTransitionTypedProblem
- , beginTransitionDeclaration
- , transitionCurrentDeclarationReference
- , commitTransitionOpaqueGlobal
- , commitTransitionTransparentGlobal
- , commitTransitionKernelFact
- , commitTransitionKernelFactWithImports
- , commitTransitionTypedVampireFact
- , commitTransitionTypedDeclaredAssumption
- , transitionBuilderWithLegacyStage
- , lookupTransitionGlobal
- , lookupTransitionGlobalBody
- , TransitionAdmittedModule
- , sealTransitionModule
- , transitionAdmittedName
- , transitionAdmittedLegacyModule
- , transitionAdmittedFacts
- , transitionAdmittedKernelProofCount
- , transitionAdmittedTypedTrustedVampireCount
- , TransitionReplayMeasurements(..)
- , transitionAdmittedReplayMeasurements
- , transitionAdmittedTypedDirectAxiomManifest
- , transitionAdmittedTypedTrustDependencies
- , transitionAdmittedGlobals
- , TransitionModuleError(..)
- ) where
-
-import Base
-import Checking.Backend.Connection qualified as BackendConnection
-import Checking.Backend.Problem qualified as Backend
-import Checking.Backend.Reconstruction qualified as BackendReconstruction
-import Checking.Backend.Tptp qualified as BackendTptp
-import Checking.Core
-import Checking.Facts qualified as Facts
-import Checking.Foundation
- ( CheckedFoundation
- , FoundationAxiomTag
- , KernelRuleTag
- , foundationAxiomFrozen
- )
-import Checking.Kernel.Derivation
-import Checking.Legacy
-import Felix.Module
-import Provers qualified
-import Report.Location
-import Syntax.Internal
-
-import Control.Monad (foldM, unless)
-import Data.Bifunctor (first)
-import Data.Map.Strict qualified as Map
-import Data.Sequence qualified as Seq
-import Data.Set qualified as Set
-import Data.Vector (Vector)
-import Data.Vector qualified as Vector
-import Numeric.Natural (Natural)
-
-
-data OpaqueDeclarationRef = OpaqueDeclarationRef
- !ModuleName
- !LocalDeclarationOrdinal
- deriving stock (Show, Eq, Ord)
-
-opaqueDeclarationModule
- :: OpaqueDeclarationRef
- -> ModuleName
-opaqueDeclarationModule
- (OpaqueDeclarationRef name _ordinal) =
- name
-
-opaqueDeclarationOrdinal
- :: OpaqueDeclarationRef
- -> LocalDeclarationOrdinal
-opaqueDeclarationOrdinal
- (OpaqueDeclarationRef _name ordinal) =
- ordinal
-
-data Origin = Origin
- !Location
- !(Maybe Text)
- !(Maybe Marker)
- deriving stock (Show, Eq)
-
-origin
- :: Location
- -> Maybe Text
- -> Maybe Marker
- -> Origin
-origin =
- Origin
-
-
-data CheckedGlobalRef = CheckedOpaqueGlobal
- !OpaqueDeclarationRef
- !CoreType
- deriving stock (Show, Eq, Ord)
-
-checkedGlobalReference
- :: CheckedGlobalRef
- -> OpaqueDeclarationRef
-checkedGlobalReference
- (CheckedOpaqueGlobal reference _coreType) =
- reference
-
-checkedGlobalType :: CheckedGlobalRef -> CoreType
-checkedGlobalType
- (CheckedOpaqueGlobal _reference coreType) =
- coreType
-
-newtype LocalAssumptionOrdinal =
- LocalAssumptionOrdinal Natural
- deriving stock (Show, Eq, Ord)
-
-localAssumptionOrdinalValue
- :: LocalAssumptionOrdinal
- -> Natural
-localAssumptionOrdinalValue
- (LocalAssumptionOrdinal ordinal) =
- ordinal
-
-data FactRef = FactRef
- !ModuleName
- !LocalFactOrdinal
- deriving stock (Show, Eq, Ord)
-
-factReferenceModule :: FactRef -> ModuleName
-factReferenceModule (FactRef name _ordinal) =
- name
-
-factReferenceOrdinal :: FactRef -> LocalFactOrdinal
-factReferenceOrdinal (FactRef _name ordinal) =
- ordinal
-
-data TransitionFactRef
- = TransitionLegacyFactRef !LegacyFactRef
- | TransitionTypedFactRef !FactRef
- deriving stock (Show, Eq, Ord)
-
-transitionTypedFactReference
- :: TransitionFactRef
- -> Maybe FactRef
-transitionTypedFactReference = \case
- TransitionLegacyFactRef{} ->
- Nothing
- TransitionTypedFactRef reference ->
- Just reference
-
-data TypedSemanticFact = TypedSemanticFact
- !(FrozenCheckedCore CheckedGlobalRef)
- !(Backend.SupportedProposition
- Void
- CheckedGlobalRef)
- !(Backend.FofCapability
- (Backend.CheckedFofProjection
- Void
- CheckedGlobalRef))
- deriving stock (Eq)
-
-prepareTypedSemanticFact
- :: TransitionModuleBuilder
- -> FrozenCheckedCore CheckedGlobalRef
- -> Either TransitionModuleError TypedSemanticFact
-prepareTypedSemanticFact builder supplied = do
- statement <-
- recheckBuilderFrozenCore builder supplied
- prepare statement
- where
- prepare statement
- | frozenCoreType statement /= TyProp =
- Left
- (TransitionTypedFactIsNotProposition
- (frozenCoreType statement))
- | otherwise = do
- proposition <-
- first TransitionTypedFactSupportError
- (Backend.supportedProposition
- Vector.empty
- (embedClosedCore [] statement))
- capability <-
- first TransitionTypedFactClassificationError
- (Backend.classifySupportedProposition
- (builderGlobalType builder)
- proposition)
- Right
- (TypedSemanticFact
- statement
- proposition
- capability)
-
-typedSemanticStatement
- :: TypedSemanticFact
- -> FrozenCheckedCore CheckedGlobalRef
-typedSemanticStatement
- (TypedSemanticFact
- statement
- _proposition
- _capability) =
- statement
-
-typedSemanticProposition
- :: TypedSemanticFact
- -> Backend.SupportedProposition
- Void
- CheckedGlobalRef
-typedSemanticProposition
- (TypedSemanticFact
- _statement
- proposition
- _capability) =
- proposition
-
-typedSemanticFofCapability
- :: TypedSemanticFact
- -> Backend.FofCapability
- (Backend.CheckedFofProjection
- Void
- CheckedGlobalRef)
-typedSemanticFofCapability
- (TypedSemanticFact
- _statement
- _proposition
- capability) =
- capability
-
-data TypedDirectAxiomManifestEntry =
- TypedDirectAxiomManifestEntry
- !FactRef
- !AssumptionKind
- !(FrozenCheckedCore CheckedGlobalRef)
- deriving stock (Show, Eq, Ord)
-
-typedDirectAssumptionFact
- :: TypedDirectAxiomManifestEntry
- -> FactRef
-typedDirectAssumptionFact
- (TypedDirectAxiomManifestEntry reference _kind _statement) =
- reference
-
-typedDirectAssumptionKind
- :: TypedDirectAxiomManifestEntry
- -> AssumptionKind
-typedDirectAssumptionKind
- (TypedDirectAxiomManifestEntry _reference kind _statement) =
- kind
-
-typedDirectAssumptionStatement
- :: TypedDirectAxiomManifestEntry
- -> FrozenCheckedCore CheckedGlobalRef
-typedDirectAssumptionStatement
- (TypedDirectAxiomManifestEntry _reference _kind statement) =
- statement
-
-data SessionTypedDeclaredAssumptionRef =
- SessionTypedDeclaredAssumptionRef
- !FactRef
- !LocalAssumptionOrdinal
- !AssumptionKind
- !(FrozenCheckedCore CheckedGlobalRef)
- deriving stock (Show, Eq, Ord)
-
-sessionTypedAssumptionFact
- :: SessionTypedDeclaredAssumptionRef
- -> FactRef
-sessionTypedAssumptionFact
- (SessionTypedDeclaredAssumptionRef
- reference
- _ordinal
- _kind
- _statement) =
- reference
-
-sessionTypedAssumptionOrdinal
- :: SessionTypedDeclaredAssumptionRef
- -> LocalAssumptionOrdinal
-sessionTypedAssumptionOrdinal
- (SessionTypedDeclaredAssumptionRef
- _reference
- ordinal
- _kind
- _statement) =
- ordinal
-
-sessionTypedAssumptionKind
- :: SessionTypedDeclaredAssumptionRef
- -> AssumptionKind
-sessionTypedAssumptionKind
- (SessionTypedDeclaredAssumptionRef
- _reference
- _ordinal
- kind
- _statement) =
- kind
-
-sessionTypedAssumptionStatement
- :: SessionTypedDeclaredAssumptionRef
- -> FrozenCheckedCore CheckedGlobalRef
-sessionTypedAssumptionStatement
- (SessionTypedDeclaredAssumptionRef
- _reference
- _ordinal
- _kind
- statement) =
- statement
-
-newtype SessionTypedTrustedVampireUse =
- SessionTypedTrustedVampireUse FactRef
- deriving stock (Show, Eq, Ord)
-
-data TypedTrustDependencies = TypedTrustDependencies
- { typedDeclaredAssumptionUses
- :: !(Set SessionTypedDeclaredAssumptionRef)
- , typedTrustedVampireUses
- :: !(Set SessionTypedTrustedVampireUse)
- , typedVampireLoweringUses
- :: !(Set VampireLoweringAssumption)
- , typedFoundationUses
- :: !(Set FoundationAxiomTag)
- , typedKernelRuleUses
- :: !(Set KernelRuleTag)
- }
- deriving stock (Show, Eq)
-
-instance Semigroup TypedTrustDependencies where
- left <> right =
- TypedTrustDependencies
- { typedDeclaredAssumptionUses =
- typedDeclaredAssumptionUses left
- <> typedDeclaredAssumptionUses right
- , typedTrustedVampireUses =
- typedTrustedVampireUses left
- <> typedTrustedVampireUses right
- , typedVampireLoweringUses =
- typedVampireLoweringUses left
- <> typedVampireLoweringUses right
- , typedFoundationUses =
- typedFoundationUses left
- <> typedFoundationUses right
- , typedKernelRuleUses =
- typedKernelRuleUses left
- <> typedKernelRuleUses right
- }
-
-instance Monoid TypedTrustDependencies where
- mempty =
- TypedTrustDependencies
- { typedDeclaredAssumptionUses = mempty
- , typedTrustedVampireUses = mempty
- , typedVampireLoweringUses = mempty
- , typedFoundationUses = mempty
- , typedKernelRuleUses = mempty
- }
-
-data AuthorizedKernelReplay =
- AuthorizedKernelReplay
- !(FrozenCheckedCore CheckedGlobalRef)
- !(Set FactRef)
- !(Set FoundationAxiomTag)
- !(Set KernelRuleTag)
- !Natural
- !Natural
- !(Maybe SessionTypedReconstructionProvenance)
- deriving stock (Eq)
-
-data SessionTypedReconstructionProvenance =
- SessionTypedReconstructionProvenance
- !BackendReconstruction.ReconstructionPolicy
- !(BackendTptp.PreparedTypedTptpProblem
- TransitionFactRef
- Void
- CheckedGlobalRef)
- !Provers.AcceptedVampireRun
- !BackendConnection.ConnectionTrace
- !BackendConnection.ConnectionSearchStats
- !Natural
- !Natural
- deriving stock (Eq)
-
-data SessionTypedReconstructionFallback =
- SessionTypedReconstructionFallback
- !BackendReconstruction.ReconstructionPolicy
- !SessionTypedReconstructionFallbackReason
- deriving stock (Eq)
-
-data SessionTypedReconstructionFallbackReason
- = ReconstructionFallbackUnsupported
- !(BackendConnection.ConnectionUnsupported
- TransitionFactRef)
- | ReconstructionFallbackUnavailable
- !BackendConnection.ConnectionSearchStats
- | ReconstructionFallbackSearchExhausted
- !BackendConnection.ConnectionExhaustion
- !BackendConnection.ConnectionSearchStats
- | ReconstructionFallbackKernelReplayExhausted
- !KernelReplayError
- deriving stock (Eq)
-
-data SessionTypedTrustedVampireEvidence =
- SessionTypedTrustedVampireEvidence
- !FactRef
- !(FrozenCheckedCore CheckedGlobalRef)
- !(BackendTptp.PreparedTypedTptpProblem
- TransitionFactRef
- Void
- CheckedGlobalRef)
- !Provers.AcceptedVampireRun
- !TypedTrustDependencies
- !SessionTypedReconstructionFallback
- deriving stock (Eq)
-
-data FactAuthorization
- = KernelProof
- !AuthorizedKernelReplay
- !TypedTrustDependencies
- | DeclaredAssumption
- !SessionTypedDeclaredAssumptionRef
- | TrustedVampire
- !SessionTypedTrustedVampireEvidence
- deriving stock (Eq)
-
-data TypedAdmittedFact = TypedAdmittedFact
- !TypedSemanticFact
- !FactAuthorization
- deriving stock (Eq)
-
-commitTransitionKernelFact
- :: NonEmpty Marker
- -> Origin
- -> FrozenCheckedCore CheckedGlobalRef
- -> KernelDerivation CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionKernelFact aliases factOrigin target derivation builder =
- commitTransitionKernelFactWithImports
- aliases
- factOrigin
- Vector.empty
- target
- derivation
- builder
-
-commitTransitionKernelFactWithImports
- :: NonEmpty Marker
- -> Origin
- -> Vector TransitionDerivationImport
- -> FrozenCheckedCore CheckedGlobalRef
- -> KernelDerivation CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionKernelFactWithImports
- aliases
- factOrigin
- imports
- target
- derivation
- builder = do
- admitted <-
- authorizeTransitionKernelFactWithImports
- imports
- target
- derivation
- builder
- insertTransitionTypedFact
- aliases
- factOrigin
- admitted
- builder
-
-data TransitionDerivationImport =
- TransitionDerivationImport
- !TransitionFactRef
- !(DerivationImportJudgment CheckedGlobalRef)
- deriving stock (Eq)
-
-transitionDerivationImport
- :: TransitionFactRef
- -> FrozenCheckedCore CheckedGlobalRef
- -> Either
- TransitionModuleError
- TransitionDerivationImport
-transitionDerivationImport reference statement =
- TransitionDerivationImport reference
- <$> first
- TransitionDerivationImportError
- (derivationImportJudgment statement)
-
-lookupTransitionTypedImport
- :: FrozenCheckedCore CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either
- TransitionModuleError
- (Maybe TransitionDerivationImport)
-lookupTransitionTypedImport statement builder =
- case Vector.find
- ((== Just statement)
- . admittedFactStatement
- . entryFact)
- (builderVisibleFacts builder) of
- Nothing ->
- Right Nothing
- Just
- (TransitionFactEntry
- fact@(TypedFactRow _reference admitted)
- _registration) -> do
- unless
- (typedAdmittedStatement admitted
- == statement)
- (Left TransitionKernelTargetMismatch)
- Just
- <$> transitionDerivationImport
- (admittedFactReference fact)
- statement
- Just (TransitionFactEntry LegacyFactRow{} _registration) ->
- Right Nothing
- where
- entryFact
- (TransitionFactEntry fact _registration) =
- fact
-
-authorizeTransitionKernelFactWithImports
- :: Vector TransitionDerivationImport
- -> FrozenCheckedCore CheckedGlobalRef
- -> KernelDerivation CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TypedAdmittedFact
-authorizeTransitionKernelFactWithImports
- imports
- target
- derivation
- builder = do
- authorizeTransitionKernelFactWithImportsAndProvenance
- defaultKernelReplayLimits
- Nothing
- imports
- target
- derivation
- builder
-
-authorizeTransitionKernelFactWithImportsAndProvenance
- :: KernelReplayLimits
- -> Maybe SessionTypedReconstructionProvenance
- -> Vector TransitionDerivationImport
- -> FrozenCheckedCore CheckedGlobalRef
- -> KernelDerivation CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TypedAdmittedFact
-authorizeTransitionKernelFactWithImportsAndProvenance
- replayLimits
- provenance
- imports
- target
- derivation
- builder = do
- semantic <-
- prepareTypedSemanticFact builder target
- let checkedTarget =
- typedSemanticStatement semantic
- replayed <-
- first TransitionKernelReplayError
- (replayKernelDerivation
- (builderFoundation builder)
- replayLimits
- (builderGlobalType builder)
- (derivationImport
- <$> imports)
- checkedTarget
- derivation)
- inheritedTrust <-
- foldM
- (\trust index ->
- (trust <>)
- <$> authorizeUsedImport
- imports
- builder
- index)
- mempty
- (Set.toAscList
- (replayedKernelImportUses replayed))
- let foundationTrust =
- mempty
- { typedFoundationUses =
- replayedKernelFoundationUses replayed
- , typedKernelRuleUses =
- replayedKernelRuleUses replayed
- }
- authorization =
- AuthorizedKernelReplay
- (replayedKernelTarget replayed)
- (Set.fromList
- [ reference
- | index <-
- Set.toAscList
- (replayedKernelImportUses replayed)
- , Right
- (TransitionDerivationImport
- (TransitionTypedFactRef reference)
- _judgment) <-
- [transitionImportAt imports index]
- ])
- (replayedKernelFoundationUses replayed)
- (replayedKernelRuleUses replayed)
- (replayedKernelNodeCount replayed)
- (replayedKernelMaximumDepth replayed)
- provenance
- unless
- (typedSemanticStatement semantic
- == replayedKernelTarget replayed)
- (Left TransitionKernelTargetMismatch)
- pure
- (TypedAdmittedFact
- semantic
- (KernelProof
- authorization
- (inheritedTrust <> foundationTrust)))
-
-typedAdmittedStatement
- :: TypedAdmittedFact
- -> FrozenCheckedCore CheckedGlobalRef
-typedAdmittedStatement
- (TypedAdmittedFact semantic _authorization) =
- typedSemanticStatement semantic
-
-typedAdmittedTrustDependencies
- :: TypedAdmittedFact
- -> TypedTrustDependencies
-typedAdmittedTrustDependencies
- (TypedAdmittedFact _semantic authorization) =
- factAuthorizationTrust authorization
-
-data AdmittedFact
- = LegacyFactRow
- !TransitionFactRef
- !H1LegacyAdmittedFact
- | TypedFactRow
- !TransitionFactRef
- !TypedAdmittedFact
- deriving stock (Eq)
-
-admittedFactReference
- :: AdmittedFact
- -> TransitionFactRef
-admittedFactReference = \case
- LegacyFactRow reference _admitted ->
- reference
- TypedFactRow reference _admitted ->
- reference
-
-admittedFactIsKernelProof :: AdmittedFact -> Bool
-admittedFactIsKernelProof = \case
- LegacyFactRow{} ->
- False
- TypedFactRow _reference
- (TypedAdmittedFact _semantic authorization) ->
- case authorization of
- KernelProof{} ->
- True
- DeclaredAssumption{} ->
- False
- TrustedVampire{} ->
- False
-
-admittedFactIsReconstructedKernelProof :: AdmittedFact -> Bool
-admittedFactIsReconstructedKernelProof = \case
- LegacyFactRow{} ->
- False
- TypedFactRow _reference
- (TypedAdmittedFact _semantic authorization) ->
- case authorization of
- KernelProof
- (AuthorizedKernelReplay
- _target
- _imports
- _foundation
- _rules
- _nodes
- _depth
- (Just _provenance))
- _trust ->
- True
- KernelProof{} ->
- False
- DeclaredAssumption{} ->
- False
- TrustedVampire{} ->
- False
-
-admittedFactIsTrustedVampire :: AdmittedFact -> Bool
-admittedFactIsTrustedVampire = \case
- LegacyFactRow{} ->
- False
- TypedFactRow _reference
- (TypedAdmittedFact _semantic authorization) ->
- case authorization of
- KernelProof{} ->
- False
- DeclaredAssumption{} ->
- False
- TrustedVampire{} ->
- True
-
-admittedFactTypedTrustDependencies
- :: AdmittedFact
- -> Maybe TypedTrustDependencies
-admittedFactTypedTrustDependencies = \case
- LegacyFactRow{} ->
- Nothing
- TypedFactRow _reference admitted ->
- Just (typedAdmittedTrustDependencies admitted)
-
-admittedFactStatement
- :: AdmittedFact
- -> Maybe (FrozenCheckedCore CheckedGlobalRef)
-admittedFactStatement = \case
- LegacyFactRow{} ->
- Nothing
- TypedFactRow _reference admitted ->
- Just (typedAdmittedStatement admitted)
-
-factAuthorizationTrust
- :: FactAuthorization
- -> TypedTrustDependencies
-factAuthorizationTrust = \case
- KernelProof _replay trust ->
- trust
- DeclaredAssumption reference ->
- mempty
- { typedDeclaredAssumptionUses =
- Set.singleton reference
- }
- TrustedVampire
- (SessionTypedTrustedVampireEvidence
- _reference
- _target
- _prepared
- _accepted
- trust
- _fallback) ->
- trust
-
-derivationImport
- :: TransitionDerivationImport
- -> DerivationImportJudgment CheckedGlobalRef
-derivationImport
- (TransitionDerivationImport _reference judgment) =
- judgment
-
-transitionImportAt
- :: Vector TransitionDerivationImport
- -> ImportIx
- -> Either
- TransitionModuleError
- TransitionDerivationImport
-transitionImportAt imports index
- | naturalIndex >
- fromIntegral (maxBound :: Int) =
- Left
- (TransitionKernelImportIndexOutOfBounds
- index)
- | otherwise =
- maybe
- (Left
- (TransitionKernelImportIndexOutOfBounds
- index))
- Right
- (imports Vector.!? fromIntegral naturalIndex)
- where
- naturalIndex =
- importIxValue index
-
-authorizeUsedImport
- :: Vector TransitionDerivationImport
- -> TransitionModuleBuilder
- -> ImportIx
- -> Either
- TransitionModuleError
- TypedTrustDependencies
-authorizeUsedImport imports builder index = do
- TransitionDerivationImport reference judgment <-
- transitionImportAt imports index
- case reference of
- TransitionLegacyFactRef{} ->
- Left
- (TransitionDependencyNotMigrated
- reference)
- TransitionTypedFactRef _typedReference -> do
- TransitionFactEntry fact _registration <-
- maybe
- (Left
- (TransitionKernelImportNotVisible
- reference))
- Right
- (lookupBuilderFact reference builder)
- case fact of
- LegacyFactRow{} ->
- Left
- (TransitionDependencyNotMigrated
- reference)
- TypedFactRow rowReference admitted -> do
- unless
- (rowReference == reference
- && typedAdmittedStatement admitted
- == derivationImportStatement
- judgment)
- (Left
- (TransitionKernelImportDoesNotMatch
- reference))
- pure
- (typedAdmittedTrustDependencies
- admitted)
-
-builderVisibleFacts
- :: TransitionModuleBuilder
- -> Vector TransitionFactEntry
-builderVisibleFacts =
- Vector.fromList
- . toList
- . inventoryFactOrder
- . builderFactInventory
-
-lookupBuilderFact
- :: TransitionFactRef
- -> TransitionModuleBuilder
- -> Maybe TransitionFactEntry
-lookupBuilderFact reference =
- Map.lookup reference
- . inventoryFactsByReference
- . builderFactInventory
-
-data TransitionFactRegistration = TransitionFactRegistration
- !(NonEmpty Marker)
- !Origin
- deriving stock (Eq)
-
-data TransitionFactEntry = TransitionFactEntry
- !AdmittedFact
- !TransitionFactRegistration
- deriving stock (Eq)
-
-data TransitionFactInventory = TransitionFactInventory
- { inventoryFactsByReference
- :: !(Map TransitionFactRef TransitionFactEntry)
- , inventoryAliases
- :: !(Map Marker (TransitionFactRef, Origin))
- , inventoryFactOrder :: !(Seq TransitionFactEntry)
- , inventoryFofOrder :: !(Seq TransitionFactRef)
- }
-
-emptyTransitionFactInventory :: TransitionFactInventory
-emptyTransitionFactInventory =
- TransitionFactInventory
- { inventoryFactsByReference = Map.empty
- , inventoryAliases = Map.empty
- , inventoryFactOrder = Seq.empty
- , inventoryFofOrder = Seq.empty
- }
-
-insertTransitionFactEntry
- :: TransitionFactEntry
- -> TransitionFactInventory
- -> Either TransitionModuleError TransitionFactInventory
-insertTransitionFactEntry
- entry@(TransitionFactEntry
- fact
- (TransitionFactRegistration
- aliases
- factOrigin))
- inventory =
- case Map.lookup
- reference
- (inventoryFactsByReference inventory) of
- Just previous
- | previous == entry ->
- Right inventory
- | otherwise ->
- Left
- (TransitionFactReferenceConflict
- reference)
- Nothing -> do
- aliases' <-
- insertFactAliases
- reference
- factOrigin
- aliases
- (inventoryAliases inventory)
- pure
- inventory
- { inventoryFactsByReference =
- Map.insert
- reference
- entry
- (inventoryFactsByReference
- inventory)
- , inventoryAliases = aliases'
- , inventoryFactOrder =
- inventoryFactOrder inventory
- Seq.|> entry
- , inventoryFofOrder =
- case typedFofReference fact of
- Nothing ->
- inventoryFofOrder inventory
- Just fofReference ->
- inventoryFofOrder inventory
- Seq.|> fofReference
- }
- where
- reference =
- admittedFactReference fact
-
- typedFofReference = \case
- LegacyFactRow{} ->
- Nothing
- TypedFactRow rowReference
- (TypedAdmittedFact
- semantic
- _authorization) ->
- case typedSemanticFofCapability semantic of
- Backend.FofProjectable{} ->
- Just rowReference
- Backend.RequiresTh0{} ->
- Nothing
-
-data TypedGlobalBinding = TypedGlobalBinding
- !Symbol
- !CheckedGlobalRef
- !Origin
- !(Maybe (FrozenCheckedCore CheckedGlobalRef))
- deriving stock (Eq)
-
-instance Show TypedGlobalBinding where
- show
- (TypedGlobalBinding
- symbol
- reference
- bindingOrigin
- body) =
- "TypedGlobalBinding "
- <> show symbol
- <> " "
- <> show reference
- <> " "
- <> show bindingOrigin
- <> if isJust body
- then " Transparent"
- else " Opaque"
-
-data TypedModuleEnvironmentDelta =
- TypedModuleEnvironmentDelta
- !ModuleName
- !(Vector TypedGlobalBinding)
- deriving stock (Show, Eq)
-
-data TransitionModuleBuilder = TransitionModuleBuilder
- { builderFoundation :: !CheckedFoundation
- , builderName :: !ModuleName
- , builderLegacyStage :: !LegacyModuleStage
- , builderEnvironmentDeltas
- :: !(Vector TypedModuleEnvironmentDelta)
- , builderGlobals :: !(Map Symbol TypedGlobalBinding)
- , builderGlobalDeclarations
- :: !(Map OpaqueDeclarationRef TypedGlobalBinding)
- , builderLocalGlobalsReversed :: ![TypedGlobalBinding]
- , builderFactInventory :: !TransitionFactInventory
- , builderLocalFactsReversed :: ![TransitionFactEntry]
- , builderTypedDirectAxiomManifestReversed
- :: ![TypedDirectAxiomManifestEntry]
- , builderNextTypedFact :: !Natural
- , builderNextTypedAssumption :: !Natural
- , builderNextDeclaration :: !Natural
- , builderCurrentDeclaration
- :: !(Maybe OpaqueDeclarationRef)
- }
-
-openTransitionModuleBuilder
- :: CheckedFoundation
- -> LegacyCheckingEnvironment
- -> LegacyModuleAssignment
- -> [TransitionAdmittedModule]
- -> Either TransitionModuleError TransitionModuleBuilder
-openTransitionModuleBuilder
- checkedFoundationValue
- foundation
- assignment
- directImports =
- checkedFoundationValue `seq` do
- importedView <-
- first TransitionLegacyModuleError
- (legacyImportedView
- foundation
- (transitionAdmittedLegacyModule <$> directImports))
- (environmentDeltas, globals, globalDeclarations) <-
- mergeTypedEnvironments directImports
- factInventory <-
- mergeTransitionFacts directImports
- let address =
- legacyStageSourceAddress legacyStage
- name =
- moduleName address
- legacyStage =
- openLegacyModuleStage assignment importedView
- pure
- TransitionModuleBuilder
- { builderFoundation =
- checkedFoundationValue
- , builderName = name
- , builderLegacyStage = legacyStage
- , builderEnvironmentDeltas =
- environmentDeltas
- , builderGlobals = globals
- , builderGlobalDeclarations =
- globalDeclarations
- , builderLocalGlobalsReversed = []
- , builderFactInventory = factInventory
- , builderLocalFactsReversed = []
- , builderTypedDirectAxiomManifestReversed = []
- , builderNextTypedFact = 0
- , builderNextTypedAssumption = 0
- , builderNextDeclaration = 0
- , builderCurrentDeclaration = Nothing
- }
-
-transitionBuilderLegacyStage
- :: TransitionModuleBuilder
- -> LegacyModuleStage
-transitionBuilderLegacyStage
- builder =
- builderLegacyStage builder
-
-transitionBuilderImportedCheckingEnvironment
- :: TransitionModuleBuilder
- -> LegacyCheckingEnvironment
-transitionBuilderImportedCheckingEnvironment =
- legacyStageImportedCheckingEnvironment
- . transitionBuilderLegacyStage
-
-transitionBuilderFoundation
- :: TransitionModuleBuilder
- -> CheckedFoundation
-transitionBuilderFoundation =
- builderFoundation
-
-builderGlobalType
- :: TransitionModuleBuilder
- -> CheckedGlobalRef
- -> Maybe CoreType
-builderGlobalType builder reference =
- case Map.lookup
- (checkedGlobalReference reference)
- (builderGlobalDeclarations builder) of
- Just
- (TypedGlobalBinding
- _symbol
- authoritative
- _origin
- _body)
- | checkedGlobalType reference
- == checkedGlobalType authoritative ->
- Just (checkedGlobalType authoritative)
- _ ->
- Nothing
-
-validateBuilderGlobalReference
- :: TransitionModuleBuilder
- -> CheckedGlobalRef
- -> Either TransitionModuleError CoreType
-validateBuilderGlobalReference builder reference =
- case Map.lookup
- (checkedGlobalReference reference)
- (builderGlobalDeclarations builder) of
- Nothing ->
- Left
- (TransitionGlobalReferenceNotVisible
- reference)
- Just
- (TypedGlobalBinding
- _symbol
- authoritative
- _origin
- _body)
- | checkedGlobalType reference
- == checkedGlobalType authoritative ->
- Right (checkedGlobalType authoritative)
- | otherwise ->
- Left
- (TransitionGlobalReferenceTypeMismatch
- reference
- (checkedGlobalType authoritative))
-
-validateBuilderCanonicalGlobals
- :: TransitionModuleBuilder
- -> CanonicalTerm CheckedGlobalRef
- -> Either TransitionModuleError ()
-validateBuilderCanonicalGlobals builder =
- traverse_
- (void . validateBuilderGlobalReference builder)
- . Set.toAscList
- . canonicalTermGlobals
-
-recheckBuilderFrozenCore
- :: TransitionModuleBuilder
- -> FrozenCheckedCore CheckedGlobalRef
- -> Either
- TransitionModuleError
- (FrozenCheckedCore CheckedGlobalRef)
-recheckBuilderFrozenCore builder supplied = do
- validateBuilderCanonicalGlobals
- builder
- (frozenCoreTerm supplied)
- first TransitionCoreCheckError
- (checkCanonicalCore
- (builderGlobalType builder)
- (frozenCoreTerm supplied))
-
-data GlobalPremisePolicy
- = ImplicitFofFacts
- | ExplicitFacts !(NonEmpty Marker)
- | NoGlobalFacts
- deriving stock (Show, Eq)
-
-planTransitionTypedProblem
- :: Ord local
- => TransitionModuleBuilder
- -> Backend.SupportedProposition
- local
- CheckedGlobalRef
- -> [ Backend.TypedLocalPremise
- local
- Origin
- CheckedGlobalRef
- ]
- -> [ Backend.TypedFoundationAuxiliaryInput
- CheckedGlobalRef
- ]
- -> GlobalPremisePolicy
- -> Backend.LocalPremisePolicy
- -> Either
- (TransitionTypedProblemError local)
- (Backend.TypedProblem
- TransitionFactRef
- local
- Origin
- CheckedGlobalRef)
-planTransitionTypedProblem
- builder
- claim
- localPremises
- auxiliaries
- globalPolicy
- localPolicy = do
- first TransitionTypedProblemGlobalValidationError
- (do
- validateBuilderCanonicalGlobals
- builder
- (Backend.supportedPropositionTerm claim)
- traverse_
- ( validateBuilderCanonicalGlobals builder
- . Backend.supportedPropositionTerm
- . Backend.typedLocalPremiseProposition
- )
- localPremises)
- (selectedFacts, premiseMode) <-
- selectTransitionBackendFacts
- builder
- globalPolicy
- first TransitionTypedProblemPlanningError
- (Backend.planTypedProblem
- (builderGlobalType builder)
- selectedFacts
- claim
- localPremises
- auxiliaries
- premiseMode
- localPolicy)
-
-selectTransitionBackendFacts
- :: TransitionModuleBuilder
- -> GlobalPremisePolicy
- -> Either
- (TransitionTypedProblemError local)
- ( Vector
- (Backend.TypedBackendFact
- TransitionFactRef
- CheckedGlobalRef)
- , Backend.GlobalPremiseMode
- )
-selectTransitionBackendFacts builder policy = do
- references <-
- case policy of
- ImplicitFofFacts ->
- Right
- (toList
- (inventoryFofOrder inventory))
- ExplicitFacts aliases ->
- stableUnique
- <$> traverse resolveAlias (toList aliases)
- NoGlobalFacts ->
- Right []
- facts <-
- Vector.fromList
- <$> traverse resolveFact references
- pure
- ( facts
- , case policy of
- ImplicitFofFacts ->
- Backend.ImplicitFofPremises
- ExplicitFacts{} ->
- Backend.ExplicitGlobalPremises
- NoGlobalFacts ->
- Backend.NoGlobalPremises
- )
- where
- inventory =
- builderFactInventory builder
-
- resolveAlias alias =
- case Map.lookup alias (inventoryAliases inventory) of
- Nothing ->
- Left
- (TransitionTypedProblemUnknownFactAlias
- alias)
- Just (reference, _origin) ->
- Right reference
-
- resolveFact reference =
- case Map.lookup
- reference
- (inventoryFactsByReference inventory) of
- Nothing ->
- Left
- (TransitionTypedProblemFactReferenceMissing
- reference)
- Just (TransitionFactEntry LegacyFactRow{} _registration) ->
- Left
- (TransitionTypedProblemDependencyNotMigrated
- reference)
- Just
- (TransitionFactEntry
- (TypedFactRow rowReference
- (TypedAdmittedFact
- semantic
- _authorization))
- _registration)
- | rowReference == reference ->
- Right
- (Backend.typedBackendFact
- reference
- (typedSemanticProposition semantic)
- (typedSemanticFofCapability semantic))
- | otherwise ->
- Left
- (TransitionTypedProblemFactReferenceMissing
- reference)
-
- stableUnique =
- reverse . snd
- . foldl'
- (\(seen, reversed) reference ->
- if reference `Set.member` seen
- then (seen, reversed)
- else
- ( Set.insert reference seen
- , reference : reversed
- ))
- (Set.empty, [])
-
-data TransitionTypedProblemError local
- = TransitionTypedProblemGlobalValidationError
- !TransitionModuleError
- | TransitionTypedProblemUnknownFactAlias
- !Marker
- | TransitionTypedProblemDependencyNotMigrated
- !TransitionFactRef
- | TransitionTypedProblemFactReferenceMissing
- !TransitionFactRef
- | TransitionTypedProblemPlanningError
- !(Backend.TypedProblemError
- local
- CheckedGlobalRef)
- deriving stock (Show, Eq)
-
-beginTransitionDeclaration
- :: TransitionModuleBuilder
- -> TransitionModuleBuilder
-beginTransitionDeclaration
- builder =
- builder
- { builderNextDeclaration =
- nextDeclaration + 1
- , builderCurrentDeclaration =
- Just
- (OpaqueDeclarationRef
- (builderName builder)
- (localDeclarationOrdinal
- nextDeclaration))
- }
- where
- nextDeclaration =
- builderNextDeclaration builder
-
-transitionCurrentDeclarationReference
- :: TransitionModuleBuilder
- -> Maybe OpaqueDeclarationRef
-transitionCurrentDeclarationReference
- builder =
- builderCurrentDeclaration builder
-
-commitTransitionOpaqueGlobal
- :: Symbol
- -> CoreType
- -> Origin
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionOpaqueGlobal
- symbol
- coreType
- bindingOrigin
- builder =
- commitTransitionGlobal
- symbol
- coreType
- bindingOrigin
- Nothing
- builder
-
-commitTransitionTransparentGlobal
- :: Symbol
- -> CoreType
- -> FrozenCheckedCore CheckedGlobalRef
- -> Origin
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionTransparentGlobal
- symbol
- coreType
- body
- bindingOrigin
- builder = do
- checkedBody <-
- recheckBuilderFrozenCore builder body
- unless
- (frozenCoreType checkedBody == coreType)
- (Left
- (TransitionTransparentGlobalTypeMismatch
- symbol
- coreType
- (frozenCoreType checkedBody)))
- commitTransitionGlobal
- symbol
- coreType
- bindingOrigin
- (Just checkedBody)
- builder
-
-commitTransitionGlobal
- :: Symbol
- -> CoreType
- -> Origin
- -> Maybe (FrozenCheckedCore CheckedGlobalRef)
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionGlobal
- symbol
- coreType
- bindingOrigin
- body
- builder =
- case transitionCurrentDeclarationReference builder of
- Nothing ->
- Left TransitionDeclarationNotOpen
- Just reference -> do
- let binding =
- TypedGlobalBinding
- symbol
- (CheckedOpaqueGlobal
- reference
- coreType)
- bindingOrigin
- body
- case Map.lookup symbol
- (builderGlobals builder) of
- Just previous ->
- Left
- (globalSymbolConflict
- previous
- binding)
- Nothing ->
- pure ()
- case Map.lookup reference
- (builderGlobalDeclarations builder) of
- Just previous ->
- Left
- (globalReferenceConflict
- previous
- binding)
- Nothing ->
- pure ()
- (globals, declarations) <-
- insertVisibleGlobalBinding
- ( builderGlobals builder
- , builderGlobalDeclarations builder
- )
- binding
- Right
- builder
- { builderGlobals = globals
- , builderGlobalDeclarations =
- declarations
- , builderLocalGlobalsReversed =
- binding
- : builderLocalGlobalsReversed
- builder
- }
-
-insertTransitionTypedFact
- :: NonEmpty Marker
- -> Origin
- -> TypedAdmittedFact
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-insertTransitionTypedFact aliases factOrigin admitted builder = do
- factReference <-
- nextTransitionTypedFactReference builder
- let ordinal =
- builderNextTypedFact builder
- reference =
- TransitionTypedFactRef
- factReference
- registration =
- TransitionFactRegistration
- aliases
- factOrigin
- entry =
- TransitionFactEntry
- (TypedFactRow reference admitted)
- registration
- inventory' <-
- insertTransitionFactEntry
- entry
- (builderFactInventory builder)
- Right
- builder
- { builderLocalFactsReversed =
- entry
- : builderLocalFactsReversed
- builder
- , builderFactInventory = inventory'
- , builderNextTypedFact = ordinal + 1
- }
-
-commitTransitionTypedVampireFact
- :: BackendReconstruction.ReconstructionPolicy
- -> NonEmpty Marker
- -> Origin
- -> FrozenCheckedCore CheckedGlobalRef
- -> Provers.PreparedTypedProverTask
- TransitionFactRef
- Void
- inputOrigin
- CheckedGlobalRef
- -> Provers.AcceptedVampireRun
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionTypedVampireFact
- reconstructionPolicy
- aliases
- factOrigin
- target
- preparedTask
- accepted
- builder = do
- semantic <-
- prepareTypedSemanticFact builder target
- let checkedTarget =
- typedSemanticStatement semantic
- let problem =
- Provers.preparedTypedProverLogicalProblem
- preparedTask
- claim =
- Backend.typedProblemClaim problem
- unless
- ( Vector.null
- (Backend.supportedPropositionSupport
- claim)
- && Backend.supportedPropositionTerm claim
- == frozenCoreTerm checkedTarget
- )
- (Left TransitionTypedVampireTargetMismatch)
- unless
- (Provers.acceptedVampireRequest accepted
- == Provers.preparedTypedProverRequest
- preparedTask)
- (Left TransitionTypedVampireRequestMismatch)
- unless
- (Vector.null
- (Backend.typedProblemLocalPremises
- problem))
- (Left TransitionTypedVampireHasOpenLocalPremises)
- traverse_
- validateGlobalType
- (Map.toList
- (Backend.typedProblemGlobalTypes
- problem))
- validatedPremises <-
- traverse
- validateSelectedFact
- (Backend.typedProblemGlobalPremises
- problem)
- foundationTrust <-
- foldM
- (\tags auxiliary ->
- (tags <>)
- <$> validateFoundationAuxiliary
- auxiliary)
- mempty
- (Backend.typedProblemAuxiliaries
- problem)
- let imports =
- fst <$> validatedPremises
- premiseTrust =
- foldMap snd validatedPremises
- case BackendReconstruction.attemptVampireReconstruction
- reconstructionPolicy
- preparedTask
- accepted of
- BackendReconstruction.ReconstructionSucceeded
- reconstructed ->
- commitReconstructed
- reconstructionPolicy
- semantic
- premiseTrust
- foundationTrust
- imports
- checkedTarget
- reconstructed
- BackendReconstruction.ReconstructionUnsupported
- unsupported ->
- commitTrusted
- semantic
- premiseTrust
- foundationTrust
- (ReconstructionFallbackUnsupported
- unsupported)
- BackendReconstruction.ReconstructionUnavailable
- searchStats ->
- commitTrusted
- semantic
- premiseTrust
- foundationTrust
- (ReconstructionFallbackUnavailable
- searchStats)
- BackendReconstruction.ReconstructionExhausted
- exhaustion
- searchStats ->
- commitTrusted
- semantic
- premiseTrust
- foundationTrust
- (ReconstructionFallbackSearchExhausted
- exhaustion
- searchStats)
- BackendReconstruction.ReconstructionDefinitiveMismatch
- mismatch ->
- Left
- (TransitionTypedReconstructionMismatch
- mismatch)
- where
- commitReconstructed
- policy
- semantic
- premiseTrust
- foundationTrust
- imports
- checkedTarget
- reconstructed = do
- let connectionReplay =
- BackendReconstruction.reconstructedConnectionReplay
- reconstructed
- provenance =
- SessionTypedReconstructionProvenance
- policy
- (Provers.preparedTypedProverTptpProblem
- (BackendReconstruction.reconstructedPreparedTask
- reconstructed))
- (BackendReconstruction.reconstructedAcceptedRun
- reconstructed)
- (BackendReconstruction.reconstructedConnectionTrace
- reconstructed)
- (BackendReconstruction.reconstructedSearchStats
- reconstructed)
- (BackendConnection.replayedConnectionNodeCount
- connectionReplay)
- (BackendConnection.replayedConnectionMaximumDepth
- connectionReplay)
- case authorizeTransitionKernelFactWithImportsAndProvenance
- (BackendReconstruction.reconstructionPolicyKernelReplayLimits
- policy)
- (Just provenance)
- imports
- checkedTarget
- (BackendConnection.replayedConnectionDerivation
- connectionReplay)
- builder of
- Left
- (TransitionKernelReplayError replayError)
- | isKernelReplayExhaustion replayError ->
- commitTrusted
- semantic
- premiseTrust
- foundationTrust
- (ReconstructionFallbackKernelReplayExhausted
- replayError)
- Left transitionError ->
- Left transitionError
- Right admitted ->
- insertTransitionTypedFact
- aliases
- factOrigin
- admitted
- builder
-
- commitTrusted
- semantic
- premiseTrust
- foundationTrust
- fallbackReason = do
- factReference <-
- nextTransitionTypedFactReference builder
- let trust =
- premiseTrust
- <> mempty
- { typedTrustedVampireUses =
- Set.singleton
- (SessionTypedTrustedVampireUse
- factReference)
- , typedVampireLoweringUses =
- mandatoryVampireLoweringAssumptions
- , typedFoundationUses =
- foundationTrust
- }
- admitted =
- TypedAdmittedFact
- semantic
- (TrustedVampire
- (SessionTypedTrustedVampireEvidence
- factReference
- (typedSemanticStatement semantic)
- (Provers.preparedTypedProverTptpProblem
- preparedTask)
- accepted
- trust
- (SessionTypedReconstructionFallback
- reconstructionPolicy
- fallbackReason)))
- insertTransitionTypedFact
- aliases
- factOrigin
- admitted
- builder
-
- isKernelReplayExhaustion = \case
- KernelReplayNodeLimitExceeded{} ->
- True
- KernelReplayDepthLimitExceeded{} ->
- True
- _ ->
- False
-
- validateGlobalType (global, reportedType) = do
- authoritativeType <-
- validateBuilderGlobalReference
- builder
- global
- unless
- (authoritativeType == reportedType)
- (Left
- (TransitionTypedVampireGlobalTypeMismatch
- global
- reportedType))
-
- validateSelectedFact selected =
- case lookupBuilderFact reference builder of
- Nothing ->
- Left
- (TransitionTypedVampireFactNotVisible
- reference)
- Just
- (TransitionFactEntry
- LegacyFactRow{}
- _registration) ->
- Left
- (TransitionDependencyNotMigrated
- reference)
- Just
- (TransitionFactEntry
- (TypedFactRow
- rowReference
- admitted)
- _registration) -> do
- semantic <-
- prepareTypedSemanticFact
- builder
- (typedAdmittedStatement
- admitted)
- let selectedProposition =
- Backend.typedBackendFactProposition
- selected
- selectedCapability =
- Backend.typedBackendFactCapability
- selected
- unless
- ( rowReference == reference
- && frozenCoreTerm
- (typedSemanticStatement
- semantic)
- == Backend.supportedPropositionTerm
- selectedProposition
- && typedSemanticFofCapability
- semantic
- == selectedCapability
- )
- (Left
- (TransitionTypedVampireFactMismatch
- reference))
- typedImport <-
- transitionDerivationImport
- reference
- (typedSemanticStatement
- semantic)
- pure
- ( typedImport
- , typedAdmittedTrustDependencies
- admitted
- )
- where
- reference =
- Backend.typedBackendFactReference
- selected
-
- validateFoundationAuxiliary auxiliary = do
- let tag =
- Backend.typedProblemAuxiliaryTag
- auxiliary
- actual =
- Backend.supportedPropositionTerm
- (Backend.typedProblemAuxiliaryProposition
- auxiliary)
- expected =
- frozenCoreTerm
- (mapFrozenGlobals
- absurd
- (foundationAxiomFrozen
- (builderFoundation builder)
- tag))
- unless
- (actual == expected)
- (Left
- (TransitionTypedVampireFoundationMismatch
- tag))
- pure (Set.singleton tag)
-
-nextTransitionTypedFactReference
- :: TransitionModuleBuilder
- -> Either TransitionModuleError FactRef
-nextTransitionTypedFactReference builder = do
- void
- (maybe
- (Left TransitionDeclarationNotOpen)
- Right
- (transitionCurrentDeclarationReference builder))
- let ordinal =
- builderNextTypedFact builder
- pure
- (FactRef
- (builderName builder)
- (localFactOrdinal ordinal))
-
-commitTransitionTypedDeclaredAssumption
- :: NonEmpty Marker
- -> Origin
- -> AssumptionKind
- -> FrozenCheckedCore CheckedGlobalRef
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-commitTransitionTypedDeclaredAssumption
- aliases
- factOrigin
- kind
- statement
- builder = do
- semantic <-
- prepareTypedSemanticFact builder statement
- factReference <-
- nextTransitionTypedFactReference builder
- let checkedStatement =
- typedSemanticStatement semantic
- assumptionOrdinal =
- LocalAssumptionOrdinal
- (builderNextTypedAssumption builder)
- manifestEntry =
- TypedDirectAxiomManifestEntry
- factReference
- kind
- checkedStatement
- sessionReference =
- SessionTypedDeclaredAssumptionRef
- factReference
- assumptionOrdinal
- kind
- checkedStatement
- admitted =
- TypedAdmittedFact
- semantic
- (DeclaredAssumption
- sessionReference)
- builder' <-
- insertTransitionTypedFact
- aliases
- factOrigin
- admitted
- builder
- pure
- builder'
- { builderTypedDirectAxiomManifestReversed =
- manifestEntry
- : builderTypedDirectAxiomManifestReversed
- builder'
- , builderNextTypedAssumption =
- builderNextTypedAssumption builder + 1
- }
-
-transitionBuilderWithLegacyStage
- :: LegacyModuleStage
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionModuleBuilder
-transitionBuilderWithLegacyStage newStage builder
- | legacyStageSourceAddress newStage
- /= legacyStageSourceAddress
- (builderLegacyStage builder) =
- Left TransitionLegacyStageAddressMismatch
- | Vector.take oldCount newFacts /= oldFacts =
- Left TransitionLegacyStageIsNotAnExtension
- | otherwise = do
- (reversedFacts, inventory) <-
- foldM
- appendLegacyEntry
- ( builderLocalFactsReversed builder
- , builderFactInventory builder
- )
- (Vector.toList
- (Vector.drop oldCount newFacts))
- Right
- builder
- { builderLegacyStage = newStage
- , builderLocalFactsReversed =
- reversedFacts
- , builderFactInventory = inventory
- }
- where
- oldFacts =
- legacyStageLocalFacts
- (builderLegacyStage builder)
- oldCount =
- Vector.length oldFacts
- newFacts =
- legacyStageLocalFacts newStage
-
- appendLegacyEntry (reversedFacts, inventory) legacyEntry = do
- let staged =
- legacyFactEntryStagedFact legacyEntry
- reference =
- TransitionLegacyFactRef
- (legacyFactEntryReference
- legacyEntry)
- factOrigin =
- originFromLegacyStagedFact staged
- entry =
- TransitionFactEntry
- (LegacyFactRow
- reference
- (legacyFactEntryAdmittedFact
- legacyEntry))
- (TransitionFactRegistration
- (Facts.stagedFactAliases staged)
- factOrigin)
- inventory' <-
- insertTransitionFactEntry
- entry
- inventory
- pure (entry : reversedFacts, inventory')
-
-lookupTransitionGlobal
- :: Symbol
- -> TransitionModuleBuilder
- -> Maybe CheckedGlobalRef
-lookupTransitionGlobal symbol builder =
- bindingReference
- <$> Map.lookup symbol (builderGlobals builder)
- where
- bindingReference
- (TypedGlobalBinding
- _symbol
- reference
- _origin
- _body) =
- reference
-
-lookupTransitionGlobalBody
- :: Symbol
- -> TransitionModuleBuilder
- -> Maybe (FrozenCheckedCore CheckedGlobalRef)
-lookupTransitionGlobalBody symbol builder = do
- TypedGlobalBinding
- _bindingSymbol
- _reference
- _origin
- body <-
- Map.lookup symbol (builderGlobals builder)
- body
-
-
-data TransitionAdmittedModule = TransitionAdmittedModule
- { admittedName :: !ModuleName
- , admittedLegacyModule :: !LegacyAdmittedModule
- , admittedEnvironmentDeltas
- :: !(Vector TypedModuleEnvironmentDelta)
- , admittedLocalGlobals :: !(Vector TypedGlobalBinding)
- , admittedVisibleFacts :: !(Vector TransitionFactEntry)
- , admittedTypedDirectAxiomManifest
- :: !(Vector TypedDirectAxiomManifestEntry)
- }
-
-sealTransitionModule
- :: LegacyCheckingEnvironment
- -> TransitionModuleBuilder
- -> Either TransitionModuleError TransitionAdmittedModule
-sealTransitionModule finalEnvironment builder = do
- legacyAdmitted <-
- first TransitionLegacyModuleError
- (sealLegacyModuleStage
- finalEnvironment
- (builderLegacyStage builder))
- let localBindings =
- Vector.fromList
- (reverse
- (builderLocalGlobalsReversed
- builder))
- localDelta =
- TypedModuleEnvironmentDelta
- (builderName builder)
- localBindings
- localFacts =
- Vector.fromList
- (reverse
- (builderLocalFactsReversed
- builder))
- visibleFacts =
- builderVisibleFacts builder
- typedManifest =
- Vector.fromList
- (reverse
- (builderTypedDirectAxiomManifestReversed
- builder))
- actualLegacyReferences =
- [ reference
- | TransitionFactEntry
- (LegacyFactRow
- (TransitionLegacyFactRef reference)
- _admitted)
- _registration <-
- Vector.toList localFacts
- ]
- expectedLegacyReferences =
- legacyFactEntryReference
- <$> Vector.toList
- (legacyAdmittedLocalFacts
- legacyAdmitted)
- unless
- (actualLegacyReferences
- == expectedLegacyReferences)
- (Left TransitionLegacyFactOrderMismatch)
- validateTypedDirectAxiomManifest
- localFacts
- typedManifest
- pure
- TransitionAdmittedModule
- { admittedName = builderName builder
- , admittedLegacyModule = legacyAdmitted
- , admittedEnvironmentDeltas =
- Vector.snoc
- (builderEnvironmentDeltas builder)
- localDelta
- , admittedLocalGlobals = localBindings
- , admittedVisibleFacts = visibleFacts
- , admittedTypedDirectAxiomManifest =
- typedManifest
- }
-
-transitionAdmittedName
- :: TransitionAdmittedModule
- -> ModuleName
-transitionAdmittedName =
- admittedName
-
-transitionAdmittedLegacyModule
- :: TransitionAdmittedModule
- -> LegacyAdmittedModule
-transitionAdmittedLegacyModule =
- admittedLegacyModule
-
-transitionAdmittedFacts
- :: TransitionAdmittedModule
- -> Vector AdmittedFact
-transitionAdmittedFacts =
- fmap entryFact . admittedVisibleFacts
- where
- entryFact
- (TransitionFactEntry fact _registration) =
- fact
-
-transitionAdmittedKernelProofCount
- :: TransitionAdmittedModule
- -> Int
-transitionAdmittedKernelProofCount =
- Vector.length
- . Vector.filter admittedFactIsKernelProof
- . transitionAdmittedFacts
-
-transitionAdmittedTypedTrustedVampireCount
- :: TransitionAdmittedModule
- -> Int
-transitionAdmittedTypedTrustedVampireCount =
- Vector.length
- . Vector.filter admittedFactIsTrustedVampire
- . transitionAdmittedFacts
-
--- | Replay work retained by the admitted root module's visible fact closure.
-data TransitionReplayMeasurements =
- TransitionReplayMeasurements
- { transitionKernelReplayCount :: !Int
- , transitionKernelReplayNodeCount :: !Natural
- , transitionKernelReplayMaximumDepth :: !Natural
- , transitionReconstructionCount :: !Int
- , transitionReconstructionSearchWork :: !Natural
- , transitionReconstructionDerivedAtomCount :: !Natural
- , transitionReconstructionMaximumCandidateDepth :: !Natural
- , transitionConnectionReplayNodeCount :: !Natural
- , transitionConnectionReplayMaximumDepth :: !Natural
- }
- deriving stock (Show, Eq)
-
-transitionAdmittedReplayMeasurements
- :: TransitionAdmittedModule
- -> TransitionReplayMeasurements
-transitionAdmittedReplayMeasurements =
- Vector.foldl'
- combineReplayMeasurements
- emptyReplayMeasurements
- . transitionAdmittedFacts
-
-emptyReplayMeasurements :: TransitionReplayMeasurements
-emptyReplayMeasurements =
- TransitionReplayMeasurements
- { transitionKernelReplayCount = 0
- , transitionKernelReplayNodeCount = 0
- , transitionKernelReplayMaximumDepth = 0
- , transitionReconstructionCount = 0
- , transitionReconstructionSearchWork = 0
- , transitionReconstructionDerivedAtomCount = 0
- , transitionReconstructionMaximumCandidateDepth = 0
- , transitionConnectionReplayNodeCount = 0
- , transitionConnectionReplayMaximumDepth = 0
- }
-
-combineReplayMeasurements
- :: TransitionReplayMeasurements
- -> AdmittedFact
- -> TransitionReplayMeasurements
-combineReplayMeasurements measurements = \case
- LegacyFactRow{} ->
- measurements
- TypedFactRow _reference
- (TypedAdmittedFact _semantic authorization) ->
- case authorization of
- KernelProof
- (AuthorizedKernelReplay
- _target
- _imports
- _foundation
- _rules
- nodes
- depth
- provenance)
- _trust ->
- combineReconstructionMeasurements
- provenance
- measurements
- { transitionKernelReplayCount =
- transitionKernelReplayCount measurements
- + 1
- , transitionKernelReplayNodeCount =
- transitionKernelReplayNodeCount measurements
- + nodes
- , transitionKernelReplayMaximumDepth =
- max
- (transitionKernelReplayMaximumDepth
- measurements)
- depth
- }
- DeclaredAssumption{} ->
- measurements
- TrustedVampire{} ->
- measurements
-
-combineReconstructionMeasurements
- :: Maybe SessionTypedReconstructionProvenance
- -> TransitionReplayMeasurements
- -> TransitionReplayMeasurements
-combineReconstructionMeasurements Nothing measurements =
- measurements
-combineReconstructionMeasurements
- (Just
- (SessionTypedReconstructionProvenance
- _policy
- _prepared
- _accepted
- _trace
- searchStats
- replayNodes
- replayDepth))
- measurements =
- measurements
- { transitionReconstructionCount =
- transitionReconstructionCount measurements
- + 1
- , transitionReconstructionSearchWork =
- transitionReconstructionSearchWork measurements
- + BackendConnection.connectionSearchWork searchStats
- , transitionReconstructionDerivedAtomCount =
- transitionReconstructionDerivedAtomCount measurements
- + BackendConnection.connectionSearchDerivedAtomCount
- searchStats
- , transitionReconstructionMaximumCandidateDepth =
- max
- (transitionReconstructionMaximumCandidateDepth
- measurements)
- (BackendConnection.connectionSearchMaximumCandidateDepth
- searchStats)
- , transitionConnectionReplayNodeCount =
- transitionConnectionReplayNodeCount measurements
- + replayNodes
- , transitionConnectionReplayMaximumDepth =
- max
- (transitionConnectionReplayMaximumDepth
- measurements)
- replayDepth
- }
-
-transitionAdmittedTypedDirectAxiomManifest
- :: TransitionAdmittedModule
- -> Vector TypedDirectAxiomManifestEntry
-transitionAdmittedTypedDirectAxiomManifest =
- admittedTypedDirectAxiomManifest
-
-transitionAdmittedTypedTrustDependencies
- :: TransitionAdmittedModule
- -> TypedTrustDependencies
-transitionAdmittedTypedTrustDependencies =
- foldMap
- (fromMaybe mempty
- . admittedFactTypedTrustDependencies)
- . transitionAdmittedFacts
-
-transitionAdmittedGlobals
- :: TransitionAdmittedModule
- -> Vector (Symbol, CheckedGlobalRef, Origin)
-transitionAdmittedGlobals admitted =
- fmap
- (\(TypedGlobalBinding
- symbol
- reference
- bindingOrigin
- _body) ->
- (symbol, reference, bindingOrigin))
- (admittedLocalGlobals admitted)
-
-validateTypedDirectAxiomManifest
- :: Vector TransitionFactEntry
- -> Vector TypedDirectAxiomManifestEntry
- -> Either TransitionModuleError ()
-validateTypedDirectAxiomManifest localFacts manifest =
- unless
- (actual == expected)
- (Left TransitionTypedDirectAxiomManifestMismatch)
- where
- actual =
- [ ( reference
- , ordinal
- , kind
- , statement
- )
- | TransitionFactEntry
- (TypedFactRow
- (TransitionTypedFactRef reference)
- (TypedAdmittedFact
- semantic
- (DeclaredAssumption
- sessionReference)))
- _registration <-
- Vector.toList localFacts
- , let ordinal =
- sessionTypedAssumptionOrdinal
- sessionReference
- kind =
- sessionTypedAssumptionKind
- sessionReference
- statement =
- typedSemanticStatement semantic
- , sessionTypedAssumptionFact sessionReference
- == reference
- , sessionTypedAssumptionStatement sessionReference
- == statement
- ]
- expected =
- [ ( typedDirectAssumptionFact entry
- , LocalAssumptionOrdinal ordinal
- , typedDirectAssumptionKind entry
- , typedDirectAssumptionStatement entry
- )
- | (ordinal, entry) <-
- zip [0 ..] (Vector.toList manifest)
- ]
-
-insertVisibleGlobalBinding
- :: ( Map Symbol TypedGlobalBinding
- , Map OpaqueDeclarationRef TypedGlobalBinding
- )
- -> TypedGlobalBinding
- -> Either
- TransitionModuleError
- ( Map Symbol TypedGlobalBinding
- , Map OpaqueDeclarationRef TypedGlobalBinding
- )
-insertVisibleGlobalBinding
- (globals, declarations)
- binding@(TypedGlobalBinding
- symbol
- reference
- _bindingOrigin
- _body) = do
- globals' <-
- case Map.lookup symbol globals of
- Nothing ->
- Right (Map.insert symbol binding globals)
- Just previous@(TypedGlobalBinding
- _previousSymbol
- _previousReference
- _previousOrigin
- _previousBody)
- | previous == binding ->
- Right globals
- | otherwise ->
- Left
- (globalSymbolConflict
- previous
- binding)
- declarations' <-
- case Map.lookup declaration declarations of
- Nothing ->
- Right
- (Map.insert
- declaration
- binding
- declarations)
- Just previous
- | previous == binding ->
- Right declarations
- | otherwise ->
- Left
- (globalReferenceConflict
- previous
- binding)
- pure (globals', declarations')
- where
- declaration =
- checkedGlobalReference reference
-
-globalSymbolConflict
- :: TypedGlobalBinding
- -> TypedGlobalBinding
- -> TransitionModuleError
-globalSymbolConflict
- (TypedGlobalBinding
- previousSymbol
- previousReference
- previousOrigin
- _previousBody)
- (TypedGlobalBinding
- _incomingSymbol
- incomingReference
- incomingOrigin
- _incomingBody) =
- TransitionGlobalConflict
- previousSymbol
- previousReference
- previousOrigin
- incomingReference
- incomingOrigin
-
-globalReferenceConflict
- :: TypedGlobalBinding
- -> TypedGlobalBinding
- -> TransitionModuleError
-globalReferenceConflict
- (TypedGlobalBinding
- previousSymbol
- previousReference
- previousOrigin
- _previousBody)
- (TypedGlobalBinding
- incomingSymbol
- incomingReference
- incomingOrigin
- _incomingBody) =
- TransitionGlobalReferenceConflict
- (checkedGlobalReference incomingReference)
- previousSymbol
- (checkedGlobalType previousReference)
- previousOrigin
- incomingSymbol
- (checkedGlobalType incomingReference)
- incomingOrigin
-
-
-mergeTypedEnvironments
- :: [TransitionAdmittedModule]
- -> Either
- TransitionModuleError
- ( Vector TypedModuleEnvironmentDelta
- , Map Symbol TypedGlobalBinding
- , Map OpaqueDeclarationRef TypedGlobalBinding
- )
-mergeTypedEnvironments directImports = do
- (_deltasByModule, reversedDeltas) <-
- foldM
- importModule
- (Map.empty, [])
- directImports
- (globals, globalDeclarations) <-
- foldM
- applyDelta
- (Map.empty, Map.empty)
- (reverse reversedDeltas)
- pure
- ( Vector.fromList (reverse reversedDeltas)
- , globals
- , globalDeclarations
- )
- where
- importModule imported admitted =
- foldM
- importDelta
- imported
- (moduleEnvironmentDeltas admitted)
-
- moduleEnvironmentDeltas
- admitted =
- toList (admittedEnvironmentDeltas admitted)
-
- importDelta
- current@(byModule, reversedDeltas)
- delta@(TypedModuleEnvironmentDelta name _bindings) =
- case Map.lookup name byModule of
- Nothing ->
- Right
- ( Map.insert name delta byModule
- , delta : reversedDeltas
- )
- Just previous
- | previous == delta ->
- Right current
- | otherwise ->
- Left
- (TransitionImportedModuleConflict
- name)
-
- applyDelta environment
- (TypedModuleEnvironmentDelta _name bindings) =
- foldM insertVisibleGlobalBinding environment bindings
-
-mergeTransitionFacts
- :: [TransitionAdmittedModule]
- -> Either
- TransitionModuleError
- TransitionFactInventory
-mergeTransitionFacts =
- foldM importModule emptyTransitionFactInventory
- where
- importModule inventory admitted =
- foldM
- (flip insertTransitionFactEntry)
- inventory
- (Vector.toList
- (admittedVisibleFacts admitted))
-
-insertFactAliases
- :: TransitionFactRef
- -> Origin
- -> NonEmpty Marker
- -> Map Marker (TransitionFactRef, Origin)
- -> Either
- TransitionModuleError
- (Map Marker (TransitionFactRef, Origin))
-insertFactAliases reference factOrigin aliases initial =
- foldM insertAlias initial aliases
- where
- insertAlias current alias =
- case Map.lookup alias current of
- Nothing ->
- Right
- (Map.insert
- alias
- (reference, factOrigin)
- current)
- Just (previousReference, previousOrigin)
- | previousReference == reference ->
- Right current
- | otherwise ->
- Left
- (TransitionFactAliasConflict
- alias
- previousReference
- previousOrigin
- reference
- factOrigin)
-
-originFromLegacyStagedFact
- :: Facts.StagedFact
- -> Origin
-originFromLegacyStagedFact staged =
- Origin
- (Facts.factOriginLocation factOrigin)
- Nothing
- (Just (Facts.factOriginBlock factOrigin))
- where
- factOrigin =
- Facts.stagedFactOrigin staged
-
-
-data TransitionModuleError
- = TransitionLegacyModuleError
- !LegacyModuleStageError
- | TransitionLegacyStageAddressMismatch
- | TransitionLegacyStageIsNotAnExtension
- | TransitionLegacyFactOrderMismatch
- | TransitionDeclarationNotOpen
- | TransitionImportedModuleConflict
- !ModuleName
- | TransitionGlobalConflict
- !Symbol
- !CheckedGlobalRef
- !Origin
- !CheckedGlobalRef
- !Origin
- | TransitionGlobalReferenceConflict
- !OpaqueDeclarationRef
- !Symbol
- !CoreType
- !Origin
- !Symbol
- !CoreType
- !Origin
- | TransitionGlobalReferenceNotVisible
- !CheckedGlobalRef
- | TransitionGlobalReferenceTypeMismatch
- !CheckedGlobalRef
- !CoreType
- | TransitionCoreCheckError
- !CoreCheckError
- | TransitionTransparentGlobalTypeMismatch
- !Symbol
- !CoreType
- !CoreType
- | TransitionTypedFactIsNotProposition
- !CoreType
- | TransitionTypedFactSupportError
- !(Backend.SupportedPropositionError Void)
- | TransitionTypedFactClassificationError
- !(Backend.BackendClassificationError
- CheckedGlobalRef)
- | TransitionTypedVampireTargetMismatch
- | TransitionTypedVampireRequestMismatch
- | TransitionTypedVampireHasOpenLocalPremises
- | TransitionTypedVampireGlobalTypeMismatch
- !CheckedGlobalRef
- !CoreType
- | TransitionTypedVampireFactNotVisible
- !TransitionFactRef
- | TransitionTypedVampireFactMismatch
- !TransitionFactRef
- | TransitionTypedVampireFoundationMismatch
- !FoundationAxiomTag
- | TransitionTypedReconstructionMismatch
- !BackendReconstruction.ReconstructionMismatch
- | TransitionKernelTargetMismatch
- | TransitionKernelReplayError
- !KernelReplayError
- | TransitionDerivationImportError
- !DerivationImportError
- | TransitionKernelImportIndexOutOfBounds
- !ImportIx
- | TransitionKernelImportNotVisible
- !TransitionFactRef
- | TransitionKernelImportDoesNotMatch
- !TransitionFactRef
- | TransitionDependencyNotMigrated
- !TransitionFactRef
- | TransitionTypedDirectAxiomManifestMismatch
- | TransitionFactReferenceConflict
- !TransitionFactRef
- | TransitionFactAliasConflict
- !Marker
- !TransitionFactRef
- !Origin
- !TransitionFactRef
- !Origin
- deriving stock (Show, Eq)