Library Lambda.Utils

Require
Import
Coq.Arith.Wf_nat
.

Lemma
wf_lt_induction_type
: ∀ (
P
:
nat
Type
),
  (∀
x
:
nat
, (∀
y
:
nat
,
y
<
x
P
y
) →
P
x
) →
       ∀
a
:
nat
,
P
a
.

Inductive
ex2
(
A
B
:
Type
) (
P
:
A
B
Prop
) :
Prop
:=
 |
ex2_intros
: ∀ (
a
:
A
) (
b
:
B
),
P
a
b
ex2
(
A
:=A) (
B
:=B)
P
.

Notation
"'exists2' x y , p" := (
ex2
(
fun
x
fun
y
p
))
   (
at
level
200,
x
ident
,
y
ident
) :
type_scope
.

Inductive
ex3
(
A
B
C
:
Type
) (
P
:
A
B
C
Prop
) :
Prop
:=
 |
ex3_intros
: ∀ (
a
:
A
) (
b
:
B
) (
c
:
C
),
P
a
b
c
ex3
(
A
:=A) (
B
:=B) (
C
:=C)
P
.

Notation
"'exists3' x y w , p" := (
ex3
(
fun
x
fun
y
fun
w
p
))
   (
at
level
200,
x
ident
,
y
ident
,
w
ident
) :
type_scope
.

Inductive
ex4
(
A
B
C
D
:
Type
) (
P
:
A
B
C
D
Prop
) :
Prop
:=
 |
ex4_intros
: ∀ (
a
:
A
) (
b
:
B
) (
c
:
C
) (
d
:
D
),
P
a
b
c
d
ex4
(
A
:=A) (
B
:=B) (
C
:=C) (
D
:=
D
)
P
.

Notation
"'exists4' w x y z , p" := (
ex4
(
fun
w
fun
x
fun
y
fun
z
p
))
   (
at
level
200,
w
ident
,
x
ident
,
y
ident
,
z
ident
) :
type_scope
.