2014-08-24 19:58:48 -07:00
|
|
|
|
import logic data.prod
|
2014-09-04 16:36:06 -07:00
|
|
|
|
open tactic prod
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2014-10-07 18:02:15 -07:00
|
|
|
|
inductive inh [class] (A : Type) : Prop :=
|
2014-09-04 16:36:06 -07:00
|
|
|
|
intro : A -> inh A
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2015-01-24 20:23:21 -08:00
|
|
|
|
attribute inh.intro [instance]
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2014-07-22 09:43:18 -07:00
|
|
|
|
theorem inh_elim {A : Type} {B : Prop} (H1 : inh A) (H2 : A → B) : B
|
2014-09-04 15:03:59 -07:00
|
|
|
|
:= inh.rec H2 H1
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2014-09-25 19:46:08 -07:00
|
|
|
|
theorem inh_exists {A : Type} {P : A → Prop} (H : ∃x, P x) : inh A
|
2014-09-04 16:36:06 -07:00
|
|
|
|
:= obtain w Hw, from H, inh.intro w
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2014-07-22 09:43:18 -07:00
|
|
|
|
theorem inh_bool [instance] : inh Prop
|
2014-09-04 16:36:06 -07:00
|
|
|
|
:= inh.intro true
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2015-02-24 16:10:16 -08:00
|
|
|
|
theorem inh_fun [instance] {A B : Type} [H : inh B] : inh (A → B)
|
2014-09-04 16:36:06 -07:00
|
|
|
|
:= inh.rec (λb, inh.intro (λa : A, b)) H
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2015-02-24 16:10:16 -08:00
|
|
|
|
theorem pair_inh [instance] {A : Type} {B : Type} [H1 : inh A] [H2 : inh B] : inh (prod A B)
|
2014-09-04 16:36:06 -07:00
|
|
|
|
:= inh_elim H1 (λa, inh_elim H2 (λb, inh.intro (pair a b)))
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
|
|
|
|
definition assump := eassumption
|
|
|
|
|
tactic_hint assump
|
|
|
|
|
|
|
|
|
|
theorem tst {A B : Type} (H : inh B) : inh (A → B → B)
|
2014-12-19 15:08:21 -08:00
|
|
|
|
set_option class.trace_instances true
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
2014-09-25 19:46:08 -07:00
|
|
|
|
theorem T1 {A B C D : Type} {P : C → Prop} (a : A) (H1 : inh B) (H2 : ∃x, P x) : inh ((A → A) × B × (D → C) × Prop) :=
|
|
|
|
|
have h1 [visible] : inh A, from inh.intro a,
|
|
|
|
|
have h2 [visible] : inh C, from inh_exists H2,
|
|
|
|
|
_
|
2014-07-14 02:53:02 +01:00
|
|
|
|
|
|
|
|
|
(*
|
|
|
|
|
print(get_env():find("T1"):value())
|
2014-09-03 16:00:38 -07:00
|
|
|
|
*)
|