4

복합 사양 패턴의 많은 LINQ 기반 구현이 있습니다. 나는 Subsumption을 사용하는 것을 보지 못했습니다.포함을 구현하는 LINQ 기반 사양 패턴 확장

문서화 (블로그 등)되었거나 공개 소스로 게시 된 사례가 있습니까? ExpressionVisitor가 모든 사양을 정식 논리 형식 (CNF/DNF)으로 변환하도록함으로써 이것이 어떻게 작동 할 수 있는지에 대한 아이디어와 증명이 있습니다.하지만이 작업은 지나치게 복잡하다고 우려하고 있습니다. 더 좋은 방법이 있습니까?

+0

Linq의 조건부 조항을 의미합니까? –

답변

2

나는 이것이 너무 복잡하다고 우려하고 있습니다. 더 좋은 방법이 있습니까?

짧은 대답

1

긴 대답은 "아니,이없는"경우 : "지나치게 복잡한은"문제의 본질을 캡처 : 그것은 NP-어렵다.

  • 당신이 A이 모든 과제에 대해 동등하게 B, 또는 ¬A | B을 의미하는지 테스트해야 할 두 부울 식, AB
  • 을 가지고 있다고 가정하자 : 여기에 satisfiability problem is NP-complete는 사실에 의존 짧은 비공식 증거입니다 AB에 의존하는 변수. 즉, F = ¬A | B이 동등 함을 나타내는 이라는 증거가 필요합니다.
  • ¬F, F의 역 고려 동의어 반복 시험 다항식 시간에 수행 될 수 있다고 가정하자. 그리고 경우에만 ¬F가 동어 반복을
  • 대답을 주셔서 ¬F을 테스트하는 가상의 다항식 알고리듬 동어 반복
  • 사용하지 않은 경우 F는 "에 대한 대답의 역은"만족할 F이다 "만족할입니다 그러므로, 다항식 연상 검사기의 존재는 만족 가능성 문제가 P이고, 그 것이 P=NP임을 의미한다.

물론 NP-hard라는 사실은 실제 사례에 대한 해결책이 없다는 것을 의미하지는 않습니다. 사실, 표준 형식으로의 변환을 사용한 사용자의 접근 방식은 많은 실제 결과로 OK 결과를 생성 할 수 있습니다. 세계 상황. 그러나 알려진 "좋은"알고리즘이 없으면 실용적인 솔루션의 적극적인 개발을 종종 꺼리게됩니다 . 면책 조항 "P=NP하지 않는 한"의무와


1.

"합리적으로 좋은"해결책이없는 한 "잘못된 음수"를 허용하면 문제의 원인이 될 수 있습니다.

+0

+1, 질문 : 단어의 공식적인 논리 의미에서 동어 반복을 사용하고 있습니까, 아니면 비슷하지만 다르게 정의 된 정의가 CS입니까? 그것이 SC 문항의 빈 집합에서 파생 될 수 있다면 명제는 동어체라는 것을 이해합니다. 이것은 내가 도출하고자하는 것을 충분히 설명하지 못한다. 왜냐하면 나는 또한 광범위한 지식 - 기반/데이터베이스가 있기 때문이다. 또 다른 메모에서 문제는 어렵지만 이전에 효율적으로 해결되었습니다. 지금 당장 Prolog, Euler 및 Microsoft Solver Foundation을 살펴 보겠습니다. – smartcaveman

+0

@smartcaveman 나는 형식적인 논리의 의미에서 연대 측정 (tautology)을 사용하고있다 : 표현 A가 B를 포함한다는 것을 증명하기 위해, 당신은 A => B가 항상 참이라는 것을 보여줄 필요가있다. 구내 세트. 제가 언급 한 유일한 이유는 NP 완성으로 알려진 만족 가능성 문제에 도달하는 것이 었습니다. 단지'A => B'만이 동어 반복 (tautology)이어야한다는 것에주의하십시오; 개별 표현 인 'A'와 'B'는 비공개 세트의 전제를 기반으로 할 수 있으며 모든 사소한 경우에있을 수 있습니다. 그 설정이 커질수록 'A'로'B '를 포섭하는 것이 더 어렵습니다. – dasblinkenlight

+0

그래서 나는 이것을 좀 더 실제적으로 다루는 방법에 관해서 또 다른 생각을 가지고있었습니다. 순수한 재 작성 대신에 각 술어에 대해 반대 사각형 모델을 만들 수 있으며 모든 내 술어가 삼단 논법 형태로되어 있어야합니다. 이것은 복잡성을 완화시킬 수있는 것처럼 보입니다. 콘텐츠는 공식적인 표현이 아닌 정규화 될 것입니다. 도메인이 비즈니스 응용 프로그램이기 때문에 충분히 표현할 수있을 것 같습니다. 이견있는 사람? – smartcaveman