{-# OPTIONS --cubical #-}

module SemanticExplanation.OWLDirect where

open import Agda.Builtin.Equality using (_≡_ ; refl)
open import Agda.Builtin.List using ([] ; _∷_)
open import Agda.Primitive using (Level)
open import SemanticExplanation

import OWL2.Syntax as Syntax
import OWL2.DirectSemantics as Direct
import OWL2.DirectSemantics.Lemmas as Lemmas

owlDirectDomain : DomainSpec
owlDirectDomain =
  domain-spec
    "ff-owl-direct-v1"
    ( entity-rule "owl.entity.class-expression" (quote Syntax.ClassExpression)
        (infrastructureArgument ∷ infrastructureArgument ∷ []) "class"
    ∷ entity-rule "owl.entity.object" (quote Direct.ObjectDomain)
        ( infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument ∷ [] ) "object"
    ∷ [] )
    ( predicate-rule "owl.axiom.satisfied" (quote Direct.SatisfiesAxiom)
        ( infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument
        ∷ semanticExpression ∷ [] )
        (unarySuffix "is satisfied")
    ∷ predicate-rule "owl.class.membership" (quote Direct.evalClass)
        ( infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument
        ∷ infrastructureArgument ∷ infrastructureArgument
        ∷ semanticExpression ∷ semanticExpression ∷ [] )
        (binaryVerb "contains")
    ∷ [] )
    ( expression-rule "owl.axiom.subclass" (quote Syntax.Axiom.subClassOf)
        ( infrastructureArgument ∷ infrastructureArgument
        ∷ semanticExpression ∷ semanticExpression ∷ [] )
        (binaryForm "the axiom that class " " is a subclass of class " "")
    ∷ [] )
    ( infrastructure-rule "agda.level" (quote Level)
    ∷ infrastructure-rule "owl.signature" (quote Syntax.Signature)
    ∷ infrastructure-rule "owl.interpretation" (quote Direct.Interpretation)
    ∷ [] )
    []
    256

classSubsumptionDirect : Explanation
classSubsumptionDirect = explainName owlDirectDomain Lemmas.classSubsumption

classSubsumptionDirectText
  : Explanation.text classSubsumptionDirect
  ≡ "For every class c, for every class d, for every object x, if the axiom that class c is a subclass of class d is satisfied, then if c contains x, then d contains x."
classSubsumptionDirectText = refl

classSubsumptionCompact : Explanation
classSubsumptionCompact =
  explainNameCompact owlDirectDomain Lemmas.classSubsumption

classSubsumptionCompactText
  : Explanation.text classSubsumptionCompact
  ≡ "For every class c, every class d, and every object x, if the axiom that class c is a subclass of class d is satisfied and c contains x, then d contains x."
classSubsumptionCompactText = refl

subClassReflDirect : Explanation
subClassReflDirect = explainName owlDirectDomain Lemmas.subClassRefl

subClassReflDirectText
  : Explanation.text subClassReflDirect
  ≡ "For every class c, the axiom that class c is a subclass of class c is satisfied."
subClassReflDirectText = refl

subClassTransDirect : Explanation
subClassTransDirect = explainName owlDirectDomain Lemmas.subClassTrans

subClassTransDirectText
  : Explanation.text subClassTransDirect
  ≡ "For every class c, for every class d, for every class e, if the axiom that class c is a subclass of class d is satisfied, then if the axiom that class d is a subclass of class e is satisfied, then the axiom that class c is a subclass of class e is satisfied."
subClassTransDirectText = refl

subClassTransCompact : Explanation
subClassTransCompact = explainNameCompact owlDirectDomain Lemmas.subClassTrans

subClassTransCompactText
  : Explanation.text subClassTransCompact
  ≡ "For every class c, every class d, and every class e, if the axiom that class c is a subclass of class d is satisfied and the axiom that class d is a subclass of class e is satisfied, then the axiom that class c is a subclass of class e is satisfied."
subClassTransCompactText = refl