Revision 1c783fb2a09f78c7d1bd2f27008221724fe204d0 authored by Martin Baillon on 08 July 2021, 22:02:58 UTC, committed by Martin Baillon on 08 July 2021, 22:02:58 UTC
1 parent 2a2e136
Base.v
Require Import ssreflect.
Require Import Dialogue.
Set Implicit Arguments.
Set Primitive Projections.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Set Universe Polymorphism.
Record tsig (A : Type) (B : A -> Type) : Type :=
exist { fst : A; snd : B fst}.
Arguments fst {_ _} _.
Arguments snd {_ _} _.
Notation "{ x : A & P }" := (@tsig A (fun x => P)) : type_scope.
Record tsig2 (A:Type) (P Q : A -> Type) : Type :=
exist2 { p1 : A; p2 : P p1 ; p3 : Q p1}.
Arguments p1 {_ _ _} _.
Arguments p2 {_ _ _} _.
Arguments p3 {_ _ _} _.
Notation "{ x : A & P & Q }" := (tsig2 A (fun x => P) (fun x => Q)) : type_scope.
Record triple (A : Type) (B : Type) (P : A -> B -> Type) : Type :=
exist3 { q1 : A; q2 : B ; q3 : P q1 q2}.
Arguments q1 {_ _ _} _.
Arguments q2 {_ _ _} _.
Arguments q3 {_ _ _} _.
Notation "{a : A £ b : B £ P }" := (triple A B (fun a b => P)) : type_scope.
Section Generic.
Fixpoint Generic_aux (n : nat) (b : BranchingNat nat nat) : BranchingNat nat nat :=
match b with
| B0 _ _ => Bêtanat (BNEta _ _) n
| BS k => Generic_aux (S n) k
| Bêtanat f x => Bêtanat (fun a => Generic_aux n (f a)) x
end.
Lemma NaturGen_aux (d : BranchingNat nat nat) (p : nat -> nat) (n : nat) :
BNdialogue (Generic_aux n d) p = p (n + (BNdialogue d p)).
Proof.
elim: d n => [ n | d ihd n | f ihd x n] ; simpl.
- rewrite - plus_n_O.
induction (p n) ; trivial ; simpl.
now f_equal.
- rewrite - plus_n_Sm ; rewrite - plus_Sn_m.
now rewrite (ihd (S n)).
- exact: ihd.
Qed.
Lemma Generic_Devale_Dialogue (n : BranchingNat nat nat) (k : nat) (alpha : nat -> nat) :
BNdialogue (Generic_aux k (Devale n alpha)) alpha =
BNdialogue (Generic_aux k n) alpha.
Proof.
induction n ; trivial ; simpl.
exact: (H (alpha x)).
Qed.
End Generic.

Computing file changes ...