Coq simpl for Program Fixpoint

后端 未结 1 526
无人共我
无人共我 2021-01-02 01:56

is there anything like the tactic simpl for Program Fixpoints?

In particular, how can one proof the following trivial statement?

相关标签:
1条回答
  • 2021-01-02 02:57

    I'm not used to using Program so there's probably a better solution but this is what I came up with by unfolding bla, seeing that it was internally defined using Fix_sub and looking at the theorems about that function by using SearchAbout Fix_sub.

    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.
    

    In your real-life example, you'll probably want to introduce reduction lemmas so that you don't have to do the same work every time. E.g.:

    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.
    

    This way, next time you have a bla (S _), you can simply rewrite blaS_red.

    0 讨论(0)
提交回复
热议问题