2016-03-31 35 views
7

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.

cevap

4

Ben Program kullanmaya alışık değilim bu yüzden muhtemelen daha iyi bir çözüm var ama bu dahili olarak Fix_sub kullanarak ve SearchAbout Fix_sub kullanarak o işlevi hakkında teoremler bakarak tanımlanmış olduğunu görerek, bla açılmasıyla yapılan geldi budur. Gerçek hayattaki örnekte

Lemma obvious: forall n, bla n = n. 
Proof. 
intro n ; induction n. 
reflexivity. 
unfold bla ; rewrite fix_sub_eq ; simpl ; fold (bla n). 
rewrite IHn ; reflexivity. 

(* This can probably be automated using Ltac *) 
intros x f g Heq. 
    destruct x. 
    reflexivity. 
    f_equal ; apply Heq. 
Qed. 

, muhtemelen aynı çalışmalarının her zaman yapmak zorunda kalmamak azaltma lemmas tanıtmak isteyeceksiniz. Örn .:

Lemma blaS_red : forall n, bla (S n) = S (bla n). 
Proof. 
intro n. 
unfold bla ; rewrite fix_sub_eq ; simpl ; fold (bla n). 
reflexivity. 

(* This can probably be automated using Ltac *) 
intros x f g Heq. 
    destruct x. 
    reflexivity. 
    f_equal ; apply Heq. 
Qed. 

Bu şekilde, bir dahaki sefere bir bla (S _) var, yapabilirsin sadece rewrite blaS_red.

+2

Aynı fikirde, denklem lemmalarını 'bla': 'forall n, bla n = ile eşleştirebilirsiniz. 0 => 0 | S n '=> S (bla n') sonu. ' – eponier

+1

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ı? –

+1

'Denklemler 'gibi daha yeni eklentiler sizin için azaltma lemmaları oluşturur. – gallais