2017-03-14 1 views
2

Existe-t-il un moyen d'admettre s'affirme dans Coq?Coq: Admettre assertion

Supposons que j'ai un théorème comme ceci:

Theorem test : forall m n : nat, 
    m * n = n * m. 
Proof. 
    intros n m. 
    assert (H1: m + m * n = m * S n). { Admitted. } 
Abort. 

assert ci-dessus ne semble pas fonctionner pour moi.

L'erreur que je reçois est:

Error: No focused proof (No proof-editing in progress). 

Ce que je veux est quelque chose comme undefined dans Haskell. Baiscally, j'y reviendrai plus tard et je le prouverai. Y a-t-il quelque chose comme ça dans Coq pour y arriver?

+1

En général, la tactique «admettre» (première lettre minuscule) admet le sous-objectif actuel. Ainsi, affirmez votre affirmation. admettre. »ou« actif ; admettre. »devrait fonctionner dans votre cas. – ichistmeinname

+0

@ichistmeinname Merci, ça marche. Pouvez-vous poster cela comme une réponse? – Sibi

Répondre

3

En général, la tactique admit (première lettre minuscule) admet le sous-objectif courant. Ainsi assert <your assertion>. admit. devrait fonctionner dans votre cas.

Ou dans toute sa splendeur comme suit.

Theorem test : forall m n : nat, 
    m * n = n * m. 
Proof. 
    intros n m. 
    assert (H1: m + m * n = m * S n). admit. 
Abort. 

Edit: La version avec ; est un non-sens, parce que vous ne voulez pas admettre tous les sous-objectifs.

+3

Aussi, à partir de Coq 8.5 (je ne pense pas plus tôt), tout script de preuve avec 'admettre 'doit être terminé avec' Admitted.' au lieu de 'Qed.' /' Defined.' si vous voulez enregistrer le résultat . –

+1

@ AntalSpector-Zabusky Terminer avec 'Qed' fonctionne pour moi dans la version' 8.4pl4'. – Sibi

+4

Une autre syntaxe est '' affirmer (H1: m + m * n = m * S n) par admettre. – eponier