(*** representation of Fsub types ***)
inductive Typ : Set ≝
- | TVar : nat → Typ (* type var *)
- | Top : Typ (* maximum type *)
+ | TVar : nat → Typ (* type var *)
+ | Top : Typ (* maximum type *)
| Arrow : Typ → Typ → Typ (* functions *)
| Forall : Typ → Typ → Typ. (* universal type *)
lemma extensional_perm : ∀T.∀f,g.(∀x.f x = g x) → perm T f = perm T g.
intro;elim T
[4:whd in ⊢ (??%%);cut (∀x.flift f 1 x = flift g 1 x)
- [autobatch
+ [rewrite > (H f g);
+ [rewrite > (H1 (flift f 1) (flift g 1));
+ [reflexivity
+ |assumption]
+ |assumption]
|intro;simplify;cases x
[reflexivity
|simplify;rewrite > H2;reflexivity]]