src/ZF/Constructible/MetaExists.thy
author paulson
Mon, 08 Jul 2002 15:56:39 +0200
changeset 13314 84b9de3cbc91
child 13315 685499c73215
permissions -rw-r--r--
Defining a meta-existential quantifier. Using it to streamline reflection proofs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13314
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     1
header{*The meta-existential quantifier*}
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     2
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     3
theory MetaExists = Main:
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     4
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     5
text{*Allows quantification over any term having sort @{text logic}.  Used to
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     6
quantify over classes.  Yields a proposition rather than a FOL formula.*}
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     7
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     8
constdefs
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
     9
  ex :: "(('a::logic) => prop) => prop"            (binder "?? " 0)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    10
  "ex(P) == (!!Q. (!!x. PROP P(x) ==> PROP Q) ==> PROP Q)"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    11
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    12
syntax (xsymbols)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    13
  "?? "        :: "[idts, o] => o"             ("(3\<Or>_./ _)" [0, 0] 0)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    14
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    15
lemma meta_exI: "PROP P(x) ==> (?? x. PROP P(x))"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    16
proof -
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    17
  assume P: "PROP P(x)"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    18
  show "?? x. PROP P(x)"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    19
  apply (unfold ex_def)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    20
  proof -
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    21
    fix Q
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    22
    assume PQ: "\<And>x. PROP P(x) \<Longrightarrow> PROP Q"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    23
    from P show "PROP Q" by (rule PQ)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    24
  qed
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    25
qed 
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    26
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    27
lemma meta_exE: "[| ?? x. PROP P(x);  !!x. PROP P(x) ==> PROP R |] ==> PROP R"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    28
apply (unfold ex_def)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    29
proof -
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    30
  assume QPQ: "\<And>Q. (\<And>x. PROP P(x) \<Longrightarrow> PROP Q) \<Longrightarrow> PROP Q"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    31
  assume PR: "\<And>x. PROP P(x) \<Longrightarrow> PROP R"
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    32
  from PR show "PROP R" by (rule QPQ)
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    33
qed
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    34
84b9de3cbc91 Defining a meta-existential quantifier.
paulson
parents:
diff changeset
    35
end