Quellcodebibliothek AOT_NaturalNumbers.thy
Sprache: Isabelle
|
|
(*<*)
theory AOT_NaturalNumbers
imports AOT_PossibleWorlds AOT_ExtendedRelationComprehension
abbrevs oneto- = \<>1›ono›
and onto = ‹
begin
(*>*)
sectionopen Numbers›
AOT_define CorrelatesOneToOne :: ‹ τ φ (‹1⟷)
"1-1-cor": ‹: ‹-\f R↓ & G↓
∀ ∃
∀y ([G]y →y ([G]y →!x([F]x & [R]xy))›
MapsTo :: ‹τ τ ==> φ›_ |: _ ⟶ _›
1":: ‹ G\down& ∀ ∃R]xy))›
MapsToOneToOne :: ‹τ ==> τ ==> τ ==> φ› (‹_ |: _ 1-1⟶ _›)
"fFG:2": ‹R |: F 1-1⟶ G ≡df
R |: F ⟶ G & ∀x∀y∀z (([F]x & [F]y & [G]z) → ([R]xz & [R]yz ='font-size: 18px;'>→ x = y))›
MapsOnto :: ‹τ ==> τ ==> τ ==> φ› (‹_ |: _ ⟶onto _›)
"fFG:3": ‹R |: F ⟶onto G ≡df R |: F ⟶ G & ∀y ([G]y → ∃x([F]x & [R]xy))›
MapsOneToOneOnto :: ‹τ ==> τ ==> τ ==> φ› (‹_ |: _ 1-1⟶onto _›)
"fFG:4": ‹R |: F 1-1⟶onto G ≡df R |: F 1-1⟶ G & R |: F ⟶onto G›
"eq-1-1": ‹R |: F 1-1⟷ G ≡ R |: F 1-1⟶onto G›
(rule "≡I"; rule "→I")
AOT_assume ‹R |: F 1-1⟷ G›
AOT_hence A: ‹∀x ([F]x → ∃!y([G]y & [R]xy))›
and B: ‹∀y ([G]y → ∃!x([F]x & [R]xy))›
using "≡dfE"[OF "1-1-cor"] "&E" by blast+
AOT_have C: ‹R |: F ⟶ G›
proof (rule "≡dfI"[OF "fFG:1"]; rule "&I")
AOT_show ‹R↓ & F↓ & G↓›
using "fFG:2":2": ‹
next
AOT_show ‹∀x ([F]x → ∃!y([G]y & [R]xy))› by (rule A)
qed
AOT_show ‹R |: F 1-1⟶onto G›
proof (rule "≡dfI"[OF "fFG:4"]; rule "&I")
AOT_show ‹
proof (rule "≡dfI"[OF "fFG:2"]; rule "&I")
AOT_show ‹R |: F ⟶ G› using C.
next
AOT_show ‹∀x∀y∀z ([F]x & [F]y & [G]z → ([R]xz & [R]yz → x = y))›
proof(rule GEN; rule GEN; rule GEN; rule "→I"; rule "→
x y z
AOT_assume 1: ‹[F]x & [F]y & [G]z›
moreover AOT_assume 2: ‹[R]xz & [R]yz›
ultimately AOT_have 3: ‹∃!x ([F]x & [R]xz)›: ‹R |: F ⟶ontG \equivsub>d <>(
using B "&E" "∀E" "→E" by fast
AOT_show ‹x = y›
by (rule "uni-most"[THEN "→E", OF 3, THEN "∀E"(2)[where β=x],
THEN "∀E"(2)[where β=y], THEN "→E"])
(metis "&I" "&E" 1 2)
qed
qed
next
AOT_show ‹R |: F ⟶onto G›
proof (rule "≡dfI"[OF "fFG:3"]; rule "&I")
AOT_show ‹R |: F ⟶ G› using C.
next
AOT_show ‹∀y ([G]y → ∃x ([F]x & [R]xy))›
proof
fix y
AOT_assume ‹
AOT_hence ‹sub>o><^sub>1 R |: F ⟶o G›
using B[THEN "∀E"(2), THEN "→E"] by blast
AOT_hence ‹∃x ([F]x & [R]xy & ∀β (([F]β & [R]βy) → β = x))›
using "uniqueness:1"[THEN "≡dfE"] by blast
then AOT_obtain x where ‹[F]x & [R]xy›
using "∃E"[rotated] "&E" by blast
AOT_thus ‹∃x ([F]x & [R]xy)› by (rule "∃I")
qed
qed
qed
AOT_assume ‹R |: F 1-1⟶onto G›
AOT_hence ‹R |: F 1-1⟶ G› and ‹R |: F ⟶onto G›
using "≡dfE"[OF "fFG:4"] "&E" by blast+
AOT_hence C: ‹R |: F ⟶ G›
and D: ‹∀x∀y∀z ([F]x & [F]y & [G]z → ([R]xz & [R]yz → x = y))›
and E: ‹∀y ([G]y → ∃x ([F]x & [R]xy))›
using "≡dfE"[OF "fFG:2"] "≡dfE"[OF "fFG:3"] "&E" by blast+
java.lang.NullPointerException
proof(rule "1-1-cor"[THEN "≡dfI"]; safe intro!: "&I" "cqt:2[const_var]"[axiom_inst])
AOT_show ‹∀x ([F]x → ∃!y ([G]y & [R]xy))›
using "≡dfE"[OF "fFG:1", OF C] "&E" by blast
next
AOT_show ‹∀y ([G]y → ∃!x ([F]x & [R]xy))›
proof (rule "GEN"; rule "→I")
fix y
AOT_assume 0: ‹[G]y›
AOT_hence ‹∃x ([F]x & [R]xy)›
using E "∀E" "→E" by fast
then AOT_obtain a where a_prop: ‹[F]a & [R]ay›
using "∃E"[rotated] by blast
moreover AOT_have ‹∀z ([F]z & [R]zy → z = a)›
proof (rule GEN; rule "→I")
fix z
AOT_assume ‹[F]z & [R]zy›
AOT_thus ‹z = a›
using D[THEN "∀E"(2)[where β=z], THEN "∀E"(2)[where β=a],
THEN "∀E"(2)[where β=y], THEN "→E", THEN "→E"]
a_prop 0 "&E" "&I" by metis
qed
ultimately AOT_have ‹∃x ([F]x & [R]xy & ∀z ([F]z & [R]zy → z = x))›
using "&I" "∃I"(2) by fast
AOT_thus ‹∃!x ([F]x & [R]xy)›
"n1"[THEN "\<><
qed
qed
‹We have already introduced the restricted type of Ordinary objects in the
Extended Relation Comprehension theory. However, make sure all variable names
are defined as expected (avoiding conflicts with situations
of possible world theory).›
Ordinary: u v r t s
"equi:1": ‹∃!u φ AOT_hence A: 🚫
(rule "≡I"; rule "→I")
AOT_assume ‹‹
AOT_hence ‹∃!x (O!x & φ{x})›.
AOT_hence ‹∃x (O!x & φ{x} & ∀β (O!β & φ{β} → β = x))›
using "uniqueness:1"[THEN "≡dfE"] by blast
java.lang.NullPointerException
using "∃E"[rotated] by blast
{
fix β
AOT_assume beta_ord: ‹O!β›
moreover AOT_assume ‹φ{β}›
ultimately AOT_have ‹β = x›
using x_prop[THEN "&E"(2), THEN "∀E"(2)[where β=β]] "&I" "→E" by blast
AOT_hence ‹β =E x›
using "ord-=E=:1"[THEN "→E", OF "∨I"(1)[O")
THEN "qml:2"[axiom_inst, THEN "→E"],
THEN "≡E"(1)]
by blast
}
AOT_hence ‹(O!β → (φ{β} → β =E x))› for β
using "→I" by blast
AOT_hence ‹∀β(O!β → (φ{β} → β =E x))›
using "qt:[con]"[axio "&I" by metis
AOT_hence ‹O!x & φ{x} & ∀y (O!y →
x_prTHEN "&E"(1)] "&I" by blast
AOT_hence ‹O!x & (φ{x} & ∀y (O!y → (φ{y} → y =E x)))›
using "&E" "&I" by meson
AOT_thus ‹∃u (φ{u} & ∀v (φ{v} → v =E u))›
using "∃I" by fast
AOT_assume ‹∃u (φ{u} & ∀v (φ{v} → v =E u))›
>E x))))›
by blast
then AOT_obtain x where x_prop: ‹O!x & (φ{x} & ∀y (O!y → (φ{y} → y =E x)))›
using "∃E"[rotated] by blast
AOT_have ‹∀y ([O!]y & φ{y} → y = x)›
proof(rule GEN; rule "→I")
fix y
AOT_assume ‹O!y & φ{y}›
AOT_hence ‹y =E x›
using x_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2)[where β=y]]
"→E" "&E" by blast
AOT_thus ‹y = x›
using "ord-=E=:1"[THEN "→E", OF "∨I"(2)[OF x_prop[THEN "&E"(1)]],
THEN "qml:2"[axiom_inst, THEN "→E"], THEN "≡E"(2)] by blast
qed
AOT_hence ‹[O!]x & φ{x} & ∀y ([O!]y & φ{y} → y = x)›"; rule "&I")
using x_prop "&E" "&I" by meson
AOT_hence ‹∃x ([O!]x & φ{x} & ∀y ([O!]y & φ{y} → y = x))›
by (ule "\<existsI
AOT_hence ‹∃!x (O!x & φ{x})›
by (rule "uniqueness:1"[THEN "≡dfI"])
AOT_thus ‹∃!u φ{u}›.
CorrelatesEOneToOne :: ‹
"equi:2": ‹R |: F 1-1⟷longrightarrowG<>
∀u ([F]u → ∃!v([G]v & [R]uv)) &
∀v ([G]v → ∃!u([F]u & [R]uv))›
EquinumerousE :: ‹τ ==> τ ==> φ› (infixl ‹≈E› 50)
"equi:3": ‹
‹Note: not explicitly in PLM.›
eq_den_1: ‹Π↓› if ‹Π ≈E Π'›
-
AOT_have ‹\close
using "equi:3"[THEN "≡dfE"] that by blast
then AOT_obtain R where ‹R |: Π 1-1⟷ AOT 2: \openR]xz & [R]y\close>
using "∃E"[rotated] by blast
AOT_thus\open<>\
using "equi:2"[THEN "≡dfE"] "&E" by blast
‹Note: not explicitly in PLM.›
eq_den_2: ‹Π'↓› if ‹Π ≈ <>"
-
AOT_have ‹∃RAOT_s \open = y\close
using "equi:3"[THEN "≡ <>=
then AOT_obtain R where ‹R |: Π 1-1⟷E Π'›
using "∃E"[rotated] by blast
AOT_thus ‹Π'↓›
using "equi:2"[THEN "≡dTHEN "∀)
"eq-part:1": ‹F ≈E F›
(safe intro!: "&I" GEN "→I" "cqt:2[const_var]"[axiom_inst]
"≡ 2)
fix x
AOT_assume 1: ‹O!x›
AOT_assume 2: ‹
AOT_show ‹
proof(rule "equi:1"[THEN "≡E"(2)];
safe dest!: "&E"(2)
intro!: "&I" "→I" 1 2 Ordinary.GEN "ord=Eequiv:1"[THEN "→E", OF 1])
AOT_show ‹v = <>\
by (metis that "ord=Eequiv:2"[THEN "→E"])
qed
fix y
AOT_assume 1: ‹O!y›
AOT_assume 2: ‹[F]y›G\closeu C.
AOT_show ‹∃!u ([F]u & u =E y)›
by(safe dest!: "&E"(2)
intro!: "equi:1"[THEN "≡E"(2)] "∃I"(2)
"&I" AOT_show \ ‹
(auto simp: "=E[denotes]")
"eq-part:2": ‹F ≈E G → G ≈E F›
(rule "→I")
AOT_assume ‹F ≈E G›
AOT_hence ‹
using "equi:3"[THEN "≡dfE"] by blast
then AOT_obtain R where ‹R |: F 1-1⟷E G›
using "∃E"[rotated] by blast
AOT_hence 0: ‹R↓ & F↓ & G↓ & an style='font-size: 18px;'>∀u ([F]u → ∃!v([G]v & [R]uv)) &
∀([F]u & R]uv)))›
using "equi:2"[THEN "≡dfE"] by blast
AOT_have ‹[λxy [R]yx]↓ & G↓ & F↓ & ∀u ([G]u → ∃!v([F]v & [λxy [R]yx]uv)) &
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
proof (AOT_subst ‹[λxy [R]yx]yx› ‹[R]xy› for: x y;
(safe intro!: "&I" "cqt:2[const_var]"[axiom_inst] 0[THEN "&E"(2)]
0[THN "&"(1) THEN "&E"(2)]; "cq:2[lam]")?)
AOT_modally_strict {
AOT_have ‹using "uniqueness:1:1"[THEN "≡
by (auto intro!: "β←C"(1) "cqt:2"
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3" that)
moreover AOT_have ‹[R]yx› if ‹]y›
using "β→C"(1)[where φ="λ(x,y). _ (x,y)" and κ1κn="(_,_)",
simplified, OF that, simplified].
ultimately AOT_show ‹
by (metis "deduction-theorem" "≡I")
}
qed
AOT_hence ‹[λxy [R]yx] |: G AOT_thus 🚫
using "equi:2"[THEN "≡dfI"] by blast
java.lang.NullPointerException
by (rule "∃I"(1)) "cqt:2[lambda]"
AOT_thus \<open
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
‹Note: not explicitly in PLM.›
"eq-part:2[terms]": ‹Π ≈E Π' → Π' ≈E Π›
using "eq-part:2"[unvarify F G] eq_den_1 eq_den_2 "→I" by meson
"eq-part:2[terms]"[THEN "→E", sym]
"eq-part:3": ‹(F ≈E G & G ≈E H) → F ≈E H›
(rule "→I")
AOT_assume ‹F ≈E G & G ≈E H›
then AOT_obtain R1 and R2 where
‹R1 |: F 1-1⟷E G›^sub>dfE"[OF "fFG:4"] "&E" byblas+
and ‹R2 |: G \<>R
using "equi:3"[THEN "≡dfE"] "&E" "∃E"[rotated] by metis
AOT_hence θ: ‹[] & [R]yz →clo>
and ξ: ‹∀u ([G]u → ∃!v([H]v & [R2]uv)) & ∀v ([H]v → ∃!u([G]u & [R2]uv))›
using "equi:2"[THEN "≡dfE", THEN "&E"(2)]
"equi:2"[THEN "≡dfE", THEN "&E"(1), THEN "&E"(2)]
"&I" by blast+
AOT_have ‹∃R R = [λxy O!x & O!y & ∃v ([G]v & [R1]xv & [R2]vy)]›
by (rule "free-thms:3[lambda]") cqt_2_lambda_inst_prover
then AOT_obtain R where R_def: ‹R = [λxy O!x & O!y & ∃v ([G]v & [R1]xv & [R2]vy)]›
using "∃E"[rotated] by blast
AOT_have 1: ‹ and E: ‹
proof (rule "≡E"(2)[OF "equi:1"])
AOT_obtain b where
b_prop: ‹[O!]b & ([G]b & [R1]ub & ∀v ([G]v & [R1]uv → v =E b))›
using θ[THEN "&E"(1), THEN "∀E"(2), THEN "→E", THEN "→E",
OF a b, THEN "≡E"(1)[OF "equi:1"]]
"∃ using "≡"\equivbybla+
AOT_obtain c where
c_prop: "[O!]c & ([H]c & [R2]bc & ∀v ([H]v & [R2]bv → v =E c))"
using ξ[THEN "&E"(1), THEN "∀E"(2)[where β=b], THEN "→E",
OF b_prop[THEN "&E"(1)], THEN "→E",
OF b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)],
THEN "≡E"(1)[OF "equi:1"]]
"∃E"[rotated] by blast
AOT_show ‹∃v ([H]v & [R]uv & ∀v' ([H]v' & [R]uv' → v' =E v))›
proof (safe intro!: "&I" GEN "→I" "∃I"(2)[where β=c])
AOT_show ‹O!c› using c_prop "&E" by blast
next
AOT_show ‹[H]c› using c_prop "&E" by blast
next
AOT_have 0: ‹[O!]u & [O!]c & ∃v ([G]v & [R1[HEN"<><
by (safe intro!: "&I" a c_prop[THEN "&E"(1)] "∃I"(2)[where β=b]
b_prop[THEN "&E"(1)] b_prop[THEN "&E"(2), THEN "&E"(1)]
c_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)])
AOT_show ‹[R]uc›
by (auto intro: "rule=E"[rotated, OF R_def[symmetric]]
intro!: "β←C"(1) "cqt:2"
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3" 0)
next
fix x
AOT_assume ordx: ‹O!x›
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
AOT_hence hx: ‹[F]x & [R]xy))›
AOT_hence ‹[λxy O!x & O!y & ∃v ([G]v & [R1]xv & [R2]vy)]ux›
using "rule=E"[rotated, OF R_def] by fast
AOT_hence ‹O!u & O!x & ∃v ([G]v & [Rrule "→
java.lang.NullPointerException
then AOT_obtain z where z_prop: ‹
using "&E" "∃E"[rotated] by blast
AOT_hence ‹z =E b›
using b_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2)[where β=z]]
using "&E" "→E" by metis
AOT_hence ‹z = b›
by (metis "=E-simple:2"[THEN "→E"])
java.lang.NullPointerException
using z_prop[THEN "&E"(2), THEN "&E"(2)] "rule=E" by fast
AOT_thus ‹x =E c›
using c_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2)[where β=x],
THEN "→E", THEN "→ AOT_obt a wh a_: 🚫
hx "&I" by blast
qed
qed
AOT_have 2: ‹\<existsna)🚫
proof (rule "≡E"(2)[OF "equi:1"])
AOT_obtain b where
b_prop: ‹[O!]b & ([G]b & [R2]bv & ∀u ([G]u & [R2]uv → u =E b))›
using ξ[THEN "&E"(2), THEN "∀E"(2), THEN "→E", THEN "→E",
OF a b, THEN "≡E"(1)[OF "equi:1"]]
"∃E"[rotated] by blast
AOT_obtain c where
c_prop: "[O!]c & ([F]c & [R1]cb & ∀v ([F]v & [R1]vb → v =E c))"
using θ[THEN "&E"(2), THEN "∀E"(2)[where β=b], THEN "→E",
OF b_prop[THEN "&E"(1)], THEN "→
OF b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)],
THEN "≡E"(1)[OF )wh βE"(2[where <>a
"∃E"[rotated] by blast
AOT_show ‹∃u ([F]u & [R]uv & ∀v' ([F]v' & [R]v'v → v' =<>=y], TH "→
proof (safe intro!: "&I" GEN "→I" "∃I"(2)[where β=c])
AOT_show ‹O!c› using c_prop "&E" by blast
next
AOT_show ‹[F]c› using c_prop "&E" by blast
next
AOT_have ‹[O!]c & [O!]v & ∃u ([G]u & [R 0 "&E" "&I" by met
by (safe intro!: "&I" a "∃I"(2)[where β=b]
c_prop[THEN "&E"(1)] b_prop[THEN "&E"(1)]
b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)]
b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)]
c_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)])
by (auto intro: "rule=E"[rotated, OF R_def[symmetric]]
intro!: "β←C"(1) "cqt:2"
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3")
next
fix x
AOT_assume ordx: ‹O!x›
AOT_assume ‹[F]x & [R]xv›
AOT_hence hx: ‹[F]x› and ‹[R]xv› [R]xy)\<closelose
AOT_hence ‹[λxy O!x & O!y & ∃v ([G]v & [R1]xv & [R2]vy)]xv›
using "rule=E"[rotated, OF R_def] by fast
AOT_hence ‹O!x & O!v & ∃u ([G]u & [R1]xu & [R2]uv)›
by (rule "β→C"(1)[where φ="λ(κ,κ'). _ κ κ'" and κ1κn="(_,_)", simplified])
then AOT_obtain z where z_prop: ‹
using "&E" "∃E"[rotated] by blast
java.lang.NullPointerException
using b_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2)[where β=z]]
using "&E" "→E" "&I" by metis
AOT_hence ‹z = b›
by (metis "=E-simple:2"[THEN "→E"])
AOT_hence ‹[R1]xb›
using z_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)] "rule=E" by fast
AOT_thus ‹Extended Relation Compreh theory. How, make s sure all va names
using c_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2)[where β=x],
THEN "→E", OF ordx]
hx "&I" by blast
qed
qed
AOT_show ‹F ≈E H›
apply (rule "equi:3"[THEN "≡d>
apply (rule "∃I"(2)[where β=R])
by (auto intro!: 1 2 "equi:2"[THEN "≡ Ordinary: u v r t s
Ordinary.GEN "→I" Ordinary.ψ)
‹Note: not explicitly in PLM.›
"eq-part:3[terms]": ‹Π ≈E Π''› if ‹ <open\
using "eq-part:3"[unvarify F G H, THEN "→E"] eq_den_1 eq_den_2 "→I" "&I"
by (metis that(1) that(2))
"eq-part:3[terms]"[trans]
"eq-part:4": ‹F ≈\openex>x (O!x & φ(O!ηbeta>} →›
(rule "≡I"; rule "→I")
AOT_assume 0: ‹F ≈E G›
AOT_hence 1: ‹G ≈E F› using "eq-part:2"[THEN "→E"] by blast
AOT_show ‹∀H (H ≈E F ≡ H ≈E G)›
proof (rule GEN; rule "≡I"; rule "→I")
AOT_show ‹H ≈E G› if ‹H ≈E F› for H using 0
by (meson "&I" "eq-part:3" that "vdash-properties:6")
next
AOT_show ‹H ≈E F› if ‹H ≈E G› for H using 1
by (metis "&I" "eq-part:3" that "vdash-properties:6")
qed
AOT_assume ‹∀H (H ≈E F ≡ H ≈E G)›
AOT_hence ‹F ≈E F ≡ F ≈E G› using "∀E" by blast
AOT_thus ‹F ≈E G› "∃
MapsE :: ‹
"equi-rem:1":
‹›
MapsEOneToOne :: ‹τ ==> AOT_assum 🚫
"equi-rem:2":
‹R |: F 1where \<eta="→
R |: F ⟶E G & ∀t∀u∀v (([F]t & [F]u & [G]v) → ([R]tv & [R]uv e='font-size: 18px;'>→ t =E u))›
MapsEOnto :: ‹τ ==> τ ==> τ ==> φ› (‹_ |: _ ⟶ontoE _›)
"equi-rem:3":
‹R |: F ⟶usin"ord-=E=:1[THEN "→OF bet],
MapsEOneToOneOnto :: ‹τ ==> τ ==> τ ==> φ› (‹_ |: _ <>E"]
"equi-rem:4":
‹>E(1)]
"equi-rem-thm":
‹
-
AOT_have ‹>\<rightarrow fofo η
proof(safe intro!: "≡I" "→I" "&I")
AOT_assume ‹R |: F 1-1⟷E G›
AOT_hence ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
and ‹∀v ([G]v → ∃!u ([F]u & [R]uv))›
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_hence a: ‹([F]u → ∃!v ([G]v & [R]uv))›
and b: ‹([G]v → ∃!u ([F]u & [R]uv))› for u v
"Ordinary.∀
AOT_have ‹([λx [O!]x & [F]x]x → ∃!y ([λx [O!]x & [G]x]y & [R]xy))› for x
apply (AOT_subst ‹[λx [O!]x & [F]x]x› ‹[O!]x & [F]x›)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
apply (AOT_subst ‹[λx [O!]x & [G]x]x› ‹[O!]x & [G]x› for: x)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
apply (AOT_sub ‹y)
apply (meson "≡E"(6) "Associativity of &" "oth-class-taut:3:a")
apply (rule "→I") apply (frule "&E"(1)) apply (drule "&E"(2))
by (fact a[unconstrain u, THEN "→E", THEN "→E", of x])
AOT_hence A: ‹∀x ([λx [O!]x & [F]x]x → ∃!y ([λx [O!]x & [G]x]y & [R]xy))›
by (rule GEN)
AOT_have ‹([λx [O!]x & [G]x]y → ∃!x ([λx [O!]x & [F]x]x & [R]xy))› for y
apply (AOT_subst ‹[λx [O!]x & [G]x]y› ‹[O!]y & [G]y›)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
apply (AOT_subst ‹[λx [O!]x & [F]x]x› ‹[O!]x & [F]x› for: x)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
apply (AOT_subst ‹O!x & [F]x & [R]xy› ‹O!x & ([F]x & [R]xy)› for: x)
apply (meson "≡E"(6) "Associativity of &" "oth-class-taut:3:a")
apply (rule "→I") apply (frule "&E"(1)) apply (drule "&E"(2))
by (fact b[unconstrain v, THEN "→E", THEN "→E", of y])
AOT_hence B: B: ‹[R]xy)›
by (rule GEN)
AOT_show ‹R |: [λx [O!]x & [F]x] 1-1⟷ [λx [O!]x & [G]x]›
by (safe intro!: "1-1-cor"[THEN "≡dfI"] "&I"
"cqt:2[const_var]"[axiom_inst] A B)
"cqt:2[lambda]"+
next
AOT_assume ‹R |: [λx [O!]x & [F]x] 1-1⟷ [λx [O!]x & [G]x]›
AOT_hence a: ‹([λx [O!]x & [F]x]x → ∃!y ([λx [O!]x & [G]x]y & [R]xy))› and
b: ‹([λx [O!]x & [G]x]y → ∃!x ([λx [O!]x & [F]x]x & [R]xy))› for x y
using "1-1-cor"[THEN "≡dfE"] "&E" "∀E"(2) by blast+
AOT_have ‹[F]u → ∃!v ([G]v & [R]uv)› for u
proof (safe intro!: "→I")
AOT_assume fu: ‹[F]u›u (\phi \forallv(\<phi{su>E u))🚫
AOT_have 0: ‹
by (auto intro!: "β←C"(1) "cqt:2" "cqt:2[const_var]"[axiom_inst]
Ordinary.ψ
AOT_show ‹>E u))\<<close
apply (AOT_subst ‹[O!]x & ([G]x & [R]ux)›
‹([O!]x & [G]x) & [R]ux› for: x)
apply (simp add: "Associativity of &")
apply (AOT_subst (reverse) ‹[O!]x & [G]x›
‹[λx [O!]x & [G]x]x› for: x)
apply (rule"bet-C-met[THEN "→
apply "cqt:2[lambda]"
using a[THEN "→E", OF 0] by blast
qed
AOT_hence A: ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
by (rule Ordinary.GEN)
AOT_have ‹[G]v →by blast
proof (safe intro!: "→I")
AOT_assume gu: ‹[G]v›
AOT_have 0: ‹[λx [O!]x & [G]x]v›} & \forall(O!y \rightarrow (🚫
by (auto intro!: "β←C"(1) "cqt:2" "cqt:2[const_var]"[axiom_inst]
Ordinary.ψ gu "&I")
AOT_show ‹∃!u ([F]u & [R]uv)›
apply (AOT_subst ‹[O!]x & ([F]x & [R]xv)› ‹([O!]x & [F]x) & [R]xv› for: x)
apply (simp add: "Associativity of &")
apply (AOT_subst (reverse) ‹[O!]x & [F]x›‹[λx [O!]x & [F]x]x›
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
using b[THEN "→E", OF 0] by blast
qed
AOT_hence B: ‹∀v ([G]v → ∃!u ([F]u & [R]uv))› by (rule Ordinary.GEN)
AOT_show ‹R |: F 1-1⟷E G›
by (safe intro!: "equi:2"[THEN "≡dfI"] "&I" A B "cqt:2[const_var]"[axiom_inst])
qed
open>O!y & 🚫
proof(safe intro!: "≡I" "→I" "&I")
AOT_assume ‹ "E"(2), THEN "\\>E"2)[wh β
AOT_hence a: ‹([λx [O!]x & [F]x]x → ∃!y ([λx [O!]x & [G]x]y & [R]xy))› and
b: ‹"→
using "1-1-cor"[THEN "≡dfE"] "&E" "\<forall
AOT_show ‹R |: F 1<ighta>E", OF "\orI(2)[OF x_prop[THEN "&E"(1)]],
proof (safe intro!: "equi-rem:4"[THEN "≡dfI"] "&I" "equi-rem:3"[THEN "≡dfI"]
"equi-rem:2"[THEN "≡dfI"] "equi-rem:1"[THEN "≡dfI"]
"cqt:2[const_var]"[axiom_inst] Ordinary.GEN "→I")
fix u
AOT_assume fu: ‹[F]u›
AOT_have 0: ‹[λx [O!]x & [F]x]u›
by (auto intro!: "β←C"(1) "cqt:2" "cqt:2[const_var]"[axiom_inst]
Ordinary.ψ fu "&I")
AOT_hence 1: ‹
a[T "🚫
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
apply (AOT_subst ‹[O!]x & ([G]x & [R]ux)› ‹
apply (simp add: "Associativity of &")
apply (AOT_subst (reverse) ‹[O!]x & [G]x› ‹[λx [O!]x & [G]x]x› for: x)
apply (rule"bet-C-meta"TH "→
apply "cqt:2[lambda]"
by (fact 1)
next
fix t u v
AOT_assume ‹[F]t & [F]u & [G]v›Rig> 🚫
AOT_hence oft: ‹[λx O!x & [F]x]t› and
ofu: ‹[λx O!x & [F]x]u› and
ogv: ‹[λx O!x & [G]x]v›
by (auto intro!: "β←C"(1) "cqt:2" "&I"
simp: Ordinary.ψ dest: "&E")
AOT_hence ‹∃!x ([λx [O!]x & [F]x]x & [R]xv)›
using b[THEN "→E"] by blast
then AOT_obtain a where
a_prop: ‹[λx [O!]x & [F]x]a & [R]av &
∀x (([λx [O!]x & [F]x]x & [R]xv) → x = a)›
using "uniqueness:1"[THEN "≡dfE"] "∃E"[rotated] by blast
AOT_hence ua: ‹u = a›
using ofu rtv_tuv[THEN "&E"(2)] "∀E"(2) "→E" "&I" "&E"(2) by blast
java.lang.NullPointerException
using a_prop oft rtv_tuv[THEN "&E"(1)] "∀E"(2) "→E" "&I" "&E"(2) by blast
ultimately AOT_have ‹t = u› by (metis "rule=E" id_sym)
AOT_thus ‹t =E u›
using "rule=E" id_sym "ord=Eequiv:1" Ordinary.ψ ta ua "→E" by fast
next
fix u
AOT_assume ‹[F]u›
AOT_hence ‹[λx O!x & [F]x]u›
by (auto intro!: "β←C"(1) "cqt:2" "&I"
simp: "cqt:2[const_var]"[axiom_inst] Ordinary.ψ)
AOT_hence ‹∃!y ([λx [O!]x & [G]x]y & [R]uy)›
using a[THEN "→E"] by blast
then AOT_obtain a where
a_prop: ‹[λx [O!]x & [G]x]a & [R]ua &
∀x (([λx [O!]x & [G]x]x & [R]ux) → x = a)›
using "uniqueness:1"[THEN "≡dfE"] "∃E"[rotated] by blast
AOT_have ‹O!a & [G]a›
by (rule "β→C"(1)) (auto simp: a_prop[THEN "&E"(1), THEN "&E"(1)])
AOT_hence ‹O!a› and ‹[G]a›∃›
moreover AOT_have ‹∀v ([G]v & [R]uv → v =E a)›
proof(safe intro!: Ordinary.GEN "→I"; frule "&E"(1); drule "&E"(2))
fix
AOT_assume ‹[G]v›\<>
AOT_hence ‹[λx [O!]x & [G]x]v›
by (auto intro!: "β←C"(1) "cqt:2" "&I" simp: Ordinary.ψ)
AOT_hence ‹v = a›
using a_prop[THEN "&E"(2), THEN "∀E"(2), THEN "→E", OF "&I"] ruv by blast
AOT_thus ‹v =E a›
using "rule=E" "ord=Eequiv:1" Ordinary.ψ "→E" by fast
qed
ultimately AOT_have ‹O!a & ([G]a & [R]ua & ∀E G≡: F \\^sub>>1 )›
using "∃I" "&I" a_prop[THEN "&E"(1), THEN "&E"(2)] by simp
AOT_hence ‹∃v ([G]v & [R]uv & ∀v' ([G]v' & [R]uv' → v' =E v))›
by (rule "∃I")
AOT_thus ‹∃!v ([G]v & [R]uv)›
by (rule "equi:1"[THEN "≡E"(2)])
next
fix v
AOT_assume ‹[G]v›
AOT_hence ‹[λx O!x & [G]x]v›
by (auto intro!: "β←C"(1) "cqt:2" "&I" Ordinary.ψ)
AOT_hence ‹∃!x ([λx [O!]x & [F]x]x & [R]xv)›
using b[THEN "→E"] by blast
then AOT_obtain a where
a_prop: ‹[λx [O!]x & [F]x]a & [R]av &
∀y ([λ: \<open\
using "uniqueness:1"[THEN "≡dfE", THEN "∃E"[rotated]] by blast
AOT_have ‹O!a & [F]a›
by (rule "β→C"(1)) (auto simp: a_prop[THEN "&E"(1), THEN "&E"(1)])
AOT_hence ‹O!a & ([F]a & [R]av)›
using a_prop[THEN "&E"(1), THEN "&E"(2)] "&E" "&I" by metis
AOT_thus ‹
by (rule "∃I")
qed
next
AOT_assume ‹R |: F 1-1⟶ontoE G›
AOT_hence 1: ‹R |: F 1-1⟶E G›
and 2: ‹R |: F ⟶ontoE G›
using "equi-rem:4"[THEN "≡dfE"] "&E" by blast+
AOT_hence 3: ‹R |: F ⟶E G›
and A: ‹∀open>R| \<Pi su>1\longleftrightarrow>\^sub>E Π
using "equi-rem:2"[THEN "≡dfE", OF 1] "&E" by blast+
AOT_hence B: ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
using "equi-rem:1"[THEN "≡dfE"] "&E" by blast
AOT_have C: ‹∀v ([G]v → ∃u ([F]u & [R]uv))› using "\exists"rotate] byblast
using "equi-rem:3"[THEN "≡down›
AOT_show ‹R |: [λx [O!]x & [F]x] 1\^>d\^>fE""] "&E"by blast
proof (rule "1-1-cor"[THEN "≡dfI"];
safe intro!: "&I" "cqt:2" GEN "→I")
fix x
AOT_assume 1: ‹[λx [O!]x & [F]x]x›
AOT_have ‹O!x & [F]x›
by (rule "β→C"(1)) (>
AOT_hence ‹eq_den_2:\<><
using B[THEN "∀E"(2), THEN "→E", THEN "→E"] "&E" by blast
then AOT_obtain y where
y_prop: ‹O!y & ([G]y & [R]xy & ∀u ([G]u & [R]xu → u =E y))›
using "equi:1"[THEN "≡E"(1)] "∃E"[rotated] by fastforce
AOT_hence ‹[λx O!x & [G]x]y›
by (auto intro!: "β←C"(1) "cqt:2" "&I" dest: "&E")
moreover AOT_have ‹ | Π-\^>1⟷›
proof(safe intro!: GEN "→I"; frule "&E"(1); drule "&E"(2))
fix z
AOT_assume 1: ‹[λx [O!]x & [G]x]z›
AOT_have 2: ‹O!z & [G]z›
by (rule "β→C"(1)) (auto simp: 1)
moreover AOT_assume ‹[R]xz›
ultimately AOT_have ‹
using y_prop[THEN "&E"(2), THEN "&E"(2), THEN "∀E"(2),
THEN "→E", THEN "→E", rotated, OF "&I"] "&E"
by blast
AOT_thus ‹z = y›
[THEN "& "&E""((1)]b (meti"E-s:2""→
qed
ultimately AOT_have ‹[λx O!x & [G]x]y & [R]xy &
∀z ([λx O!x & [G]x]z & [R]xz → z = y)›
using y_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)] "&I" by auto
AOT_hence ‹∃y ([λx O!x & [G]x]y & [R]xy &
∀z ([λx O!x & [G]x]z & [R]xz → z = y))›AO \<>\
by (rule "∃I")
AOT_thus \< using
using "uniqueness:1"[THEN "≡dfI"] by fast
next
fix y
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
AOT_have oy_gy: ‹O!y & [G]y›
by (rule "β→C"(1)) (auto simp: 1)
AOT_hence ‹∃u ([F]u & [R]uy)›
"→ "E by blast
then AOT_obtain x where x_prop: ‹O!x & ([F]x & [R]xy)›
using "∃E"[rotated] by blast
AOT_hence ofx: ‹[λx O!x & [F]x]x›
by (auto intro!: "β←C"(1) "cqt:2" "&I" dest: "&E")
AOT_have ‹∃^su>f"[OF "eq:"] "≡] ∃
∀β ([λx [O!]x & [F]x]β & [R]βy → β = α))›
proof (safe intro!: "∃I"(2)[where β=x] "&I" GEN "→I")
AOT_show ‹[λx O!x & [F]x]x› using ofx.
next
AOT_show ‹[R]xy› using x_prop[THEN "&E"(2), THEN "&E"(2)].
next
fix z
AOT_assume 1: ‹
AOT_have oz_fz: ‹O!z & [F]z›
by (rule "β→
AOT_have ‹z =E x›
using A[THEN "∀E"(2)[where β=z], THEN "→<open\
THEN "→E", THEN "∀E"(2)[where β=y], THEN "→E",
THEN "→E", THEN "→E", OF oz_fz[THEN "&E"(1)],
OF x_prop[THEN "&E"(1)], OF oy_gy[THEN "&E"(1)], OF "&I", OF "&I",
OF oz_fz[THEN "&E"(2)], OF x_prop[THEN "&E"(2), THEN "&E"(1)],
OF oy_gy[THEN "&E"(2)], OF "&I", OF 1[THEN "&E"(2)],
OF x_prop[THEN "&E"(2), THEN "&E"(2)]].
AOT_thus ‹z = x›
by (metis "=E-simple:2" "vdash-properties:10")
qed
AOT_thus ‹
by (rule "uniqueness:1"[THEN "≡dfI"])
qed
qed
show ?thes.
>(\not>\\<existsu [H]) →^s>E H\close
(rule "→I"; frule "&E"(1); drule "&E"(2))
AOT_assume 0: ‹¬∃u [F]u› and 1: ‹¬∃v [H]v›
AOT_have ‹∀u ([F]u → ∃!v ([H]v & [R]uv))› for R
proof(rule Ordinary.GEN; rule "→I"; rule "raa-cor:1")
fix u
AOT_assume ‹[F]u›
AOT_hence ‹∃u [F]u› using "Ordinary.∃I" "&I" by fast
AOT_thus ‹∃u [F]u & ¬∃u [F]u› using "&I" 0 by blast
qed
moreover AOT_have ‹∀v ([H]v → ∃!u ([F]u & [R]uv))› for R
proof(rule Ordinary.GEN; rule "→I"; rule "raa-cor:1")
fix v
AOT_assume ‹[H]v›
AOT_hence ‹∃v [H]v› using "Ordinary.∃I" "&I" by fast
AOT_thus ‹∃v [H]v & ¬∃v [H]v› using 1 "&I" by blast
qed
ultimately AOT_have ‹R |: F 1-1⟷E H› for R
apply (safe intro!: "equi:2"[THEN "≡dfI"] "&I" GEN "cqt:2[const_var]"[axiom_inst])
using "∀E" by blast+
AOT_hence ‹∃R R |: F 1-1⟷E H› by (rule "∃I")
AOT_thus ‹F ≈E H›
by (rule "equi:3"[THEN "≡dfI"])
"empty-approx:2": ‹(∃u [F]u & ¬∃v [H]v) → ¬(F ≈E H)›
(rule "→I"; frule "&E"(1); drule "&E"(2); rule "raa-cor:2")
AOT_assume 1: ‹∃u [F]u› and 2: ‹¬∃v [H]v›
AOT_obtain b where b_prop: ‹O!b & [F]b›
using 1 "∃E"[rotated] by blast
AOT_assume ‹F ≈E H›
AOT_hence\<<openclose>
by (rule "equi:3"[THEN "≡dfE"])
then AOT_obtain R where ‹R |: F 1-1⟷E H›
using "∃E"[rotated] by blast
AOT_hence θ: ‹∀u ([F]u → ∃!v ([H]v & [R]uv))›
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_have ‹∃!v ([H]v & [R]bv)› for u
using θ[THEN "∀E"(2)[where β=b], THEN "→E", THEN "→E",
OF b_prop[THEN "&E"(1)], OF b_prop[THEN "&E"(2)]].
AOT_hence ‹∃v ([H]v & [R]bv & ∀u ([H]u & [R]bu → u =E v))›
by (rule "equi:1"[THEN "≡E"(1)])
then AOT_obtain x where ‹O!x & ([H]x & [R]bx & ∀u ([H]u & [R]bu style='font-size: 18px;'>→ u =E x))›
using "∃E"[rotated] by blast
AOT_hence ‹O!x & [H]x› using "&E" "&I" by blast
AOT_hence ‹∃v [H]v› by (rule "∃I")
AOT_thus ‹∃v [H]v & ¬∃v [H]v› using 2 "&I" by blast
FminusU :: ‹Π ==> τ
java.lang.NullPointerException
‹Note: not explicitly in PLM.›
"F-u[den]": ‹[F]-x↓›
by (rule "=dfI"(1)[OF "F-u", where τ1τn="(_,_)", simplified]; "cqt:2[lambda]")
"F-u[equiv]": ‹[[F]-x]y ≡ ([F]y & y ≠
java.lang.NullPointerException
intro!: "cqt:2" "beta-C-cor:2"[THEN "→E", THEN "∀E"(2)])
eqP': ‹
(rule "→I"; frule "&E"(2); drule "&E"(1); frule "&E"(2); drule "&E"(1))
java.lang.NullPointerException
AOT_hence ‹∃R R |: F 1-1⟷E G›
using "equi:3"[THN "🚫
AOT R where R_prop:: ‹
using "∃E"[rotated] by blast
AOT_hence A: ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
and B: ‹∀v ([G]v → ∃!u ([F]u & [R]uv))›
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_have ‹R |: F 1-1⟶ontoE G›
using "equi-rem-thm"[THEN "≡E"(1), OF R_prop].
AOT_hence ‹R |: F 1-1⟶E G & R |: F ⟶ontoE G›
using "equi-rem:4"[THEN "≡dfE"] by blast
AOT_hence C: ‹∀t∀u∀v (([F]t & [F]u & [G]v) → ([R]tv & [R]uv → t =E u))›
using "equi-rem:2"[THEN "≡dfE"] "&E" by blast
AOT_assume fu: ‹[F]u›
AOT_assume gv: ‹[G]v›down> & \\([G]u →yx]uv)) &
AOT_have ‹[λz [Π]z & z ≠E κ]↓› for Π κ
by "cqt:2[lambda]"
note Π_minus_κI = "rule-id-df:2:b[2]"[
where τ=‹(λ(Π, κ). «[Π]-\κ¬)›, simplified, OF "F-u", simplified, OF this]
and Π_minu ∀ [\lambda[R]yx]uv))\>
where τ=‹(λ(Π, κ). «[Π]-\κ¬)›, simplified, OF "F-u", simplified, OF this]
AOT_have Π_minus_κ_den: ‹[Π]-proof (AOT_subst ‹
by (rule Π_minus_κI) "cqt:2[lambda]"+
{
fix R
AOT_assume R_prop: ‹R |: F 1-1⟷E G›
AOT_hence A: ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
and B: ‹
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_have ‹
using "equi-rem-thm"[THEN "≡E"(1), OF R_prop].
AOT_hence ‹
using "equi-rem:4"[THEN "≡dfE"] by blast
AOT_hence C: ‹
using "equi-rem:2"[THEN "≡dfE"] "&E" by blast
AOT_assume Ruv: ‹[R]uv›
AOT_have ‹R |: [F]-u 1-1⟷E [G]-v›
proof(safe intro!: "equi:2"[THEN "≡dfI"] "&I" "cqt:2[const_var]"[axiom_inst]
Π_minus_κ_den Ordinary.GEN "→I")
fix u'
AOT_assume ‹[[F]-u]u'›
AOT_hence 0: ‹[λz [F]z & z ≠E u]u'›
using Π_minus_κE by fast
AOT_have 0: ‹[F]u' & u' ≠E u›
by (rule "β→C"(1)[where κ1κn="AOT_term_of_var (Ordinary.Rep u')"]) (fact 0)
AOT_have ‹
using A[THEN "Ordinary.∀E"[where α=u'], THEN "→E", OF 0[THEN "&E"(1)]].
then AOT_obtain v' where
v'_prop: ‹<>[
using "equi:1"[THEN "≡E"(1)] "Ordinary.∃E"[rotated] by fastforce
AOT_show ‹∃!v' ([[G]- de"\equiv
proof (safe intro!: "equi:1"[THEN "≡
"&I" Ordinary.GEN "→I")
java.lang.NullPointerException
proof (rule Π_minus_κI;
safe intro!: "β←C"(1) "cqt:2" "&I" "thm-neg=E"[THEN "≡E"(2)])
AOT_show ‹[G]v'› using v'_prop "&E" by blast
next
AOT_show ‹¬v' =E v› F›
proof (rule "raa-cor:2")
AOT_assume ‹v' =E v›
AOT_hence ‹v' = v›
AOT_hence Ruv': ‹[R]uv'› using "rule=E" RAOT_thus ‹
AOT_have ‹u' =E u›
EN "Ordina.∀
THEN "Ordinary.∀E"[where α=v'], THEN "→E", THEN "→E"])
(safe intro!: "&I" 0[THEN "&E"(1)] fu
v'_prop[THEN "&E"(1), THEN "&E"(1)]
Ruv' v'_prop[THEN "&E"(1), THEN "&E"(2)])
moreover AOT_have ‹¬(u' =E u)›
using "0" "&E"(2) "≡E"(1) "thm-neg=E" by blast
ultimately AOT_show ‹u' =E u & ¬u' =E u›≈
qed
qed
next
AOT_show ‹[R]u'v'› using v'_prop "&E" by blast
next
fix t
AOT_assume t_prop: ‹
AOT_have gt_t_noteq_v: ‹[G]t & t ≠
apply (rule "β→su>E G G\approx H > ≈
apply (rule Π_minus_κE)
by (fact t_prop[THEN "&E"(1)])
AOT_show ‹t =E v'›
java.lang.NullPointerException
OF "&I", OF gt_t_noteq_v[THEN "&E"(1)],
OF t_prop[THEN "&E"(2)]].
qed
next
fix v'
AOT_assume G_minus_v_v': ‹[[G]-v]v'›
AOT_have gt_t_noteq_v: ‹[G]v' & v' ≠E v›
java.lang.NullPointerException
apply (rule Π_minus_κE)
by (fact G_minus_v_v')
AOT_have ‹∃!u([F]u & [R]uv')›
using B[THEN "Ordinary.∀E", THEN "→E", OF gt_t_noteq_v[THEN "&E"(1)]].
then AOT_obtain u' where
u'_prop: ‹
using "equi:1"[THEN "≡E"(1)] "Ordinary.∃E"[rotated] by fastforce
AOT_show ‹∃!u' ([[F]-u]u' & [R]u'v')›
proof (safe intro!: "equi:1"[THEN "≡E"(2)] "Ordinary.∃I"[where β=u'] "&I"
u'_prop[THEN "&E"(1), THEN "&E"(2)] Ordinary.GEN "→I")
AOT_show ‹[[F]-u]u'›
proof (rule Π_minus_κI;
safe intro!: "β←C"(1) "cqt:2" "&I" "thm-neg=E"[THEN "≡E"(2)]
u'_prop[THEN "&E"(1), THEN "&E"(1)]; rule "raa-cor:2")
java.lang.NullPointerException
AOT_hence ‹u' = u›
using "=E-simple:2" "vdash-properties:10" by blast
AOT_hence Ru'v: ‹[R]u'v› using "rule=E" Ruv id_sym by fast
AOT_have ‹v' ≠E v›
using "&E"(2) gt_t_noteq_v by blast
AOT_hence v'_noteq_v: ‹¬(v' =E v)› by (metis "≡E"(1) "thm-neg=E")
AOT_have ‹
using A[THEN "Ordinary.∀E", THEN "→E",
OF u'_prop[THEN "&E"(1), THEN "&E"(1)],
THEN "equi:1"[THEN "≡E"(1)]].
then AOT_obtain t where
t_prop: ‹[G]t & [R]u't & ∀v ([G]v & [R]u'v → v =E t)›
using "Ordinary.∃E"[rotated] by meson
AOT_have ‹v =E t› if ‹[G]v› and ‹[R]u'v› for v
using t_prop[THEN "&E"(2), THEN "Ordinary.∀E", THEN "→E",
OF"&I byb+
java.lang.NullPointerException
by (auto simp: gt_t_noteq_v[THEN "&E"(1)] Ru'v gv
u'_prop[THEN "&E"(1), THEN "&E"(2)])
AOT_hence ‹v' =E v›
using "rule=E" "=E-simple:2" id_sym "→E" by fast
AOT_thus ‹v' =E v & ¬v' =\< by
using v'_noteq_v "&I" by blast
qed
next
fix t
AOT_assume 0: ‹[[F]-u]t & [R]tv'›
moreover AOT_have ‹[F]t & t ≠E u›
apply (rule "β→C"(1)[where κ1κn="AOT_term_of_var (Ordinary.Rep t)"])
apply (rule Π_minus_κE)
by (fact 0[THEN "&E"(1)])
ultimately AOT_show ‹t =\‹
using u'_prop[THEN "&E"(2), THEN "Ordinary.∀E", THEN "→E", OF "&I"]
"&E" by blast
qed
qed
AOT_hence ‹∃R R |: [F]-u 1-1⟷E [G]-v›
by (rule "∃I")
} note 1 = this
oreover {
AOT_assume not_Ruv: ‹¬[R]uv›
java.lang.NullPointerException
using A[THEN "Ordinary.∀E", THEN "→E", OF fu].
then AOT_obtain b where
b_prop: ‹O!b & ([G]b & [R]ub & ∀t([G]t & [R]ut → t =E b))›
using "equi:1"[THEN "≡E"(1)] "∃E"[rotated] by fastforce
AOT_hence ob: ‹O!b› and gb: ‹
using "&E" by blast+
AOT_have ‹O!t → ([G]t & [R]ut → t =E b)› for t
using b_prop "&E"(2) "∀E"(2) by blast
AOT_hence b_unique: ‹t =E b› if ‹O!t› and ‹ w
"m-to:1"reduc-aa:1 t)
AOT_have not_v_eq_b: ‹¬(v =E b)›
proof(rule "raa-cor:2")
AOT_assume ‹v =E b›
AOT_hence 0: ‹v = b›"∀
by (metis "=E-simple:2" "→E")
AOT_have ‹[R]uv›
using b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)]
"rule=E"[rotated, OF 0[symmetric]] by fast
AOT_thus ‹
using not_Ruv "&I" by blast
qed
AOT_have not_b_eq_v: ‹¬(b =E v)›
using "modus-tollens:1" not_v_eq_b "ord=Eequiv:2" by blast
AOT_have ‹
using B[THEN "Ordinary.∀E", THEN "→E", OF gv].
then AOT_obtain a where
a_prop: ‹O!a & ([F]a & [R]av & ∀t([F]t & [R]tv →
using "equi:1"[THEN "≡E"(1)] "∃E"[rotated] by fastforce
AOT_hence Oa: ‹O!a› and fa: ‹[F]a› and Rav: ‹[R]av›
using "&E" by blast+
AOT_have ‹O!t → ([F]t & [R]tv → t =E a)› for t
using a_prop "&E" "∀E"(2) by blast
AOT_hence a_unique: ‹t =E a› if ‹O!t› and ‹[F]t› and ‹[R]tv› for t
by (metis Adjunction "modus-tollens:1" "reductio-aa:1" that)
AOT_have not_u_eq_a: ‹¬(u =E a)›
proof(rule "raa-cor:2")
AOT_assume ‹" bybl
AOT_hence 0: ‹u = a›
by (metis "=E-simple:2" "→E")
java.lang.NullPointerException
using a_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)]
"rule=E"[rotated, OF 0[symmetric]] by fast
AOT_thus ‹[R]uv & ¬[R]uv›
using not_Ruv "&I" by blast
qed
AOT_have not_a_eq_u: ‹¬(a =E u)›
"modu-to:1"nn "or=Ee:2"b bl
let ?R = ‹«[λu'v' (u' ≠E u & v' ≠&"1),THT "E())
(u' =E a & v' =E b) ∨
(u' =E u & v' =E v)]¬›
AOT_have ‹[«?R¬]↓› by "cqt:2[lambda]"
AOT_hence ‹∃ β β = [«?R¬]›
using "free-thms:1" "≡E"(1) by fast
then AOT_obtain R1 where R1_def: ‹next
using "∃E"[rotated] by blast
AOT_have Rxy1: ‹[R]xy›
proof -
AOT_have 0: ‹[«?R¬]xy›
by (r(rule "uleE"[rota,OF R\^_def])( t1)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
using "β→C"(1)[OF 0] by simp
AOT_hence ‹') _ \\k>'" \kappa\<^ub\
by (metis "∨E"(3) "Conjunction Simplification"(1) "≡E"(1)
"modus-tollens:1" "thm-neg=E")
AOT_thus ‹[R]xy› using "&E" by blast+
AOT_have Rxy2: ‹[R]xy› if ‹
proof -
AOT_have 0: ‹
by (rule "rule=E"[rotated, OF R1_def]) (fact that(1))
AOT_have ‹(x ≠E u & y ≠E v & [R]xy) ∨ (x =E a & y =E b) ∨ (x =E \rightarrow"byme
using "β→C"(1)[OF 0] by simp
AOT_hence ‹x ≠E u & y ≠E v & [R]xy›
using that(2,3)
by (metis "∨E"(3) "Conjunction Simplification"(2) "≡E"(1)
"modus-tollens:1" "thm-neg=E")
E" bybl+
qed
AOT_have R1xy: ‹[R1]xy› if ‹[R]xy› and ‹x ≠"&E"()] "rule=E"=E" by f
by (rule "rule=E"[rotated, OF R1_def[symmetric]])
(auto intro!: "β←C"(1) "cqt:2"
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3" that "∨I"(1))
AOT_have R1ab: ‹[R1]ab›
java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
apply (safe intro!: "β "→
by (meson a_prop b_prop "&I" "&E"(1) "∨I"(1) "∨I"(2) "ord=Eequiv:1" "→E")
AOT_have R1uv: ‹[R&"by blast
apply (rule "rule=E"[rotated, OF R1_def[symmetric]])
apply (safe intro!: "β←C"(1) "cqt:2" prod_denotesI "&I")
by (meson "&I" "∨I"(2) "ord=Eequiv:1" Ordinary.ψ "→E")
moreover AOT_have ‹
proof (safe intro!: "equi:2"[THEN "≡du R]uv)\close if a:‹
fix u'
AOT_assume fu': ‹[F]u'›
{
AOT_assume not_u'_eq_u: ‹¬(u' =E u)› and not_u'_eq_a: ‹¬(u' =E a)›
AOT_hence u'_noteq_u: ‹u' ≠E u›equi:"])
by (metis "≡E"(2) "thm-neg=E")+
AOT_have ‹∃!v ([G]v & [R]u'v)›
using A[THEN "Ordinary.∀E", THEN "→E", OF fu'].
AOT_hence ‹∃v ([G]v & [R]u'v & ∀t ([G]t & [R]u't → t =E v))›
using "equi:1"[THEN "≡E"(1)] by simp
then AOT_obtain v' where
java.lang.StringIndexOutOfBoundsException: Index 123 out of bounds for length 123
using "Ordinary.∃E"[rotated] by meson
AOT_hence gv': ‹[G]v'› and Ru'v': ‹[R]u'v'›
using "&E" by blast+
AOT_have not_v'_eq_v: ‹¬), T "\forall>E"(2), THEN "\rightarrowE", THEN "→
proof (rule "raa-cor:2")
AOT_assume ‹v' =E v›
AOT_hence ‹v' = v›OF "equi1"]]
by (metis "=E-simple:2" "→E")
AOT_hence Ru'v: ‹[R]u'v›
using "rule=E" Ru'v' by fast
AOT_have ‹u' =E a›
using a_unique[OF Ordinary.ψ, OF fu', OF Ru'v].
java.lang.NullPointerException
using not_u'_eq_a "&I" by blast
qed
AOT_hence v'_noteq_v: ‹
using "≡E"(2) "thm-neg=E" by blast
AOT_have ‹∀t ([G]t & [R]u't → t =E v')›
using v'_prop "&E" by blast
AOT_hence ‹[G]t & [R]u't → t =E v'› for t
using "Ordinary.∀E" by meson
AOT_hence v'_unique: ‹t ="E"(22,TH "<forallE
by (metis "&I" that "→E")
AOT_have ‹
proof (safe intro!: "&I" gv' R1xy Ru'v' u'_noteq_u u'_noteq_a "→I"
Ordinary.GEN "thm-neg=E"[THEN "≡E"(2)] not_v'_eq_v)
fix t
AOT_assume 1: ‹
AOT_have ‹[R]u't›
using Rxy1[OF 1[THEN "&E"(2)], OF u'_noteq_u, OF u'_noteq_a].
AOT_thus ‹t =E v'›
using v'_unique 1[THEN "&E"(1)] by blast
qed
AOT_hence ‹∃v ([G]v & [R1]u'v & ∀t ([G]t & [R1]u't → t =E v))›
by (rule "Ordinary.∃I")
AOT_hence ‹
E2]
}
moreover {
AOT_assume 0: ‹u' =E u›
AOT_hence u'_eq_u: ‹u' = u›
using "=E-simple:2" "→E" by blast
AOT_have ‹∃!v ([G]v & [R1]u'v)›
proof (safe intro!: "equi:1"[THEN "≡ "E" byb
"&I" Ordinary.GEN "→I" gv)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
apply (rule "rule=E"[rotated, OF R1_def[symmetric]])
apply (safe intro!: "β←C"(1) "cqt:2" "&I" prod_denotesI)
by (safe intro!: "∨I"(2) "&I" 0 "ord=Eequiv:1"[THEN "→E", OF Ordinary.ψ])
next
fix v'
AOT_assume ‹[G]v' & [R1]u'v'›
AOT_hence 0: ‹[R1]uv'›
using "rule=E"[rotated, OF u'_eq_u] "&E"(2) by fast
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
by (rule "rule=E"[rotated, OF R1_def]) (fact 0)
AOT_have 2: ‹
(u =E a & v' =E b) ∨
(u = OR_def[symmetr]]
using "β→C"(1)[OF 1] by simp
java.lang.NullPointerException
using "≡E"(4) "modus-tollens:1" "ord=Eequiv:1" Ordinary.ψ
"reductio-aa:2" "thm-neg=E" by blast
AOT_hence ‹
using not_u_eq_a
by (metis "∨E"(2) "Conjunction Simplification"(1)
next
java.lang.NullPointerException
using 2 by (metis "∨E"(2))
AOT_thus ‹
using "&E" by blast
qed
}
moreover {
AOT_assume 0: ‹u' =E a›
using "=E-simple:2" "→E" by blast
java.lang.NullPointerException
proof (safe intro!: "equi:1"[THEN "≡E"(2)] "∃I"(2)[where β=b] "&I"
Ordinary.GEN "→I" b_prop[THEN "&E"(1)]
b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)])
AOT_show ‹[R1]u'b›
apply (rule "rule=E"[rotated, OF R1_def[symmetric]])
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
apply (rule "∨I"(1); rule "∨by (rule "β"λ>\<kappa',_)", sim])
apply (fact 0)
using b_prop "&E"(1) "ord=Eequiv:1" "→E" by blast
next
fix v'
AOT_assume gv'_R1u'v': ‹[G]v' & [R1]u'v'›
AOT_hence 0: ‹[R1]av'›
using u'_eq_a by (meson "rule=E" "&E"(2))
AOT_have 1: ‹[«?R¬]av'›
by (rule "rule=E"[rotated, OF R1_def]) (fact 0)
java.lang.NullPointerException
(a =E a & v' =E b) ∨
(a =E u & v' =E v)›
using "β→C"(1)[OF 1] by simp
moreover {
AOT_assume 0: ‹a ≠E u & v' ≠E v & [R]av'›
AOT_have ‹∃!v ([G]v & [R]u'v)›
using A[THEN "Ordinary.∀E", THEN "→E", OF fu'].
AOT_hence ‹∃!v ([G]v & [R]av)› THEN "&E"(2, THEN "∀]]
using u'_eq_a "rule=E" by fast
AOT_hence ‹∃v ([G]v & [R]av & ∀t ([G]t & [R]at → t =E v))›
using "equi:1"[THEN "≡
then AOT_obtain s where
s_prop: ‹[G]s & [R]as & ∀t ([G]t & [R]at → t =E s)›
using "Ordinary.∃E"[rotated] by meson
AOT_have ‹
using s_prop[THEN "&E"(2), THEN "Ordinary.∀E"]
gv'_R1u'v'[THEN "&E"(1)] 0[THEN "&E"(2)]
by (metis "&I" "vdash-properties:10")
moreover AOT_have ‹
using s_prop[THEN "&E"(2), THEN "Ordinary.∀E"] gv Rav
by (metis "&I" "→E")
ultimately AOT_have ‹
by (metis "&I" "ord=Eequiv:2" "ord=Eequiv:3" "→E")
moreover AOT_have ‹¬(v' =E v)›
using 0[THEN "&E"(1), THEN "&E"(2)]
by (metis "≡E"(1) "thm-neg=E")
ultimately AOT_have ‹v' =E2) THE "&"(2)forall>E"(2)[wher β
by (metis "raa-cor:3")
}
moreover {
AOT_assume ‹ ordx]
AOT_hence ‹v' =E b›
by (metis "&E"(1) not_a_eq_u "reductio-aa:1")
}
ultimately AOT_show ‹v' =E b›
by (metis "&E"(2) "∨E"(3) "reductio-aa:1")
qed
}
java.lang.NullPointerException
by (metis "raa-cor:1")
next
fix v'
AOT_assume gv': ‹[G]v'›
{
AOT_assume not_v'_eq_v: ‹¬
and not_v'_eq_b: ‹¬(v' =E b)› I" "2const_var]"[axiom_inst]
AOT_hence v'_noteq_v: ‹v' ≠E v›
java.lang.NullPointerException
by (metis "≡E"(2) "thm-neg=E")+
AOT_have ‹
using B[THEN "Ordinary.∀E", THEN
java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
using "equi:1"[THEN "≡E"(1)] by simp
then AOT_obtain u' where
u'_prop: ‹[F]u' & [R]u'v' & ∀t ([F]t & [R]tv' → t =E u')›
using "Ordinary.∃E"[rotated] by meson
AOT_hence fu': ‹[F]u'› and Ru'v': ‹[R]u'v'›
using "&E" by blast+
AOT_have not_u'_eq_u: ‹¬u' =E u›
proof (rule "raa-cor:2")
AOT_assume ‹u' =E u›
AOT_hence ‹u' = u›1that(2))
by (metis "=E-simple:2" "→E")
AOT_hence Ruv': ‹[R]uv'›
using "rule=E" Ru'v' by fast
AOT_have ‹v' =E b›
using b_unique[OF Ordinary.ψ, OF gv', OF Ruv'].
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
using not_v'_eq_b "&I" by blast
qed
AOT_hence u'_noteq_u: ‹u' ≠E u›
using "≡E"(2) "thm-neg=E" by blast
AOT_have ‹∀t ([F]t & [R]tv' → t =E u')›
using u'_prop "&E" by blast
AOT_hence ‹
using "Ordinary.∀E" by meson
AOT_hence u'_unique: ‹
by (metis "&I" that "→E")
AOT_have ‹[F]u' & [RE] by bla
proof (safe intro!: "&I" gv' R1xy Ru'v' u'_noteq_u Ordinary.GEN "→I"
"thm-neg=E"[THEN "≡E"(2)] not_v'_eq_v fu')
fix t
AOT_assume 1: ‹
AOT_have ‹[R]tv'›
using Rxy2[OF 1[THEN "&E"(2)], OF v'_noteq_v, OF v'_noteq_b].
AOT_thus ‹t =E u'›
using u'_unique 1[THEN "&E"(1)] by blast
qed
AOT_hence ‹∃u ([F]u & [R1]uv' & ∀t ([F]t & [R1]tv' → t = \open<>\
by (rule "Ordinary.∃I")
AOT_hence ‹∃!u ([F]u & [R1]uv')›
by (rule "equi:1"[THEN "≡E"(2)])
}
moreover {
java.lang.NullPointerException
AOT_hence u'_eq_u: ‹v' = v›
using "=E-simple:2" "→E" by blast
AOT_have ‹∃!u ([F]u & [R1]uv')›
proof (safe intro!: "equi:1"[THEN "≡E"(2)] "Ordinary.∃I"[where β=u]
"&I" Ordinary.GEN "→I" fu)
AOT_show ‹[R1]uv'›" that "vdash-prope:6")
by (rule "rule=E"[rotated, OF R1_def[symmetric]])
(safe intro!: "β←C"(1) "cqt:2" "&I" prod_denotesI Ordinary.ψ
"∨I"(2) 0 "ord=Eequiv:1"[THEN "→
next
fix u'
AOT_assume ‹
AOT_hence 0: ‹[R1]u'v›
using "rule=E"[rotated, OF u'_eq_u] "&E"(2) by fast
AOT_have 1: ‹
by (rule "rule=E"[rotated, OF R1_def]) (fact 0)
AOT_have 2: ‹(u' ≠E u & v ≠E v & [R]u'v) ∨AOT_🚫
java.lang.NullPointerException
(u' =E u & v =<>
using "β→C"(1)[OF 1, simplified] by simp
AOT_have ‹¬v ≠E v›
using "≡E"(4) "modus-tollens:1" "ord=Eequiv:1" Ordinary.ψ
"reductio-aa:2" "thm-neg=E" by blast
AOT_hence ‹¬F <>E
by (metis "&E"(1) "&E"(2) "∨E"(3) not_v_eq_b "raa-cor:3")
AOT_hence ‹(u' =E u & v =E v)›
using 2 by (metis "∨E"(2))
AOT_thus ‹u' =E u›
using "&E" by blast
}
moreover { OT_defiM :: <><
AOT_assume 0: ‹v' =E b›
AOT_hence v'_eq_b: ‹v' = b›
using "=E-simple:2" "→E" by blast
AOT_have ‹∃!u ([F]u & [R1]uv')›
java.lang.NullPointerException
Ordinary.GEN "→I" b_prop[THEN "&E"(1)] Oa fa
b_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)])
AOT_show ‹[R1]av'›
apply (rule "rule=E"[rotated, OF R1_def[symmetric]])
apply (safe intro!: "β←C"(1) "cqt:2" "&I" prod_denotesI)
apply (rule "∨I"(1); rule "∨I"(2); rule "&I")
using Oa "ord=Eequiv:1" "→E" apply blast
using "0" by blast
next
fix u'
AOT_assume fu'_R1u'v': ‹[F]u' & [R1]u'v'›
using v'_eq_b by (meson "rule=E" "&E"(2))
AOT_have 1: ‹
by (rule "rule=E"[rotated, OF R1_def]) (fact 0)
AOT_have ‹(u' ≠E u & b ≠E v & [R]u'b) ∨
(u' =E a & b =E b) ∨
java.lang.NullPointerException
using "β→C"(1)[OF 1, simplified] by simp
moreover {
AOT_assume 0: ‹u' ≠E u & b ≠E v & [R]u'b›
AOT_have ‹∃!u ([F]u & [R]uv')›
using B[THEN "Ordinary.∀E", THEN "→E", OF gv'].
AOT_hence ‹∃!u ([F]u & [R]ub)›
using v'_eq_b "rule=E" by fast
AOT_hence ‹∃u ([F]u & [R]ub & ∀t ([F]t & [R]tb → t =E u))›
using "equi:1"[THEN "≡E"(1)] by fast
then AOT_obtain s where
s_prop: ‹[F]s & [R]sb & ∀t ([F]t & [R]tb → t =E s)›
using "Ordinary.∃E"[rotated] by meson
AOT_have ‹u' =E s›
using s_prop[THEN "&E"(2), THEN "Ordinary.∀E"]
fu'_R1u'v'[THEN "&E"(1)] 0[THEN "&E"(2)]
by (metis "&I" "→E")
moreover AOT_have ‹u =E s›
using s_prop[THEN "&E"(2), THEN "Ordinary.∀E"] fu Rub
by ( &I""\rightarrow
ultimately AOT_have ‹u' =E u›
by (metis "&I" "ord=Eequiv:2" "ord=Eequiv:3" "→E")
moreover AOT_have ‹¬(u' =E u)›
using 0[THEN "&E"(1), THEN "&E"(1)] by (metis "≡E"(1) "thm-neg=E")
ultimately AOT_have ‹u' =E a›
by (metis "raa-cor:3")
}
moreover {
AOT_assume ‹u' =E u & b =E v›
AOT_hence ‹u' =E a›
by (metis "&E"(2) not_b_eq_v "reductio-aa:1")
}
ultimately AOT_show ‹u' =E a›
by (metis "&E"(1) "∨E"(3) "reductio-aa:1")
qed
}
ultimately AOT_show \AOT_theorem"equ-r-thm":
by (metis "raa-cor:1")
qed
java.lang.NullPointerException
using 1 by blast
}
ultimately AOT_have ‹∃R R |: [F]-u 1-1⟷E [G]-v›
using R_prop by (metis "reductio-aa:2")
java.lang.NullPointerException
java.lang.NullPointerException
"P'-eq": ‹[F]-u ≈E [G]-v & [F]u & [G]v → F ≈E G›
(safe intro!: "→I"; frule "&E"(1); drule "&E"(2);
frule "&E"(1); drule "&E"(2))
AOT_have ‹[λz [Π]z & z ≠"<>I
note Π_minus_κI = "rule-id-df:2:b[2]"[
where τAOT_a ‹
and Π_minus_κE = "rule-id-df:2:a[2]"[
where τ=‹(λAOT_h \<pen\
AOT_have Π_minus_κ_den: ‹[Π]> ([GG]v\rightarrow \existsu(F]uv)\close
by (rule Π_minus_κI) "cqt:2[lambda]"+
AOT_have Π_minus_κE1: ‹[Π]\ "equi2[T "\<equiv\
and Π_minus_κE2: ‹κ' ≠E κ› if ‹
proof -
AOT_have ‹[λz [Π]z & z ≠ \openG]v\<>\
using Π_minus_κE that by fast
java.lang.NullPointerException
by (rule "β→C"(1))
AOT_thus ‹
using "&E" by blast+
qed
AOT_have Π_minus_κI': ‹[[Π]-\κ]κ'› if ‹[Π]κ'› and ‹
proof -
AOT_have κ'_den: ‹κ'↓›
by (metis "russell-axiom[exe,1].ψmet"THEN"<>E
AOT_have ‹[λz [Π]z & z ≠E κappl cqt2la]"
by (safe intro!: "β←C"(1) "cqt:2" κ'_den "&I" that)
AOT_thus ‹
using Π_minus_κI by fast
qed
AOT_assume Gv: ‹[G]v›
AOT_assume Fu: ‹[F]u›
AOT_assume ‹ cqt:2[llamb]"
AOT_hence ‹∃R R |: [app (AO\openy&Gy&[R]xy\<close
using "equi:3"[THEN "≡dfE"] by blast
then AOT_obtain R where R_prop: ‹R |: [F]-u 1-1⟷E [G]-">I)a fru"E()) a dr "E()
using "∃E"[rotated] by blast
AOT_hence Fact1: ‹→
and Fact1': ‹∀s([[G]-v]s → ∃!r ([[F]-forall>x(\lambda O] F]x]x\rightarrow!y(\lambdax[!x & []x]y&[]xy))›
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_have ‹
using "equi-rem-thm"[unvarify F G, OF Π_minus_κ_den, OF Π_m ‹
THEN "≡E"(1), OF R_prop].
AOT_hence ‹R |: [F]-u 1-1⟶E [G]-v & R |: [F]-u ⟶><>[
using "equi-rem:4"[THEN "≡dfE"] by blast
AOT_hence Fact2:
java.lang.NullPointerException
using "equi-rem:2"[THEN "≡d[!x &[]x<close
let ?R = ‹«[λxy ([[F]-u]x & [[G]-v]y & [R]xy) ∨ (x =\rig>E]
AOT_have R_den: ‹«?R¬↓›
AOT_show ‹
proof(safe intro!: "equi:3"[THEN "≡dfI"] "∃I"(1)[where τ="?R"] R_den
"equi:2"[THEN "≡dfI"] "&I" "cqt:2" Ordinary.GEN "→I")
fix r
AOT_assume Fr: ‹[F]r›
{
AOT_assume not_r_eq_u: ‹¬(r =E u)›
AOT_hence r_noteq_u: ‹r ≠E u›
using "≡rig \exists (λ
AOT_have ‹[[F]-u]r›
by(rule Π_minus_κI; safe intro!: "β←C"(1) "cqt:2" "&I" Fr r_noteq_u)
AOT_hence ‹∃!s ([[G]-v]s & [R]rs)›
using Fact1[THEN "∀E"(2)] "→E" Ordinary.ψ by blast
🚫
using "equi:1"[THEN "≡E"(1)] by simp
then AOT_obtain s where s_prop: ‹[[G]-v]s & [R]rs & ∀t ([[G]-v]t & [R]rt → t =E s)›
using "Ordinary.∃E"[rotated] by meson
AOT_hence G_minus_v_s: ‹[[G]-v]s› and Rrs: ‹[R]rs›
using "&E" by blast+
AOT_have s_unique: ‹t =E s› if ‹[[G]-v]t› and ‹[R]rt› for t
using s_prop[THEN "&E"(2), THEN "Ordinary.∀E", THEN "→E", OF "&I", OF that].
AOT_have Gs: ‹[G]s›
using Π_minus_κE1[OF G_minus_v_s].
AOT_have s_noteq_v: ‹
using Π_minus_κE2[OF G_minus_v_s].
AOT_have ‹∃s ([G]s & [«?R¬]rs & (∀t ([G]t & [«?R¬
:"Ord<existsI
AOT_show ‹[«?R¬]rs›
by (auto intro!: "\AOT_hence\open(>x[O]x [F]xx\rightarrow<>y
s_noteq_v Rrs r_noteq_u
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3")
next
fix t
AOT_assume 0: ‹[G]t & [«?R¬]rt›
AOT_hence ‹([[F]-u]r & [[G]-v]t & [R]rt) ∨ (r =E u & t =E v)›
using "β→C"(1)[OF 0[THEN "&E"(2)], simplified] by blast
AOT_hence 1: ‹[[F]-u]r & [[G]-v]t & [R]rt› \<forallE
using not_r_eq_u by (metis "&E"(1) "∨E"(3) "reductio-aa:1")
AOT_show ‹t =E s›
qed
}
moreover {
AOT_assume r_eq_u: ‹
AOT_have ‹∃s ([G]s & [«?R¬]rs & (∀
proof(safe intro!: "Ordinary.∃I"[where β=v] "&I" Gv Ordinary.GEN "→I")
AOT_show ‹[«?R¬]rv›
by (auto intro!: "β←C"(1) "cqt:2" "&I" "∨I"(2) Π_minus_κI' Fr r_eq_u
"ord=Eequiv:1"[THEN "→le>C(1)"cqt:"""2[const"[axi]
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3")
next
fix t
AOT_assume 0: ‹
java.lang.NullPointerException
using "β→C"(1)[OF 0[THEN "&E"(2)], simplified] by blast
AOT_hence ‹r =uxclo
using r_eq_u Π_minus_κE2
by (metis "&E"(1) "∨E"(2) "≡E"(1) "reductio-aa:1" "thm-neg=E")
AOT_thus ‹t =E v› using "&E" by blast
a simp ad Associativ of ")
}
ultimately AOT_show ‹‹
using "reductio-aa:2" "equi:1"[THEN "≡E"(2)] by fast
next
fix s
AOT_assume Gs: ‹[G]s›
{
AOT_assume not_s_eq_v: ‹¬
AOT_hence s_noteq_v: ‹s ≠
using "≡E"(2) "thm-neg=E" by blast
java.lang.NullPointerException
by (rule Π_minus_κI; auto intro!: "β←C"(1) "cqt:2" "&I" Gs s_noteq_v)
AOT_hence ‹∃!r ([[F]-u]r & [R]rs)›
using Fact1'[THEN "Ordinary.∀E"] "→E" by blast
java.lang.NullPointerException
using "equi:1"[THEN "≡E"(1)] by simp
then AOT_obtain r where
java.lang.NullPointerException
using "Ordinary.∃E"[rotated] by meson
AOT_hence F_minA g:\open
using "&E" by blast+
AOT_have r_unique: ‹
using r_prop[THEN "&E"(2), THEN "Ordinary.∀E",
THEN "→E", OF "&I", OF that].
AOT_have Fr: ‹
using Π_minus_κE1[OF F_minus_u_r].
java.lang.NullPointerException
using Π_minus_κE2[OF F_minus_u_r].
AOT_have ‹]uv)›
proof(safe intro!: "Ordinary.∃I"[where β=r] "&I" Fr Ordinary.GEN "→I")
AOT_show ‹[«?R¬]rs›
by (auto intro!: "β←C"(1) "cqt:2" "&I" "∨I"(1) Πapply (AOT_subst ‹
Gs s_noteq_v Rrs r_noteq_u
simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3")
next
fix t
AOT_assume 0: ‹[F]t & [«?R¬appl ( add Ass
AOT_hence ‹([[F]-<>for: x
using "β→C"(1)[OF 0[THEN "&E"(2)], simplified] by blast
AOT_hence 1: ‹[[F]-u]t & [[G]-v]s & [R]ts›
using not_s_eq_v by (metis "&E"(2) "∨E"(3) "reductio-aa:1")
AOT_show ‹
qed
moreover {
AOT_assume s_eq_v: ‹s =E v›
AOT_have ‹∃r ([F]r & [«?R¬]rs & (∀t ([F]t & [«Ruv))›
proof(safe intro!: "Ordinary.∃I"[where β=u] "&I" Fu Ordinary.GEN "→I")
AOT_show ‹[«?R¬]us›
by (auto intro!: "β←C"(1) "cqt:2" "&I" prod_denotesI "∨I"(2)
Π_minus_κI' Gs s_eq_v Ordinary.ψ
"ord=Eequiv:1"[THEN "→E"])
next
AOT_assume 0: ‹[F]t & [«?R¬]ts›
java.lang.NullPointerException
using "β→C"(1)[OF 0[THEN "&E"(2)], simplified] by blast
moreover AOT_have ‹¬([[F]-u]t & [[G]-v]s & [R]ts)›
proof (rule "raa-cor:2")
AOT_assume ‹([[F]-u]t & [[G]-v]s & [R]ts)›
using &E by blas
AOT_thus ‹s =E v & ¬(s =E v)›
by (metis Π_minus_κE2 "≡AOT_hence a: open(\lambdaO]x [Fx]xx \<ightarrow
qed
ultimately AOT_have ‹
by (metis "∨E"(2))
AOT_thus ‹t =E u› using "&E" by blast
qed
}
ultimately AOT_show ‹∃!r ([F]r & [«?R¬]rs)›
using "≡E"(2) "equi:1" "reductio-aa:2" by fast
qed
"approx-cont:1": ‹∃F∃G ♢(F ≈equ-r4[TH"≡
-
let ?P = ‹«[λx E!x & ¬\AE!x]¬›
AOT_have ‹♢q0 & ♢¬q0› by (metis q0_prop)
AOT_hence 1: ‹
by (rule q0_def[THEN "=dfE"(2), rotated])
(simp add: "log-prop-prop:2")
AOT_have θ: ‹♢∃x [«Fu\close
apply (AOT_subst ‹[«?P¬]x\<OT_have0
apply (rule "beta-C-meta"[THEN "→(utoin!: "<<beta
by (fact 1)
show ?thesis
proof (rule "∃I"(1))+
AOT_have ‹♢[L]- ≈E [«?P¬] & ♢¬[L]- ≈
proof (rule "&I"; rule "RM♢"[THEN "→E"]; (rule "→I")?)
AOT_modally_strict {
AOT_assume A: \<using
AOT_show ‹
proof (safe intro!: "empty-approx:1"[unvarify F H, THEN "→E"]
"rel-neg-T:3" "&I")
AOT_show\open<guillemotleft?
next
AOT_show ‹¬∃u [L-]u›
proof (rule "raa-cor:2")
java.lang.NullPointerException
then AOT_obtain u where ‹[L-]u›
using "Ordinary.∃E"[rotated] by blast
moreover AOT_h
using "thm-noncont-e-e:2"[THEN "contingent-properties:2"[THEN "≡
THEN "&E"(2)]
by (metis "qml:2"[axiom_inst] "rule-ui:3" "→E")
ultimately AOT 🚫
by (metis "raa-cor:3")
qed
next
AOT_show ‹ u vv
proof (rule "raa-cor:2")
AOT_assume ‹\<>
then AOT_obtain u where ‹[«?P¬]u›
using "Ordinary.∃E"[rotated] by blast
AOT_hence \\[«
using "&E" by blast
AOT_hence ‹∃x [«[λ
by (rule "∃I")
AOT_thus ‹∃x [«og: \open\lambdaxOx&[G]x]v\close>
using A "&I" by blast
qed
qed
}
next
AOT_show ‹♢¬∃
using θ "&E" by blast
next
AOT_modally_strict {
AOT_assume A: ‹∃x [«?P¬]x›
AOT_have B: ‹¬[«?P¬] ≈
proof (safe intro!: "empty-approx:2"[unvarify F H, THEN "→E"]
"rel-neg-T:3" "&I")
AOT_show ‹[«?P¬]↓›apro:\open🚫
by "cqt:2[lambda]"
next
AOT_obtain x where Px: ‹[«?P¬]x›
using A "∃E" by blast
java.lang.NullPointerException
by (rule "β→C"(1))
AOT_hence 1: ‹♢E!x›
by (metis "T♢" "&E"(1) "vdash-properties:10")
‹
by (auto intro!: "β←C"(1) "cqt:2" 1)
AOT_hence ‹O!x›
by (rule AOT_ordinary[THEN "=dfI"(2), rotated]) "cqt:2[lambda]"
AOT_hence ‹O!x & [«?P¬]x›
using Px "&I" by blast
AOT_thus ‹∃u [«?P¬]u›
by (rule "∃I")
next
AOT_show ‹¬∃
proof (rule "raa-cor:2")
AOT_assume ‹∃u [L-]u›
then AOT_obtain u where ‹[L-]u›
using "Ordinary.∃E"[rotated] by blast
moreover AOT_have ‹¬[L-]u›
using "thm-noncont-e-e:2"[THEN "contingent-properties:2"[THEN "≡dfE"]]
by (metis "qml:2"[axiom_inst] "rule-ui:3" "→E" "&E"(2))
ultimately AOT_show ‹p & ¬p› for p
by (metis "raa-cor:3")
qed
qed
AOT_show ‹¬[L]- ≈E [«?P¬]›
proof (rule "raa-cor:2")
AOT_assume ‹[L]- ≈E [«?P¬]›
AOT_hence ‹[«?P¬] ≈E [L]-›
apply (rule "eq-part:2"[unvarify F G, THEN "→E", rotated 2])
apply "cqt:2[lambda]"
by (simp add: "rel-neg-T:3")
AOT_thus ‹[«?P¬] ≈E [L]- & ¬[«?P¬] ≈E [L]-›
using B "&I" by blast
qed
}
next
AOT_show ‹♢‹
using θ "&E" by blast
qed
AOT_thus ‹♢([L]- ≈E [«?P¬] & ♢¬[L]- ≈&I"
using "S5Basic:11" "≡E"(2) by blast
next
AOT_show ‹[λx [E!]x & ¬\A[E!]x]↓›
by "cqt:2"
next
AOT_show ‹[L]-↓›
by (simp add: "rel-neg-T:3")
qed
"approx-cont:2":
‹∃F∃G ♢([λz \A[F]z] ≈E G & ♢¬[λz \A[F]z] ≈E G)›
-
let ?P = ‹«[λx E!x & ¬\AE!x]¬›
AOT_have ‹♢q0 & ♢¬q0› by (metis q0_prop)
AOT_hence 1: ‹♢∃x(E!x & ¬ ‹
by (rule q0_def[THEN "=dfE"(2), rotated])
(simp add: "log-prop-prop:2")
AOT_have θ: ‹♢∃x [«?P¬]x & ♢¬∃x [«?P¬]x›
(AOT_subst \<pen[
apply (rule "beta-C-meta"[THEN "→E"]; "cqt:2")
by (fact 1)
show ?thesis
proof (rule "∃I"(1))+
AOT_have ‹♢[λz \A[L-]z] ≈E [«?P¬] & ♢¬[λz \A[L-]z] ≈E [«?P¬]›
proof (rule "&I"; rule "RM♢"[THEN "→E"]; (rule "→I")?)
AOT_modally_strict {
AOT_assume A: ‹¬∃x [«?P¬]x›
AOT_show ‹using "uniquen:1"[TH "🚫
proof (safe intro!: "empty-approx:1"[unvarify F H, THEN "→E"]
"rel-neg-T:3" "&I")
AOT_show ‹[«?P¬]↓› by "cqt:2"
next
AOT_show ‹¬ ‹
proof (rule "raa-cor:2")
AOT_assume ‹∃u [λz \A[L-]z]u›
then AOT_obtain u where ‹by (rule "\beta🚫
using "Ordinary.∃E"[rotated] by blast
AOT_hence ‹\A[L-]u›
using "β→C"(1) "&E" by blast
moreover AOT_have ‹◻¬[L-]u›
using "thm-noncont-e-e:2"[THEN "contingent-properties:2"[THEN "≡dfE"]]
by (metis RN "qml:2"[axiom_inst] "rule-ui:3" "→E" "&E"(2))
ultimately AOT_show ‹p & ¬p› for p
by (metis "Act-Sub:3" "KBasic2:1" "≡E"(1) "raa-cor:3" "→E")
qed
next
AOT_show ‹¬∃moreover AOT_have‹
proof (rule "raa-cor:2")
AOT_assume ‹∃v [«?P¬]v›
then AOT_obtain u where ‹[«?P¬]u›
using "Ordinary.∃E"[rotated] by blast
AOT_hence ‹[«?P¬]u›
using "&E" by blast
AOT_hence ‹∃x [«?P¬]x›
by (rule "∃I")
AOT_thus ‹∃x [«?P¬]x & ¬∃x [« fix vv
using A "&I" by blast
qed
next
AOT_show ‹[λz \A[L-]z]↓› by "cqt:2"
qed
}
next
AOT_show ‹♢¬∃x [«?P¬]x› using θ "&E" by blast
next
AOT_modally_strict {
AOT_assume A: ‹by (aut intro!: "\<<beta
AOT_have B: ‹¬[«?P¬] ≈E [λz \A[L-]z]›
proof (safe intro!: "empty-approx:2"[unvarify F H, THEN "→E"]
"rel-neg-T:3" "&I")
AOT_show ‹[«?P¬]↓› by "cqt:2"
next
AOT_obtain x where Px: ‹
using A "∃E" by blast
AOT_hence ‹E!x & ¬\AE!x›
by (rule "β→C"(1))
AOT_hence ‹♢E!x›
by (metis "T♢" "&E"(1) "→E")
AOT_hence ‹
by (auto intro!: "β←C"(1) "cqt:2")
AOT_hence ‹O!x›
by (rule AOT_ordinary[THEN "=dfI"(2), rotated]) "cqt:2"
AOT_hence ‹O!x & [«?P¬]x›
using Px "&I" by blast
AOT_thus ‹∃u [«?P¬]u›
by (rule "∃I")
next
AOT_show ‹ ([G]v' & [Ruv' \<ightarrow
proof (rule "raa-cor:2")
AOT_assume ‹∃u [λz \A[L-]z]u›
then AOT_obtain u where ‹[λz \A[L-]z]u›
using "Ordinary.∃E"[rotated] by blast
AOT_hence ‹\A[L-]u›
using "β→C"(1) "&E" by blast
moreover AOT_have ‹◻¬[L-]u›
"thmnoncont---e:2"[THEN "c"c-p:2"TH "\equiv\^su>d\^>f"]
by (metis RN "qml:2"[axiom_inst] "rule-ui:3" "→E" "&E"(2))
ultimately AOT_show ‹p & ¬p› for p
by (metis "Act-Sub:3" "KBasic2:1" "≡E"(1) "raa-cor:3" "→E")
qed
next
AOT_show ‹[λz \A[L-]z]↓› by "cqt:2"
qed
java.lang.NullPointerException
proof (rule "raa-cor:2")
AOT_assume ‹[λz \A[L-]z] ≈E [«?P¬]›
AOT_hence ‹[«?P¬] ≈E [λz \A[L-]z]›
by (rule "eq-part:2"[unvarify F G, THEN "→E", rotated 2])
"cqt:2"+
AOT_thus ‹[«?P¬] ≈E [λz \A[L-]z] & ¬[«?P¬] ≈E [λz \A[L-]z]›
using B "&I" by blast
qed
}
next
AOT_show ‹
using θ "&E" by blast
qed
AOT_thus ‹♢([λz fix v
using "S5Basic:11" "≡E"(2) by blast
next
AOT_show ‹[λx [E!]x & ¬\A[E!]x]↓› by "cqt:2"
next
AOT_show ‹[L]-↓›
by (simp add: "rel-neg-T:3")
qed
text‹We already have defined being equivalent on the ordinary objects in the
Extended Relation Comprehension theory.›
AOT_have ‹F ≡E G ≡df F↓ & G↓ & ∀u ([F]u ≡ [G]u)› for F G
using eqE by blast
"apE-eqE:1": ‹F ≡E G → F ≈E G›
(rule "→I")
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
AOT_have ‹∃R R |: F 1-1⟷E G›
proof (safe intro!: "∃I"(1)[where τ="«(=E)¬"] "equi:2"[THEN "≡dfI"] "&I"
"=E[denotes]" "cqt:2[const_var]"[axiom_inst] Ordinary.GEN
"→I" "equi:1"[THEN "≡E"(2)])
fix u
AOT_assume Fu: ‹[F]u›
AOT_hence Gu: ‹[G]u›
java.lang.NullPointerException
THEN "Ordinary.∀E"[where α=u], THEN "≡E"(1)]
Ordinary.ψ Fu by blast
AOT_show ‹∃v ([G]v & u =E v & ∀v' ([G]v' & u =( simp a_pa[TH "&E"(), TH"E(1)])
by (safe intro!: "Ordinary.∃I"[where β=u] "&I" GEN "→I" Ordinary.ψ Gu
"ord=Eequiv:1"[THEN "→E", OF Ordinary.ψ]
"ord=Eequiv:2"[THEN "→E"] dest!: "&E"(2))
next
fix v
AOT_assume Gv: ‹[G]v›
AOT_hence Fv: ‹[F]v›
using "≡dfE"[OF eqE, OF 0, THEN "&E"(2),
THEN "Ordinary.∀E"[where α=v], THEN "≡E"(2)]
Ordinary.ψ Gv by blast
AOT_show ‹∃u ([F]u & u =E v & ∀v' ([F]v' & v' =E v → v' =E u))›
by (safe intro!: "Ordinary.∃I"[where β=v] "&I" GEN "→I" Ordinary.ψ Fv
"ord=Eeq:1"[THEN "→
"ord=Eequiv:2"[THEN "→E"] dest!: "&E"(2))
qed
AOT_thus ‹F ≈E G›
by (rule "equi:3"[THEN "≡dfI"])
"apE-eqE:2": ‹(F ≈E G & G ≡E H) → F ≈E H›
(rule "→I")
AOT_assume ‹F ≈E G & G ≡E H›
AOT_hence ‹F ≈E G› and ‹G ≈E H›
using "apE-eqE:1"[THEN "→E"] "&E" by blast+
AOT_thus ‹F ≈E H›
by (metis Adjunction "eq-part:3" "vdash-properties:10")
java.lang.NullPointerException
(safe intro!: eqE[THEN "≡dfI"] "&I" "cqt:2" Ordinary.GEN "→I")
fix u
AOT_have ‹[λz \A[F]z]u ≡ \A[F]u›
(ru"b-C-meta"[THEN "→"
also AOT_have ‹… ≡ [F]u›
using "act-conj-act:4" "logic-actual"[act_axiom_inst, THEN "→E"] by blast
finally AOT_show ‹[λz \A[F]z]u ≡ [F]u›.
"eq-part-act:2": ‹[λz \A[F]z] ≈E F›
by (safe intro!: "apE-eqE:1"[unvarify F, THEN "→E"] "eq-part-act:1") "cqt:2"
"actuallyF:1": ‹\A(F ≈E [λz \A[F]z])›
OT_hence 3 3: ‹
AOT_have 1: ‹\A([F]x ≡ \A[F]x)› for x
by (meson "Act-Basic:5" "act-conj-act:4" "≡E"(2) "Commutativity of ≡")java.lang.NullPointerException
AOT_have ‹\A([F]x ≡ [λz \A[F]z]x)› for x
apply (AOT_subst ‹[λz \A[F]z]x› ‹\A[F]x›)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
by (fact 1)
AOT_hence ‹O!x → using "e-r:2"[T "\equiv\^su>d\^sub>fE" OFOF 1 "&E" b blast+
by (metis "→I")
AOT_hence ‹∀u \A([F]u ≡ [λz \A[F]z]u)›
using "∀AOT_he BB:<><
AOT_hence 1: ‹\A∀u ([F]u ≡ [λz \A[F]z]u)›
by (metis "Ordinary.res-var-bound-reas[2]" "→E")
AOT_modally_strict {
AOT_have ‹[λz \A[F]z]↓› by "cqt:2"
} note 2 = this
AOT_have ‹\A(F ≡E [λz \A[F]z])›
apply (AOT_subst ‹F ≡E [λz \A[F]z]› ‹∀u ([F]u ≡ [λz \A[F]z]u)›)
using eqE[THEN "≡Df", THEN "≡S"(1), OF "&I",
OF "cqt:2[const_var]"[axiom_inst], OF 2]
by (auto simp: 1)
moreover AOT_have ‹\A(F ≡E [λz \A[F]z] → F ≈E [λz \A[F]z])›
using "apE-eqE:1"[unvarify G, THEN "RA[2]", OF 2] by metis
java.lang.NullPointerException
by (metis "act-cond" "→E")
"actuallyF:2": ‹Rigid([λz \A[F]z])›
(safe intro!: GEN "→I" "df-rigid-rel:1"[THEN "≡dfI"] "&I")
AOT_show ‹[λz []x ]x & [G]x]›
AOT_show ‹◻∀x ([λz \A[F]z]x → ◻[λz \A[F]z]x)›
proof(rule RN; rule GEN; rule "→I")
AOT_modally_strict {
fix x
AOT_assume ‹[λz 1-cor[THE "≡
AOT_hence ‹\A[F]x›
by (rule "β→C"(1))
AOT_hence 1: ‹◻\A[F]x› by (me
AOT_show ‹◻[λz \A[F]z]x›
apply (AOT_subst ‹[λz \A[F]z]x› ‹\A[F]x›)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
by (fact 1)
}
qed
"approx-nec:1": ‹Rigid(F) → F ≈E [λz \A[F]z]›
\rightarrow>I")
AOT_assume ‹h_or_rbokpord.iscless t ==>
AOT_hence A: ‹◻∀x ([F]x → ◻[F]x)›
using "df-rigid-rel:1"[THEN "≡dfE", THEN "&E"(2)] by blast
AOT_hence 0: ‹∀x ◻([F]x → ◻[F]x)›
using CBF[THEN "→E"] by blast
AOT_hence 1: ‹∀x ([F]x → ◻[F]x)›
using A "qml:2"[axiom_inst, THEN "→E"] by blast
AOT_have act_F_den: ‹[λz \A[F]z]↓›
by "cqt:2"
AOT_show ‹F ≈E [λz \A[F]z]›
proof (safe intro!: "apE-eqE:1"[unvarify G, THEN "→E"] eqE[THEN "≡dfI"] "&I"
"cqt:2" act_F_den Ordinary.GEN "→I" "≡I")
fix u
AOT_assume ‹[F]u›G]y & [Rxy 🚫
AOT_hence ‹◻[F]u›
using 1[THEN "∀E"(2), THEN "→E"] by blast
AOT_hence act_F_u: ‹\A[F]u›
by (metis "nec-imp-act" "→E")
AOT_show ‹
by (auto intro!: "β←C"(1) "cqt:2" act_F_u)
next
fix u
AOT_assume ‹[λz \A[F]z]u›
AOT_hence ‹\A[F]u›
by (rule "β→C"(1))
AOT_thus ‹[F]u›
using 0[THEN "∀E"(2)]
by (metis "≡E"(1) "sc-eq-fur:2" "→E")
qed
"approx-nec:2":
‹F ≈
(rule "≡I"; rule "→I")
AOT_assume 0: ‹F ≈E G›
AOT_assume 0: ‹F ≈E G›
AOT_hence ‹∀H (H ≈E F ≡ H ≈E G)›
using "eq-p:4"[THEN "\<equivE
AOT_have ‹[λz \A[H]z] ≈E F ≡ [λz \A[H]z] ≈E G› for H
by (rule "∀E"(1)[OF "eq-part:4"[THEN "≡E"(1), OF 0]]) "cqt:2"
AOT_thus ‹∀H ([λz \A[H]z] ≈E F ≡ [λz \A[H]z] ≈E G)›
by (rule GEN)
AOT_assume 0: ‹∀H ([λz \A[H]z] ≈E F ≡ [λz \A[H]z] ≈E G)›
AOT_obtain H where ‹Rigidifies(H,F)›
using "rigid-der:3" "∃E" by metis
AOT_hence H: ‹Rigid(H) & ∀x ([H]x ≡ [F]x)›
using "df-rigid-rel:2"[THEN "≡dfE"] by blast
AOT_have H_rigid: ‹◻∀x ([H]x → ◻[H]x)›
using H[THEN "&E"(1), THEN "df-rigid-rel:1"[THEN "≡dfE"], THEN "&E"(2)].
AOT_hence ‹∀x ◻([H]x → ◻[H]x)›
using "CBF" "vdash-properties:10" by blast
AOT_hence ‹◻([H]x → ◻[H]x)› for x using "∀E"(2) by blast
AOT_hence rigid: ‹[H]x ≡ \A[H]x› for x
by (metis "≡E"(6) "oth-class-taut:3:a" "sc-eq-fur:2" "→E")
AOT_have ‹H ≡E F›
proof (safe intro!: eqE[THEN "≡dfI"] "&I" "cqt:2" Ordinary.GEN "→I")
AOT_show ‹[H]u ≡ [F]u› for u using H[THEN "&E"(2)] "∀E"(2) by fast
qed
AOT_hence ‹H ≈E F› "&I"]"&E"
by (rule "apE-eqE:2"[THEN "→E", OF "&I", rotated])
(simp add: "eq-part:1")
AOT_hence F_approx_H: ‹F ≈E H›
by (metis "eq-part:2" "→E")
moreover AOT_have H_eq_act_H: ‹
proof (safe intro!: eqE[THEN "≡dfI"] "&I" "cqt:2" Ordinary.GEN "→I")
AOT_show ‹AOT_thus 🚫
apply (AOT_subst ‹[λz \A[H]z]u› ‹\A[H]u›)
apply (rule "beta-C-meta"[THEN "→E"])
apply "cqt:2[lambda]"
using rigid by blast
qed
AOT_have a: ‹F ≈E [λz \A[H]z]›
apply (rule "apE-eqE:2"[unvarify H, THEN "→E"])
apply "cqt:2[lambda]"
using F_approx_H H_eq_act_H "&I" by blast
AOT_hence ‹[λz \A[H]z] ≈E F›
apply (rule "eq-part:2"[unvarify G, THEN "→E", rotated])
"cqt:2[lambda]"
AOT_hence b: ‹[λz \A[H]z] ≈E G›
by (rule 0[THEN "∀E"(1), THEN "≡E"(1), rotated]) "cqt:2"
AOT_show ‹F ≈E G›1,THEN "E"(2)] "I" by auto
by (rule "eq-part:3"[unvarify G, THEN "→E", rotated, OF "&I", OF a, OF b])
"cqt:2"
"approx-nec:3":
‹(Rigid(F) & Rigid(G)) → ◻(F ≈E G → ◻F ≈E G)›
(rule "→I")
AOT_assume ‹Rigid(F) & Rigid(G)›]xz→
AOT_hence ‹◻∀x([F]x → ◻[F]x)› and ‹◻∀x([G]x → ◻[G]x)›
using "df-rigid-rel:1"[THEN "≡dfE", THEN "&E"(2)] "&E" by blast+
AOT_hence ‹◻(◻∀x([F]x → ◻ "∃
using "KBasic:3" "4" "&I" "≡E"(2) "vdash-properties:10" by meson
moreover AOT_have ‹◻(◻∀x([F]x → ◻ AOT_ths \open>!y ([\<\lambda
◻(F ≈E G → ◻F ≈E G)›
proof(rule RM; rule "→I"; rule "→I")
AOT_modally_strict {
AOT_assume ‹◻∀x([F]x → ◻[F]x) & ◻∀x([G]x → ◻[G]x)›
AOT_hence ‹◻∀x([F]x → ◻[F]x)› and ‹◻∀x([G]x → ◻[G]x next
using "&E" by blast+
AOT_hence ‹
using CBF[THEN "→E"] by blast+
AOT_hence F_nec: ‹◻([F]x → ◻[F]x)›
and G_nec: ‹◻([G]x → ◻[G]x)› for x
using "∀E"(2) by blast+
AOT_assume ‹F ≈E G›
AOT_hence ‹∃R R |: F 1-1⟷E G›
by (metis "≡dfE" "equi:3")
then AOT_obtain R where ‹
using "∃E"[rotated] by blast
AOT_hence C1: ‹∀u ([F]u → ∃!v ([G]v & [R]uv))›
and C2: ‹∀v ([G]v → ∃!u ([F]u & [R]uv))›clo
using "equi:2"[THEN "≡dfE"] "&E" by blast+
AOT_obtain R' where ‹Rigidifies(R', R)›
using "rigid-der:3" "∃E"[rotated] by blast
AOT_hence 1: ‹Rigid(R') & ∀x1...∀xn ([R']x1...xn ≡ [R]x1...xn)›
using "df-rigid-rel:2"[THEN "≡dfE"] by blast
AOT_hence ‹◻∀x1...∀xn ([R']x1...xn → ◻[R']x: ‹
using "df-rigid-rel:1"[THEN "≡dfE"] "&E" by blast
AOT_hence ‹∀x1...∀xn (♢[R']x1...xn → ◻[R']x1...xn)›
using "≡E"(1) "rigid-rel-thms:1" by blast
AOT_hence D: ‹∀x1∀x2 (♢[R']x1x2 → ◻[R']x1x2)›
using tuple_forall[THEN "≡dfE"] by blast
AOT_have E: ‹∀x1∀x2 ([R']x1x2 ≡ [R]x1x2)›
using tuple_forall[THEN "≡"" des: "&E")
AOT_have ‹∀u ◻([F]u → ∃!v ([G]v & [R']uv))›
and ‹∀v ◻([G]v → ∃!u ([F]u & [R']uv))›
proof (safe intro!: Ordinary.GEN "→I")
fix u
AOT_show ‹◻([F]u → ∃!v ([G]v & [R']uv))›
proof (rule "raa-cor:1")
AOT_assume ‹¬◻([F]u → ∃!v ([G]v & [R']uv))›
AOT_hence 1: ‹alpha>>))›
using "KBasic:11" "≡E"(1) by blast
AOT_have ‹♢([F]u & ¬∃!v ([G]v & [R']uv))›
apply (AOT_subst ‹[F]u & ¬∃!v ([G]v & [R']uv)›
‹¬([F]u → ∃!v ([G]v & [R']uv))›)
apply (meson "≡E"(6) "oth-class-taut:1:b" "oth-class-taut:3:a")
by (fact 1)
AOT_hence A: ‹♢[F]u & ♢¬∃!v ([G]v & [R']uv)›
using "KBasic2:3" "→E" by blast
AOT_hence ‹close>us ofx.
using F_nec "&E"(1) "≡E"(1) "sc-eq-box-box:1" "→E" by blast
AOT_hence ‹[F]u›
by (metis "qml:2"[axiom_inst] "→E")
AOT_hence ‹∃!v ([G]v & [R]uv)›
using C1[THEN "Ordinary.∀E", THEN "→
AOT_hence ‹∃v ([G]v & [R]uv & ∀v' ([G]v' & [R]uv' → v' =E v))›
equi1[THEN "≡
then AOT_obtain a where
a_prop: ‹O!a & ([G]a & [R]ua & ∀v' ([G]v' & [R]uv' → v' =E a))›
using "∃E"[rotated] by blast
AOT_have ‹∃v ◻([G]v & [R']uv & ∀v' ([G]v' & [R']uv' → v' =E v))›
proof(safe intro!: "∃I"(2)[where β=a] "&I" a_prop[THEN "&E"(1)]
"KBasic:3"[THEN "≡E"(2)])
‹
using a_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)]
by (metis G_nec "qml:2"[axiom_inst] "→E")
next
AOT_show ‹◻[R']ua›
using D[THEN "∀E"(2), THEN "∀E"(2), THEN "→E"]
E[THEN "∀E"(2), THEN "∀E"(2), THEN "≡E"(2),
OF a_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)]]
java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
next
AOT_have ‹
proof (rule Ordinary.GEN; rule "raa-cor:1")
fix v'
AOT_assume ‹¬◻([G]v' & [R']uv' → v' =E a)›
AOT_hence ‹♢¬([G]v' & [R']uv' → v' =E a)›
by (metis "KBasic:11" "≡E"(1))
AOT_hence ‹♢([G]v' & [R']uv' & ¬v' =E a)›
by (AOT_subst ‹[G]v' & [R']uv' & ¬v' =E a›
‹¬([G]v' & [R']uv' → v' =E a)›)
(meson "≡E"(6) "oth-class-taut:1:b" "oth-class-taut:3:a")
AOT_hence 1: ‹♢[G]v'› and 2: ‹♢[R']uv'› and 3: ‹♢¬v' =E a›
using "KBasic2:3"[THEN "→E", THEN "&E"(1)]
"KBasic2:3"[THEN "→E", THEN "&E"(2)] by blast+
AOT_have Gv': ‹[G]v'› using G_nec 1
by (meson "B♢" "KBasic:13" "→E")
AOT_have ‹◻[R']uv'›
THEN \<>E
AOT_hence R'uv': ‹[R']uv'›
by (metis "B♢" "T♢" "→E")
AOT_hence ‹[R]uv'›
THEN ""∀≡
AOT_hence ‹v' =E a›
using a_prop[THEN "&E"(2), THEN "&E"(2), THEN "Ordinary.∀E",
THEN "→E", OF "&I", OF Gv'] by blast
AOT_hence ‹◻(v' =E a)›
by (metis "id-nec3:1" "≡E"(4) "raa-cor:3")
moreover AOT_have ‹¬◻(v' =E a)›
using 3 "KBasic:11" "≡E"(2) by blast
ultimately AOT_show ‹◻(v' =E a) & ¬◻(v' =E a)›
using "&I" by blast
qed
AOT_thus ‹◻∀v'([G]v' & [R']uv' → v' =E a)›
using "Ordinary.res-var-bound-reas[BF]" "→E" by fast
qed
AOT_hence ‹◻∃OF x_prop[THEN "&E(2), THEN "&E"(2)]].
using "Ordinary.res-var-bound-reas[Buridan]" "→E" by fast
AOT_hence ‹◻∃!v ([G]v & [R']uv)›
by (AOT_subst_thm "equi:1")
moreover AOT_have ‹¬◻∃!v ([G]v & [R']uv)›
using A[THEN "&E"(2)] "KBasic:11"[THEN "≡pr:10)
ultimately AOT_show ‹◻∃!v ([G]v & [R']uv) & ¬◻∃!v ([G]v & [R']uv)›
by (rule "&I")
qed
next
fix v
AOT_show ‹◻([G]v → ∃!u ([F]u & [R']uv))›
proof (rule "raa-cor:1")
AOT_assume ‹¬◻([G]v → ∃!u ([F]u & [R']uv))›
AOT_hence 1: ‹♢¬([G]v → ∃!u ([F]u & [R']uv))›
using "KBasic:11" "≡E"(1) by blast
AOT_hence ‹♢([G]v & ¬∃!u ([F]u & [R']uv))›
by (AOT_subst ‹[G]v & ¬∃!u ([F]u & [R']uv)›
‹¬([G]v → ∃!u ([F]u & [R']uv))›)
(meson "≡E"(6) "oth-class-taut:1:b" "oth-class-taut:3:a")
AOT_hence A: ‹♢[G]v & ♢¬∃!u ([F]u & [R']uv)›
using "KBasic2:3" "→E" by blast
AOT_hence ‹◻[G]v›
using G_nec "&E"(1) "≡E"(1) "sc-eq-box-box:1" "→E" by blast
AOT_hence ‹[G]v› by (metis "qml:2"[axiom_inst] "→E")
AOT_hence ‹∃!u ([F]u & [R]uv)›
using C2[THEN "Ordinary.∀E", THEN "→E"] by blast
‹›
using "equi:1"[THEN "≡E"(1)] by auto
then AOT_obtain a where
a_prop: ‹O!a & ([F]a & [R]av & ∀u' ([F]u' & [R]u'v → u' =E a))›
using "∃E"[rotated] by blast
AOT_have ‹∃u ◻([F]u & [R']uv & ∀u' ([F]u' & [R']u'v → u' =E u))›
proof(safe intro!: "∃I"(2)[where β=a] "&I" a_prop[THEN "&E"(1)]
"KBasic:3"[THEN "≡E"(2)])
AOT_show ‹◻[F]a›
using a_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(1)]
by (metis F_nec "qml:2"[axiom_inst] "→E")
AOT_show ‹◻[R']av›
using D[THEN "∀E"(2), THEN "∀E"(2), THEN "→E"]
E[THEN "∀E"(2), THEN "∀E"(2), THEN "≡E"(2),
OF a_prop[THEN "&E"(2), THEN "&E"(1), THEN "&E"(2)]]
by (metis "T♢" "→E")
next
AOT_have ‹∀u' ◻([F]u' & [R']u'v → u' =E a)›
proof (rule Ordinary.GEN; rule "raa-cor:1")
fix u'
AOT_assume ‹¬◻([F]u' & [R']u'v → u' =E a)›
AOT_hence ‹♢¬([F]u' & [R']u'v → u' =E a)›
by (metis "KBasic:11" "≡E"(1))
AOT_hence ‹♢([F]u' & [R']u'v & ¬u' =E a)›
by (AOT_subst ‹[F]u' & [R']u'v & ¬u' =E a›
‹¬([F]u' & [R']u'v → u' =E a)›)
(meson "≡E"(6) "oth-class-taut:1:b" "oth-class-taut:3:a")
AOT_hence 1: ‹♢[F]u'› and 2: ‹♢[R']u'v› and 3: ‹♢¬u' =E a›
using "KBasic2:3"[THEN "→E", THEN "&E"(1)]
"KBasic2:3"[THEN "→E", THEN "&E"(2)] by blast+
AOT_have Fu': ‹[F]u'› using F_nec 1
by (meson "B♢" "KBasic:13" "→E")
AOT_have ‹◻[R']u'v›
using 2 D[THEN "∀E"(2), THEN "∀E"(2), THEN "→E"] by blast
AOT_hence R'u'v: ‹[R']u'v›
by (metis "B♢" "T♢" "→E")
AOT_hence ‹[R]u'v›
using E[THEN "∀E"(2), THEN "∀E"(2), THEN "≡E"(1)] by blast
AOT_hence ‹u' =E a›
using a_prop[THEN "&E"(2), THEN "&E"(2), THEN "Ordinary.∀🚫
THEN "→E", OF "&I", OF Fu'] by blast
AOT_hence ‹◻(u' =E a)›
by (metis "id-nec3:1" "≡E"(4) "raa-cor:3")
moreover AOT_have ‹¬◻(u' =E a)›
using 3 "KBasic:11" "≡E"(2) by blast
ultimately AOT_show ‹◻(u' =E a) & ¬◻(u' =E a)›
using "&I" by blast
qed
AOT_thus ‹
using "Ordinary.res-var-bound-reas[BF]" "→E" by fast
qed
AOT_hence 1: ‹◻ope>∃I by fast
using "Ordinary.res-var-bound-reas[Buridan]" "→E" by fast
AOT_hence ‹◻∃!u ([F]u & [R']uv)›
by (AOT_subst_thm "equi:1")
moreover AOT_have ‹¬◻∃!u ([F]u & [R']uv)›
using A[THEN "&E"(2)] "KBasic:11"[THEN "≡E"(2)] by blast
ultimately AOT_show ‹◻∃!u ([F]u & [R']uv) & ¬◻∃!u ([F]u & [R']uv)›
by (rule "&I")
qed
qed
AOT_hence ultimately AOT_have ‹
and ‹◻∀v ([G]v → ∃!u ([F]u & [R']uv))›
using "Ordinary.res-var-bound-reas[BF]"[THEN "→E"] by auto
moreover AOT_have ‹◻[R']↓› and ‹◻[F]↓›":2[constvar]"[a])
by (simp_all add: "ex:2:a")
ultimately AOT_have ‹◻([R']↓ & [F]↓ & [G]↓ & ∀u ([F]u → ∃!v ([G]v & [R']uv)) &
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
using "KBasic:3" "&I" "≡E"(2) by meson
AOT_hence ‹◻R' |: F 1-1⟷E G›
by (AOT_subst_def "equi:2")
AOT_hence ‹∃R ◻R |: F 1-1⟷E G›
by (rule "∃I"(2))
AOT_hence ‹◻∃R R |: F 1-1⟷E G›
by (metis Buridan "→E")
AOT_thus ‹◻F ≈E G›
by (AOT_subst_def "equi:3")
}
qed
ultimately AOT_show ‹
using "→E" by blast
numbers :: ‹τ ==> τ ==> φ› (‹Numbers'(_,_')›)
‹Numbers(x,G) ≡df A!x & G↓ & ∀F(x[F] ≡ [λz \A[F]z] ≈E G)›
"numbers[den]":
‹Π↓ → (Numbers(κ, Π) ≡ A!κ & ∀F(κ[F] ≡ [λz \A[F]z] ≈E Π))›
apply (safe intro!: numbers[THEN "≡dfI"] "&I" "≡I" "→I" "cqt:2"
dest!: numbers[THEN "≡1:‹
using "&E" by blast+
"num-tran:1":
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
(safe intro!: "→I" "≡I")
AOT_assume 0: ‹G ≈E H›
AOT_assume ‹Numbers(x, G)›
AOT_hence Ax: ‹A!x› and θ: ‹∀F (x[F] ≡ [λz \A[F]z] ≈E G)›
using numbers[THEN "≡dfE"] "&E" by blast+
AOT_show ‹Numbers(x, H)›
proof(safe intro!: numbers[THEN "≡dfI"] "&I" Ax "cqt:2" GEN)
fix F
AOT_have ‹x[F] ≡ [λz \A[F]z] ≈E G›
using θby (r "qui3[T "≡
also AOT_have ‹… ≡ [λz \A[F]z] ≈E H›
using 0 "approx-nec:2"[THEN "≡E"(1), THEN "∀E"(2)] by metis
finally AOT_show ‹x[F] ≡ [λz \A[F]z] ≈E H›.
qed
AOT_assume ‹G ≈E H›
AOT_hence 0: ‹H ≈E G›
by (metis "eq-part:2" "→E")
AOT_assume ‹Numbers(x, H)›
AOT_hence Ax: ‹A!x› and θ: ‹∀F (x[F] ≡ [λz \A[F]z] ≈E H)›
using numbers[THEN "≡dfE"] "&E" by blast+
AOT_show ‹Numbers(x, G)›
proof(safe intro!: numbers[THEN "≡dfI"] "&I" Ax "cqt:2" GEN)
AOT_have ‹x[F] ≡ [λz \A[F]z] ≈E H›
using θ[THEN "∀E"(2)].
also AOT_have ‹… ≡ [λz \A[F]z] ≈E G›
using 0 "approx-nec:2"[THEN "≡E"(1), THEN "∀E"(2)] by metis
finally AOT_show ‹x[F] ≡ [λz \A[F]z] ≈E G›.
qed
"num-tran:2":
‹(Numbers(x, G) & Numbers(x,H)) → G ≈E H›
(rule "→I"; frule "&E"(1); drule "&E"(2))
AOT_assume ‹Numbers(x,G)›
AOT_hence ‹∀F (x[F] ≡ [λz \A[F]z] ≈E G)›
using numbers[THEN "≡dfE"] "&E" by blast
AOT_hence 1: ‹x[F] ≡ [λz \A[F]z] ≈E G› for F
using "∀E"(2) by blast
AOT_assume ‹Numbers(x,H)›
AOT_hence ‹∀F (x[F] ≡ [λz \A[F]z] ≈E H)›
using numbers[THEN "≡"qu1"THEN "≡
AOT_hence ‹x[F] ≡ [λz \A[F]z] ≈E H› for F
using "∀where ‹
AOT_hence ‹[λz \A[F]z] ≈E G ≡ [λz \A[F]z] ≈E H› for F
by (metis "1" "≡E"(6))
AOT_thus ‹G ≈E H›
using "approx-nec:2"[THEN "≡E"(2), OF GEN] by blast
"num-tran:3":
‹G ≡E H → (Numbers(x, G) ≡ Numbers(x, H))›
using "apE-eqE:1" "Hypothetical Syllogism" "num-tran:1" by blast
"pre-Hume":
‹(Numbers(x,G) & Numbers(y,H)) → (x = y ≡ G ≈E H)›
(safe intro!: "→I" "≡I"; frule "&E"(1); drule "&E"(2))
AOT_assume ‹Numbers(x, G)›
moreover AOT_assume ‹x = y›
ultimately AOT_have ‹Numbers(y, G)› by (rule "rule=E")
moreover AOT_assume ‹Numbers(y, H)›
ultimately AOT_show ‹G ≈E H› using "num-tran:2" "→E" "&I" by blast
AOT_assume ‹Numbers(x, G)›
AOT_hence Ax: ‹A!x› and xF: ‹
using numbers[THEN "≡dfE"] "&E" by blast+
AOT_assume ‹Numbers(y, H)›
AOT_hence Ay: ‹A!y› and yF: ‹∀F (y[F] ≡
using numbers[THEN "≡ | |