@@ -529,7 +529,7 @@ processSchema (Traced t Schema{..}) = do
529529 TopFormula -> All True
530530 _ -> All False
531531 -- remove optional fields whose schemata match that of additional props
532− propMap = M.filter (\p -> propRequired p || not (propFormula p /= addProps)) $ M.fromList propList
532+ propMap = M.filter (\p -> propRequired p || propFormula p /= addProps) $ M.fromList propList
533533 propertiesClause
534534 | any (\p -> propRequired p && allBottom (propFormula p)) propMap
535535 = bottom -- if any required field has unsatisfiable schema
@@ -609,15 +609,18 @@ checkFormulas env tr (ProdCons (fp, ep) (fc, ec)) =
609609 -- shortcut of \/_j A[j] ⊂ ∅ hardly helps.
610610 forType_ $ \ty ->
611611 case (ty fp, ty fc) of
612− (DNF pss, BottomFormula) -> F.for_ pss $ \(Conjunct ps) -> checkContradiction ps
612+ (DNF pss, BottomFormula) -> F.for_ pss $ \(Conjunct ps) -> checkContradiction tr ps
613613 (DNF pss, SingleConjunct cs) -> F.for_ pss $ \(Conjunct ps) -> do
614614 F.for_ cs $ checkImplication env ps -- avoid disjuntion if there's only one conjunct
615615 (DNF pss, DNF css) -> F.for_ pss $ \(Conjunct ps) -> do
616616 anyOfM tr (SubtreeCheckIssue $ NoMatchingCondition $ SomeCondition . getTraced <$> ps)
617617 [F.for_ cs $ checkImplication env ps | Conjunct cs <- S.toList css]
618618
619−checkContradiction :: [Traced OpenApi (Condition t)] -> CompatFormula s ()
620−checkContradiction _ = pure () -- TODO
619+checkContradiction
620+ :: Trace OpenApi Schema
621+ -> [Traced OpenApi (Condition t)]
622+ -> CompatFormula s ()
623+checkContradiction tr _ = issueAtTrace tr NoContradiction -- TODO
621624
622625checkImplication
623626 :: (HasAll (CheckEnv Schema) xs, Typeable t)
@@ -759,6 +762,7 @@ instance Subtree Schema where
759762 = NotSupported Text
760763 | InvalidSchema Text
761764 | NoMatchingCondition [SomeCondition]
765+ | NoContradiction
762766 deriving stock (Eq, Ord, Show)
763767 type CheckEnv Schema = '[ProdCons (Definitions Schema)]
764768 checkCompatibility env schs = withTrace $ \traces -> do