{-# OPTIONS --cubical #-}
module SemanticExplanation.Industry.OWL where
open import Agda.Builtin.Equality using (_≡_ ; refl)
open import Agda.Builtin.List using ([] ; _∷_)
open import Agda.Builtin.Nat using (Nat)
open import Agda.Builtin.Reflection using (Name)
open import Agda.Primitive using (Set)
open import SemanticExplanation
import OWL2.DirectSemantics.Lemmas as OWLLemmas
data LicensedAircraftEngineer : Set where
exampleCertifyingEngineer : LicensedAircraftEngineer
data InspectionWorkOrder : Set where
exampleBorescopeWorkOrder : InspectionWorkOrder
data TurbofanEngineModule : Set where
exampleHighPressureCompressor : TurbofanEngineModule
data SerializedLifeLimitedPart : Set where
exampleCompressorDisk : SerializedLifeLimitedPart
data SignedOff
: LicensedAircraftEngineer → InspectionWorkOrder → Set where
signedOffEvidence : ∀ {certifyingEngineer workOrder} →
SignedOff certifyingEngineer workOrder
data CoversEngineModule
: InspectionWorkOrder → TurbofanEngineModule → Set where
coverageEvidence : ∀ {workOrder engineModule} →
CoversEngineModule workOrder engineModule
data HasTraceableInspection
: LicensedAircraftEngineer → TurbofanEngineModule → Set where
tracedThroughWorkOrder : ∀ {certifyingEngineer workOrder engineModule} →
SignedOff certifyingEngineer workOrder →
CoversEngineModule workOrder engineModule →
HasTraceableInspection certifyingEngineer engineModule
data EngineModuleLinkedToOrder
: TurbofanEngineModule → InspectionWorkOrder → Set where
orderLinkEvidence : ∀ {engineModule workOrder} →
EngineModuleLinkedToOrder engineModule workOrder
data IsConformingBorescopeInspection : InspectionWorkOrder → Set where
conformingInspectionEvidence : ∀ {workOrder} →
IsConformingBorescopeInspection workOrder
data HasRequiredBorescopeInspection : TurbofanEngineModule → Set where
qualifyingInspectionWitness : ∀ {engineModule workOrder} →
EngineModuleLinkedToOrder engineModule workOrder →
IsConformingBorescopeInspection workOrder →
HasRequiredBorescopeInspection engineModule
data HoldsModuleReleaseAuthorization
: LicensedAircraftEngineer → TurbofanEngineModule → Set where
releaseAuthorizationEvidence : ∀ {certifyingEngineer engineModule} →
HoldsModuleReleaseAuthorization certifyingEngineer engineModule
data EligibleToIssueReturnToServiceRelease
: LicensedAircraftEngineer → TurbofanEngineModule → Set where
releaseEligibilityEvidence : ∀ {certifyingEngineer engineModule} →
HasTraceableInspection certifyingEngineer engineModule →
HasRequiredBorescopeInspection engineModule →
HoldsModuleReleaseAuthorization certifyingEngineer engineModule →
EligibleToIssueReturnToServiceRelease certifyingEngineer engineModule
data IsRegisteredLifeLimitedPart : SerializedLifeLimitedPart → Set where
registeredPartEvidence : ∀ {part} → IsRegisteredLifeLimitedPart part
data SharesPartNumberAndSerial
: SerializedLifeLimitedPart → SerializedLifeLimitedPart → Set where
sharedAssetKeyEvidence : ∀ {left right} → SharesPartNumberAndSerial left right
data DenotesSameRegisteredAsset
: SerializedLifeLimitedPart → SerializedLifeLimitedPart → Set where
registeredAssetIdentity : ∀ {left right} →
IsRegisteredLifeLimitedPart left →
IsRegisteredLifeLimitedPart right →
SharesPartNumberAndSerial left right →
DenotesSameRegisteredAsset left right
maintenanceTraceFromSignedWorkOrder :
(certifyingEngineer : LicensedAircraftEngineer) →
(workOrder : InspectionWorkOrder) →
(engineModule : TurbofanEngineModule) →
SignedOff certifyingEngineer workOrder →
CoversEngineModule workOrder engineModule →
HasTraceableInspection certifyingEngineer engineModule
maintenanceTraceFromSignedWorkOrder certifyingEngineer workOrder engineModule signed coverage =
tracedThroughWorkOrder signed coverage
requiredInspectionFromConformingOrder :
(engineModule : TurbofanEngineModule) →
(workOrder : InspectionWorkOrder) →
EngineModuleLinkedToOrder engineModule workOrder →
IsConformingBorescopeInspection workOrder →
HasRequiredBorescopeInspection engineModule
requiredInspectionFromConformingOrder engineModule workOrder linked conforming =
qualifyingInspectionWitness linked conforming
moduleOrderLinkFromCoverage :
(workOrder : InspectionWorkOrder) →
(engineModule : TurbofanEngineModule) →
CoversEngineModule workOrder engineModule →
EngineModuleLinkedToOrder engineModule workOrder
moduleOrderLinkFromCoverage workOrder engineModule coverage = orderLinkEvidence
returnToServiceEligibility :
(certifyingEngineer : LicensedAircraftEngineer) →
(engineModule : TurbofanEngineModule) →
HasTraceableInspection certifyingEngineer engineModule →
HasRequiredBorescopeInspection engineModule →
HoldsModuleReleaseAuthorization certifyingEngineer engineModule →
EligibleToIssueReturnToServiceRelease certifyingEngineer engineModule
returnToServiceEligibility certifyingEngineer engineModule trace inspection authorization =
releaseEligibilityEvidence trace inspection authorization
returnToServiceFromMaintenanceRecord :
(certifyingEngineer : LicensedAircraftEngineer) →
(workOrder : InspectionWorkOrder) →
(engineModule : TurbofanEngineModule) →
SignedOff certifyingEngineer workOrder →
CoversEngineModule workOrder engineModule →
IsConformingBorescopeInspection workOrder →
HoldsModuleReleaseAuthorization certifyingEngineer engineModule →
EligibleToIssueReturnToServiceRelease certifyingEngineer engineModule
returnToServiceFromMaintenanceRecord certifyingEngineer workOrder engineModule
signed coverage conforming authorization =
returnToServiceEligibility certifyingEngineer engineModule
(maintenanceTraceFromSignedWorkOrder certifyingEngineer workOrder engineModule signed coverage)
(requiredInspectionFromConformingOrder engineModule workOrder
(moduleOrderLinkFromCoverage workOrder engineModule coverage) conforming)
authorization
lifeLimitedPartIdentityFromAssetKey :
(installedPart inventoryAlias : SerializedLifeLimitedPart) →
IsRegisteredLifeLimitedPart installedPart →
IsRegisteredLifeLimitedPart inventoryAlias →
SharesPartNumberAndSerial installedPart inventoryAlias →
DenotesSameRegisteredAsset installedPart inventoryAlias
lifeLimitedPartIdentityFromAssetKey installedPart inventoryAlias
installedRegistered aliasRegistered sharedKey =
registeredAssetIdentity installedRegistered aliasRegistered sharedKey
liveObjectPropertyChainRule : Name
liveObjectPropertyChainRule = quote OWLLemmas.objectPropertyChain₂Intro
liveExistentialRestrictionRule : Name
liveExistentialRestrictionRule = quote OWLLemmas.objectSomeIntro
liveHasKeyRule : Name
liveHasKeyRule = quote OWLLemmas.hasKeyApply
maintenanceTraceSource : Name
maintenanceTraceSource = quote maintenanceTraceFromSignedWorkOrder
requiredInspectionSource : Name
requiredInspectionSource = quote requiredInspectionFromConformingOrder
returnToServiceSource : Name
returnToServiceSource = quote returnToServiceEligibility
maintenanceReleaseCaseSource : Name
maintenanceReleaseCaseSource = quote returnToServiceFromMaintenanceRecord
lifeLimitedPartIdentitySource : Name
lifeLimitedPartIdentitySource = quote lifeLimitedPartIdentityFromAssetKey
aircraftMaintenanceFuel : Nat
aircraftMaintenanceFuel = 768
aircraftMaintenanceDomain : DomainSpec
aircraftMaintenanceDomain =
domain-spec
"ff-owl-aircraft-engine-mro-v1"
( entity-rule "mro.entity.engineer" (quote LicensedAircraftEngineer) []
"licensed aircraft engineer"
∷ entity-rule "mro.entity.work-order" (quote InspectionWorkOrder) []
"inspection work order"
∷ entity-rule "mro.entity.engine-module" (quote TurbofanEngineModule) []
"turbofan engine module"
∷ entity-rule "mro.entity.life-limited-part" (quote SerializedLifeLimitedPart) []
"serialized life-limited part"
∷ [] )
( predicate-rule "mro.property.signed-off" (quote SignedOff)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "signed off")
∷ predicate-rule "mro.property.covers-module" (quote CoversEngineModule)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "covers")
∷ predicate-rule "mro.property.traceable-inspection" (quote HasTraceableInspection)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "has a traceable inspection for")
∷ predicate-rule "mro.property.module-order-link" (quote EngineModuleLinkedToOrder)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "is linked in the maintenance system to")
∷ predicate-rule "mro.class.conforming-borescope" (quote IsConformingBorescopeInspection)
(semanticExpression ∷ [])
(unarySuffix "is a conforming borescope inspection")
∷ predicate-rule "mro.restriction.required-borescope" (quote HasRequiredBorescopeInspection)
(semanticExpression ∷ [])
(unarySuffix "has at least one conforming borescope inspection on record")
∷ predicate-rule "mro.property.release-authorization" (quote HoldsModuleReleaseAuthorization)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "holds release authorization for")
∷ predicate-rule "mro.decision.return-to-service" (quote EligibleToIssueReturnToServiceRelease)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "is eligible to issue a return-to-service release for")
∷ predicate-rule "mro.class.registered-life-limited-part" (quote IsRegisteredLifeLimitedPart)
(semanticExpression ∷ [])
(unarySuffix "is registered as a life-limited part")
∷ predicate-rule "mro.key.part-number-and-serial" (quote SharesPartNumberAndSerial)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "has the same part-number-and-serial key as")
∷ predicate-rule "mro.identity.registered-asset" (quote DenotesSameRegisteredAsset)
(semanticExpression ∷ semanticExpression ∷ [])
(binaryVerb "denotes the same registered maintenance asset as")
∷ [] )
[]
[]
[]
aircraftMaintenanceFuel
maintenanceTraceExplanation : Explanation
maintenanceTraceExplanation =
explainNameCompact aircraftMaintenanceDomain maintenanceTraceFromSignedWorkOrder
maintenanceTraceText :
Explanation.text maintenanceTraceExplanation ≡
"For every licensed aircraft engineer certifyingEngineer, every inspection work order workOrder, and every turbofan engine module engineModule, if certifyingEngineer signed off workOrder and workOrder covers engineModule, then certifyingEngineer has a traceable inspection for engineModule."
maintenanceTraceText = refl
requiredInspectionExplanation : Explanation
requiredInspectionExplanation =
explainNameCompact aircraftMaintenanceDomain requiredInspectionFromConformingOrder
requiredInspectionText :
Explanation.text requiredInspectionExplanation ≡
"For every turbofan engine module engineModule and every inspection work order workOrder, if engineModule is linked in the maintenance system to workOrder and workOrder is a conforming borescope inspection, then engineModule has at least one conforming borescope inspection on record."
requiredInspectionText = refl
returnToServiceExplanation : Explanation
returnToServiceExplanation =
explainNameCompact aircraftMaintenanceDomain returnToServiceEligibility
returnToServiceText :
Explanation.text returnToServiceExplanation ≡
"For every licensed aircraft engineer certifyingEngineer and every turbofan engine module engineModule, if certifyingEngineer has a traceable inspection for engineModule, engineModule has at least one conforming borescope inspection on record, and certifyingEngineer holds release authorization for engineModule, then certifyingEngineer is eligible to issue a return-to-service release for engineModule."
returnToServiceText = refl
maintenanceReleaseCaseExplanation : Explanation
maintenanceReleaseCaseExplanation =
explainNameCompact aircraftMaintenanceDomain returnToServiceFromMaintenanceRecord
maintenanceReleaseCaseText :
Explanation.text maintenanceReleaseCaseExplanation ≡
"For every licensed aircraft engineer certifyingEngineer, every inspection work order workOrder, and every turbofan engine module engineModule, if certifyingEngineer signed off workOrder, workOrder covers engineModule, workOrder is a conforming borescope inspection, and certifyingEngineer holds release authorization for engineModule, then certifyingEngineer is eligible to issue a return-to-service release for engineModule."
maintenanceReleaseCaseText = refl
lifeLimitedPartIdentityExplanation : Explanation
lifeLimitedPartIdentityExplanation =
explainNameCompact aircraftMaintenanceDomain lifeLimitedPartIdentityFromAssetKey
lifeLimitedPartIdentityText :
Explanation.text lifeLimitedPartIdentityExplanation ≡
"For every serialized life-limited part installedPart and every serialized life-limited part inventoryAlias, if installedPart is registered as a life-limited part, inventoryAlias is registered as a life-limited part, and installedPart has the same part-number-and-serial key as inventoryAlias, then installedPart denotes the same registered maintenance asset as inventoryAlias."
lifeLimitedPartIdentityText = refl
maintenanceTraceProvenance :
Explanation.provenance maintenanceTraceExplanation ≡
( ruleUsed "mro.entity.engineer"
∷ ruleUsed "mro.entity.work-order"
∷ ruleUsed "mro.entity.engine-module"
∷ ruleUsed "mro.property.signed-off"
∷ ruleUsed "mro.property.covers-module"
∷ ruleUsed "mro.property.traceable-inspection"
∷ [] )
maintenanceTraceProvenance = refl
maintenanceTraceCandidate :
Explanation.candidateId maintenanceTraceExplanation ≡ "compact/v1"
maintenanceTraceCandidate = refl
maintenanceTraceDomain :
Explanation.domainId maintenanceTraceExplanation ≡
"ff-owl-aircraft-engine-mro-v1"
maintenanceTraceDomain = refl