ในขณะที่พยายามพิสูจน์คุณสมบัติพื้นฐานบางอย่างโดยใช้ประเภทเหรียญใน Coq ฉันยังคงพบปัญหาต่อไปนี้และฉันไม่สามารถแก้ไขได้ ฉันกลั่นปัญหาให้เป็นสคริปต์ Coq อย่างง่ายดังนี้
ประเภทต้นไม้กำหนดอาจจะเป็นต้นไม้ที่ไม่มีที่สิ้นสุดที่มีสาขาที่มีข้อความที่มีองค์ประกอบของประเภท สาขาไม่จำเป็นต้องกำหนดไว้สำหรับองค์ประกอบทั้งหมดของ ค่าUnivเป็นต้นไม้ที่ไม่มีที่สิ้นสุดกับทุกสาขาที่กำหนดไว้เสมอ isUnivทดสอบไม่ว่าจะเป็นต้นไม้ที่ได้รับจะเท่ากับUniv บทแทรกฯ ระบุว่าUnivตอบสนองความต้องการisUnivได้อย่างแน่นอน
Parameter A : Set.
CoInductive Tree: Set := Node : (A -> option Tree) -> Tree.
Definition derv (a : A) (t: Tree): option Tree :=
match t with Node f => f a end.
CoFixpoint Univ : Tree := Node (fun _ => Some Univ).
CoInductive isUniv : Tree -> Prop :=
isuniv : forall (nf : A -> option Tree) (a : A) (t : Tree),
nf a = Some t ->
isUniv t ->
isUniv (Node nf).
Lemma UnivIsUniv : isUniv Univ.
Proof.
cofix CH. (* this application of cofix is fine *)
unfold Univ.
Admitted.
ณ จุดนี้ฉันยอมแพ้หลักฐาน เป้าหมายปัจจุบันคือ:
CH : isUniv Univ
============================
isUniv (cofix Univ : Tree := Node (fun _ : A => Some Univ))
ฉันไม่รู้ว่าจะใช้กลวิธีใดในการกำจัดcofixในเป้าหมายการผลิต(โหนดบางอย่าง)เพื่อให้ฉันสามารถใช้isunivได้
ใครสามารถช่วยพิสูจน์บทแทรกนี้ได้บ้าง
อะไรคือวิธีมาตรฐานในการกำจัดcofixในสถานการณ์เช่นนี้?