için Coq simpl, Program Fixpoint
s için simpl
taktiği gibi bir şey var mı? Özellikle aşağıdaki önemsiz ifadeyi nasıl ispatlayabiliriz?Program Düzeltme Noktası
Program Fixpoint bla (n:nat) {measure n} :=
match n with
| 0 => 0
| S n' => S (bla n')
end.
Lemma obvious: forall n, bla n = n.
induction n. reflexivity.
(* I'm stuck here. For a normal fixpoint, I could for instance use
simpl. rewrite IHn. reflexivity. But here, I couldn't find a tactic
transforming bla (S n) to S (bla n).*)
Açıkçası, bu oyuncak örneğin gerekli hiçbir Program Fixpoint
, ama elle Program Fixpoint
feshini kanıtlamak için gereken yere bir daha karmaşık bir ortamda aynı sorunla karşı karşıya ediyorum.
Aynı fikirde, denklem lemmalarını 'bla': 'forall n, bla n = ile eşleştirebilirsiniz. 0 => 0 | S n '=> S (bla n') sonu. ' – eponier
Bu gerçekten en iyi cevap mı? Bu, "Program Düzeltme Noktası" nı, büyük bir işlev için, el ile bir küçültme lekesi yazmanız gerektiğinde, oldukça sıkıcı yapmaz mı? –
'Denklemler 'gibi daha yeni eklentiler sizin için azaltma lemmaları oluşturur. – gallais