Skip to content

怀疑C++不能用于自动化定理证明 #1

@NanaGlutamate

Description

@NanaGlutamate

由于C++并不会检查requires是否在任何条件下都满足,而只会检查对于某个特定的实例化是否满足,C++可能并不能用来做自动定理证明。
例如,甚至可以证明任何自然数都是0:

template <Nat::isNat N>
struct EveryNumberIsZero : Prop {
    constexpr Eq<N, Nat::Zero>
        operator() () {
        using namespace Nat;
        using namespace Prover;

        return rfl<Nat::Zero>();
    }
};

int main() {
    auto proof = EveryNumberIsZero<Zero>()();
    return 0;
}

表面上看,EveryNumberIsZero确实能对任何一个自然数实例化一个Eq<N, Nat::Zero>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions