Theory AOT_PLM

1(*<*)
2theory AOT_PLM
3  imports AOT_Axioms
4begin
5(*>*)
6
7section‹The Deductive System PLM›
8text‹\label{PLM: 9}›
9
10(* constrain sledgehammer to the abstraction layer *)
11unbundle AOT_no_atp
12
13subsection‹Primitive Rule of PLM: Modus Ponens›
14text‹\label{PLM: 9.1}›
15
16AOT_theorem "modus-ponens":
17  assumes φ and φ  ψ
18  shows ψ
19  (* NOTE: semantics needed *)
20  using assms by (simp add: AOT_sem_imp)
21lemmas MP = "modus-ponens"
22
23subsection‹(Modally Strict) Proofs and Derivations›
24text‹\label{PLM: 9.2}›
25
26AOT_theorem "non-con-thm-thm":
27  assumes  φ
28  shows  φ
29  using assms by simp
30
31AOT_theorem "vdash-properties:1[1]":
32  assumes φ  Λ
33  shows  φ
34  (* NOTE: semantics needed *)
35  using assms unfolding AOT_model_act_axiom_def by blast
36
37text‹Convenience attribute for instantiating modally-fragile axioms.›
38attribute_setup act_axiom_inst =
39  Scan.succeed (Thm.rule_attribute []
40    (K (fn thm => thm RS @{thm "vdash-properties:1[1]"})))
41  "Instantiate modally fragile axiom as modally fragile theorem."
42
43AOT_theorem "vdash-properties:1[2]":
44  assumes φ  Λ
45  shows  φ
46  (* NOTE: semantics needed *)
47  using assms unfolding AOT_model_axiom_def by blast
48
49text‹Convenience attribute for instantiating modally-strict axioms.›
50attribute_setup axiom_inst =
51  Scan.succeed (Thm.rule_attribute []
52    (K (fn thm => thm RS @{thm "vdash-properties:1[2]"})))
53  "Instantiate axiom as theorem."
54
55text‹Convenience methods and theorem sets for applying "cqt:2".›
56method cqt_2_lambda_inst_prover =
57  (fast intro: AOT_instance_of_cqt_2_intro)
58method "cqt:2[lambda]" =
59  (rule "cqt:2[lambda]"[axiom_inst]; cqt_2_lambda_inst_prover)
60lemmas "cqt:2" =
61  "cqt:2[const_var]"[axiom_inst] "cqt:2[lambda]"[axiom_inst]
62  AOT_instance_of_cqt_2_intro
63method "cqt:2" = (safe intro!: "cqt:2")
64
65AOT_theorem "vdash-properties:3":
66  assumes  φ
67  shows Γ  φ
68  using assms by blast
69
70AOT_theorem "vdash-properties:5":
71  assumes Γ1  φ and Γ2  φ  ψ
72  shows Γ1, Γ2  ψ
73  using MP assms by blast
74
75AOT_theorem "vdash-properties:6":
76  assumes φ and φ  ψ
77  shows ψ
78  using MP assms by blast
79
80AOT_theorem "vdash-properties:8":
81  assumes Γ  φ and φ  ψ
82  shows Γ  ψ
83  using assms by argo
84
85AOT_theorem "vdash-properties:9":
86  assumes φ
87  shows ψ  φ
88  using MP "pl:1"[axiom_inst] assms by blast
89
90AOT_theorem "vdash-properties:10":
91  assumes φ  ψ and φ
92  shows ψ
93  using MP assms by blast
94lemmas "→E" = "vdash-properties:10"
95
96subsection‹Two Fundamental Metarules: GEN and RN›
97text‹\label{PLM: 9.3}›
98
99AOT_theorem "rule-gen":
100  assumes for arbitrary α: φ{α}
101  shows α φ{α}
102  (* NOTE: semantics needed *)
103  using assms by (metis AOT_var_of_term_inverse AOT_sem_denotes AOT_sem_forall)
104lemmas GEN = "rule-gen"
105
106AOT_theorem "RN[prem]":
107  assumes Γ  φ
108  shows Γ  φ
109  by (meson AOT_sem_box assms image_iff) (* NOTE: semantics needed *)
110AOT_theorem RN:
111  assumes  φ
112  shows φ
113  using "RN[prem]" assms by blast
114
115subsection‹The Inferential Role of Definitions›
116text‹\label{PLM: 9.4}›
117
118AOT_axiom "df-rules-formulas[1]":
119  assumes φ df ψ
120  shows φ  ψ
121  (* NOTE: semantics needed *)
122  using assms
123  by (auto simp: assms AOT_model_axiomI AOT_model_equiv_def AOT_sem_imp)
124AOT_axiom "df-rules-formulas[2]":
125  assumes φ df ψ
126  shows ψ  φ
127  (* NOTE: semantics needed *)
128  using assms
129  by (auto simp: AOT_model_axiomI AOT_model_equiv_def AOT_sem_imp)
130(* NOTE: for convenience also state the above as regular theorems *)
131AOT_theorem "df-rules-formulas[3]":
132  assumes φ df ψ
133  shows φ  ψ
134  using "df-rules-formulas[1]"[axiom_inst, OF assms].
135AOT_theorem "df-rules-formulas[4]":
136  assumes φ df ψ
137  shows ψ  φ
138  using "df-rules-formulas[2]"[axiom_inst, OF assms].
139
140
141AOT_axiom "df-rules-terms[1]":
142  assumes τ{α1...αn} =df σ{α1...αn}
143  shows (σ{τ1...τn}  τ{τ1...τn} = σ{τ1...τn}) &
144         (¬σ{τ1...τn}  ¬τ{τ1...τn})
145  (* NOTE: semantics needed *)
146  using assms
147  by (simp add: AOT_model_axiomI AOT_sem_conj AOT_sem_imp AOT_sem_eq
148                AOT_sem_not AOT_sem_denotes AOT_model_id_def)
149AOT_axiom "df-rules-terms[2]":
150  assumes τ =df σ
151  shows (σ  τ = σ) & (¬σ  ¬τ)
152  by (metis "df-rules-terms[1]" case_unit_Unity assms)
153(* NOTE: for convenience also state the above as regular theorems *)
154AOT_theorem "df-rules-terms[3]":
155  assumes τ{α1...αn} =df σ{α1...αn}
156  shows (σ{τ1...τn}  τ{τ1...τn} = σ{τ1...τn}) &
157         (¬σ{τ1...τn}  ¬τ{τ1...τn})
158  using "df-rules-terms[1]"[axiom_inst, OF assms].
159AOT_theorem "df-rules-terms[4]":
160  assumes τ =df σ
161  shows (σ  τ = σ) & (¬σ  ¬τ)
162  using "df-rules-terms[2]"[axiom_inst, OF assms].
163
164subsection‹The Theory of Negations and Conditionals›
165text‹\label{PLM: 9.5}›
166
167AOT_theorem "if-p-then-p": φ  φ
168  by (meson "pl:1"[axiom_inst] "pl:2"[axiom_inst] MP)
169
170AOT_theorem "deduction-theorem":
171  assumes φ  ψ
172  shows φ  ψ
173  (* NOTE: semantics needed *)
174  using assms by (simp add: AOT_sem_imp)
175lemmas CP = "deduction-theorem"
176lemmas "→I" = "deduction-theorem"
177
178AOT_theorem "ded-thm-cor:1":
179  assumes Γ1  φ  ψ and Γ2  ψ  χ
180  shows Γ1, Γ2  φ  χ
181  using "→E" "→I" assms by blast
182AOT_theorem "ded-thm-cor:2":
183  assumes Γ1  φ  (ψ  χ) and Γ2  ψ
184  shows Γ1, Γ2  φ  χ
185  using "→E" "→I" assms by blast
186
187AOT_theorem "ded-thm-cor:3":
188  assumes φ  ψ and ψ  χ
189  shows φ  χ
190  using "→E" "→I" assms by blast
191declare "ded-thm-cor:3"[trans]
192AOT_theorem "ded-thm-cor:4":
193  assumes φ  (ψ  χ) and ψ
194  shows φ  χ
195  using "→E" "→I" assms by blast
196
197lemmas "Hypothetical Syllogism" = "ded-thm-cor:3"
198
199AOT_theorem "useful-tautologies:1": ¬¬φ  φ
200  by (metis "pl:3"[axiom_inst] "→I" "Hypothetical Syllogism")
201AOT_theorem "useful-tautologies:2": φ  ¬¬φ
202  by (metis "pl:3"[axiom_inst] "→I" "ded-thm-cor:4")
203AOT_theorem "useful-tautologies:3": ¬φ  (φ  ψ)
204  by (meson "ded-thm-cor:4" "pl:3"[axiom_inst] "→I")
205AOT_theorem "useful-tautologies:4": (¬ψ  ¬φ)  (φ  ψ)
206  by (meson "pl:3"[axiom_inst] "Hypothetical Syllogism" "→I")
207AOT_theorem "useful-tautologies:5": (φ  ψ)  (¬ψ  ¬φ)
208  by (metis "useful-tautologies:4" "Hypothetical Syllogism" "→I")
209
210AOT_theorem "useful-tautologies:6": (φ  ¬ψ)  (ψ  ¬φ)
211  by (metis "→I" MP "useful-tautologies:4")
212
213AOT_theorem "useful-tautologies:7": (¬φ  ψ)  (¬ψ  φ)
214  by (metis "→I" MP "useful-tautologies:3" "useful-tautologies:5")
215
216AOT_theorem "useful-tautologies:8": φ  (¬ψ  ¬(φ  ψ))
217  by (metis "→I" MP "useful-tautologies:5")
218
219AOT_theorem "useful-tautologies:9": (φ  ψ)  ((¬φ  ψ)  ψ)
220  by (metis "→I" MP "useful-tautologies:6")
221
222AOT_theorem "useful-tautologies:10": (φ  ¬ψ)  ((φ  ψ)  ¬φ)
223  by (metis "→I" MP "pl:3"[axiom_inst])
224
225AOT_theorem "dn-i-e:1":
226  assumes φ
227  shows ¬¬φ
228  using MP "useful-tautologies:2" assms by blast
229lemmas "¬¬I" = "dn-i-e:1"
230AOT_theorem "dn-i-e:2":
231  assumes ¬¬φ
232  shows φ
233  using MP "useful-tautologies:1" assms by blast
234lemmas "¬¬E" = "dn-i-e:2"
235
236AOT_theorem "modus-tollens:1":
237  assumes φ  ψ and ¬ψ
238  shows ¬φ
239  using MP "useful-tautologies:5" assms by blast
240AOT_theorem "modus-tollens:2":
241  assumes φ  ¬ψ and ψ
242  shows ¬φ
243  using "¬¬I" "modus-tollens:1" assms by blast
244lemmas MT = "modus-tollens:1" "modus-tollens:2"
245
246AOT_theorem "contraposition:1[1]":
247  assumes φ  ψ
248  shows ¬ψ  ¬φ
249  using "→I" MT(1) assms by blast
250AOT_theorem "contraposition:1[2]":
251  assumes ¬ψ  ¬φ
252  shows φ  ψ
253  using "→I" "¬¬E" MT(2) assms by blast
254
255AOT_theorem "contraposition:2":
256  assumes φ  ¬ψ
257  shows ψ  ¬φ
258  using "→I" MT(2) assms by blast
259
260AOT_theorem "reductio-aa:1":
261  assumes ¬φ  ¬ψ and ¬φ  ψ
262  shows φ
263  using "→I" "¬¬E" MT(2) assms by blast
264AOT_theorem "reductio-aa:2":
265  assumes φ  ¬ψ and φ  ψ
266  shows ¬φ
267  using "reductio-aa:1" assms by blast
268lemmas "RAA" = "reductio-aa:1" "reductio-aa:2"
269
270AOT_theorem "exc-mid": φ  ¬φ
271  using "df-rules-formulas[4]" "if-p-then-p" MP
272        "conventions:2" by blast
273
274AOT_theorem "non-contradiction": ¬(φ & ¬φ)
275  using "df-rules-formulas[3]" MT(2) "useful-tautologies:2"
276        "conventions:1" by blast
277
278AOT_theorem "con-dis-taut:1": (φ & ψ)  φ
279  by (meson "→I" "df-rules-formulas[3]" MP RAA(1) "conventions:1")
280AOT_theorem "con-dis-taut:2": (φ & ψ)  ψ
281  by (metis "→I" "df-rules-formulas[3]" MT(2) RAA(2)
282            "¬¬E" "conventions:1")
283lemmas "Conjunction Simplification" = "con-dis-taut:1" "con-dis-taut:2"
284
285AOT_theorem "con-dis-taut:3": φ  (φ  ψ)
286  by (meson "contraposition:1[2]" "df-rules-formulas[4]"
287            MP "→I" "conventions:2")
288AOT_theorem "con-dis-taut:4": ψ  (φ  ψ)
289  using "Hypothetical Syllogism" "df-rules-formulas[4]"
290        "pl:1"[axiom_inst] "conventions:2" by blast
291lemmas "Disjunction Addition" = "con-dis-taut:3" "con-dis-taut:4"
292
293AOT_theorem "con-dis-taut:5": φ  (ψ  (φ & ψ))
294  by (metis "contraposition:2" "Hypothetical Syllogism" "→I"
295            "df-rules-formulas[4]" "conventions:1")
296lemmas Adjunction = "con-dis-taut:5"
297
298AOT_theorem "con-dis-taut:6": (φ & φ)  φ
299  by (metis Adjunction "→I" "df-rules-formulas[4]" MP
300            "Conjunction Simplification"(1) "conventions:3")
301lemmas "Idempotence of &" = "con-dis-taut:6"
302
303AOT_theorem "con-dis-taut:7": (φ  φ)  φ
304proof -
305  {
306    AOT_assume φ  φ
307    AOT_hence ¬φ  φ
308      using "conventions:2"[THEN "df-rules-formulas[3]"] MP by blast
309    AOT_hence φ using "if-p-then-p" RAA(1) MP by blast
310  }
311  moreover {
312    AOT_assume φ
313    AOT_hence φ  φ using "Disjunction Addition"(1) MP by blast
314  }
315  ultimately AOT_show (φ  φ)  φ
316    using "conventions:3"[THEN "df-rules-formulas[4]"] MP
317    by (metis Adjunction "→I")
318qed
319lemmas "Idempotence of ∨" = "con-dis-taut:7"
320
321
322AOT_theorem "con-dis-i-e:1":
323  assumes φ and ψ
324  shows φ & ψ
325  using Adjunction MP assms by blast
326lemmas "&I" = "con-dis-i-e:1"
327
328AOT_theorem "con-dis-i-e:2:a":
329  assumes φ & ψ
330  shows φ
331  using "Conjunction Simplification"(1) MP assms by blast
332AOT_theorem "con-dis-i-e:2:b":
333  assumes φ & ψ
334  shows ψ
335  using "Conjunction Simplification"(2) MP assms by blast
336lemmas "&E" = "con-dis-i-e:2:a" "con-dis-i-e:2:b"
337
338AOT_theorem "con-dis-i-e:3:a":
339  assumes φ
340  shows φ  ψ
341  using "Disjunction Addition"(1) MP assms by blast
342AOT_theorem "con-dis-i-e:3:b":
343  assumes ψ
344  shows φ  ψ
345  using "Disjunction Addition"(2) MP assms by blast
346AOT_theorem "con-dis-i-e:3:c":
347  assumes φ  ψ and φ  χ and ψ  Θ
348  shows χ  Θ
349  by (metis "con-dis-i-e:3:a" "Disjunction Addition"(2)
350            "df-rules-formulas[3]" MT(1) RAA(1)
351            "conventions:2" assms)
352lemmas "∨I" = "con-dis-i-e:3:a" "con-dis-i-e:3:b" "con-dis-i-e:3:c"
353
354AOT_theorem "con-dis-i-e:4:a":
355  assumes φ  ψ and φ  χ and ψ  χ
356  shows χ
357  by (metis MP RAA(2) "df-rules-formulas[3]" "conventions:2" assms)
358AOT_theorem "con-dis-i-e:4:b":
359  assumes φ  ψ and ¬φ
360  shows ψ
361  using "con-dis-i-e:4:a" RAA(1) "→I" assms by blast
362AOT_theorem "con-dis-i-e:4:c":
363  assumes φ  ψ and ¬ψ
364  shows φ
365  using "con-dis-i-e:4:a" RAA(1) "→I" assms by blast
366lemmas "∨E" = "con-dis-i-e:4:a" "con-dis-i-e:4:b" "con-dis-i-e:4:c"
367
368AOT_theorem "raa-cor:1":
369  assumes ¬φ  ψ & ¬ψ
370  shows φ
371  using "&E" "∨E"(3) "∨I"(2) RAA(2) assms by blast
372AOT_theorem "raa-cor:2":
373  assumes φ  ψ & ¬ψ
374  shows ¬φ
375  using "raa-cor:1" assms by blast
376AOT_theorem "raa-cor:3":
377  assumes φ and ¬ψ  ¬φ
378  shows ψ
379  using RAA assms by blast
380AOT_theorem "raa-cor:4":
381  assumes ¬φ and ¬ψ  φ
382  shows ψ
383  using RAA assms by blast
384AOT_theorem "raa-cor:5":
385  assumes φ and ψ  ¬φ
386  shows ¬ψ
387  using RAA assms by blast
388AOT_theorem "raa-cor:6":
389  assumes ¬φ and ψ  φ
390  shows ¬ψ
391  using RAA assms by blast
392
393AOT_theorem "oth-class-taut:1:a": (φ  ψ)  ¬(φ & ¬ψ)
394  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
395     (metis "&E" "&I" "raa-cor:3" "→I" MP)
396AOT_theorem "oth-class-taut:1:b": ¬(φ  ψ)  (φ & ¬ψ)
397  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
398     (metis "&E" "&I" "raa-cor:3" "→I" MP)
399AOT_theorem "oth-class-taut:1:c": (φ  ψ)  (¬φ  ψ)
400  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
401     (metis "&I" "∨I"(1, 2) "∨E"(3) "→I" MP "raa-cor:1")
402
403AOT_theorem "oth-class-taut:2:a": (φ & ψ)  (ψ & φ)
404  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
405     (meson "&I" "&E" "→I")
406lemmas "Commutativity of &" = "oth-class-taut:2:a"
407AOT_theorem "oth-class-taut:2:b": (φ & (ψ & χ))  ((φ & ψ) & χ)
408  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
409     (metis "&I" "&E" "→I")
410lemmas "Associativity of &" = "oth-class-taut:2:b"
411AOT_theorem "oth-class-taut:2:c": (φ  ψ)  (ψ  φ)
412  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
413     (metis "&I" "∨I"(1, 2) "∨E"(1) "→I")
414lemmas "Commutativity of ∨" = "oth-class-taut:2:c"
415AOT_theorem "oth-class-taut:2:d": (φ  (ψ  χ))  ((φ  ψ)  χ)
416  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"])
417     (metis "&I" "∨I"(1, 2) "∨E"(1) "→I")
418lemmas "Associativity of ∨" = "oth-class-taut:2:d"
419AOT_theorem "oth-class-taut:2:e": (φ  ψ)  (ψ  φ)
420  by (rule "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"]; rule "&I";
421      metis "&I" "df-rules-formulas[4]" "conventions:3" "&E"
422            "Hypothetical Syllogism" "→I" "df-rules-formulas[3]")
423lemmas "Commutativity of ≡" = "oth-class-taut:2:e"
424AOT_theorem "oth-class-taut:2:f": (φ  (ψ  χ))  ((φ  ψ)  χ)
425  using "conventions:3"[THEN "df-rules-formulas[4]"]
426        "conventions:3"[THEN "df-rules-formulas[3]"]
427        "→I" "→E" "&E" "&I"
428  by metis
429lemmas "Associativity of ≡" = "oth-class-taut:2:f"
430
431AOT_theorem "oth-class-taut:3:a": φ  φ
432  using "&I" "vdash-properties:6" "if-p-then-p"
433        "df-rules-formulas[4]" "conventions:3" by blast
434AOT_theorem "oth-class-taut:3:b": φ  ¬¬φ
435  using "&I" "useful-tautologies:1" "useful-tautologies:2" "→E"
436        "df-rules-formulas[4]" "conventions:3" by blast
437AOT_theorem "oth-class-taut:3:c": ¬(φ  ¬φ)
438  by (metis "&E" "→E" RAA "df-rules-formulas[3]" "conventions:3")
439
440AOT_theorem "oth-class-taut:4:a": (φ  ψ)  ((ψ  χ)  (φ  χ))
441  by (metis "→E" "→I")
442AOT_theorem "oth-class-taut:4:b": (φ  ψ)  (¬φ  ¬ψ)
443  using "conventions:3"[THEN "df-rules-formulas[4]"]
444        "conventions:3"[THEN "df-rules-formulas[3]"]
445        "→I" "→E" "&E" "&I" RAA by metis
446AOT_theorem "oth-class-taut:4:c": (φ  ψ)  ((φ  χ)  (ψ  χ))
447  using "conventions:3"[THEN "df-rules-formulas[4]"]
448        "conventions:3"[THEN "df-rules-formulas[3]"]
449        "→I" "→E" "&E" "&I" by metis
450AOT_theorem "oth-class-taut:4:d": (φ  ψ)  ((χ  φ)  (χ  ψ))
451  using "conventions:3"[THEN "df-rules-formulas[4]"]
452        "conventions:3"[THEN "df-rules-formulas[3]"]
453        "→I" "→E" "&E" "&I" by metis
454AOT_theorem "oth-class-taut:4:e": (φ  ψ)  ((φ & χ)  (ψ & χ))
455  using "conventions:3"[THEN "df-rules-formulas[4]"]
456        "conventions:3"[THEN "df-rules-formulas[3]"]
457        "→I" "→E" "&E" "&I" by metis
458AOT_theorem "oth-class-taut:4:f": (φ  ψ)  ((χ & φ)  (χ & ψ))
459  using "conventions:3"[THEN "df-rules-formulas[4]"]
460        "conventions:3"[THEN "df-rules-formulas[3]"]
461        "→I" "→E" "&E" "&I" by metis
462AOT_theorem "oth-class-taut:4:g": (φ  ψ)  ((φ & ψ)  (¬φ & ¬ψ))
463proof(safe intro!: "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"]
464                   "&I" "→I"
465           dest!: "conventions:3"[THEN "df-rules-formulas[3]", THEN "→E"])
466  AOT_show φ & ψ  (¬φ & ¬ψ) if (φ  ψ) & (ψ  φ)
467    using "&E" "∨I" "→E" "&I" "raa-cor:1" "→I" "∨E" that by metis
468next
469  AOT_show ψ if φ & ψ  (¬φ & ¬ψ) and φ
470    using that "∨E" "&E" "raa-cor:3" by blast
471next
472  AOT_show φ if φ & ψ  (¬φ & ¬ψ) and ψ
473    using that "∨E" "&E" "raa-cor:3" by blast
474qed
475AOT_theorem "oth-class-taut:4:h": ¬(φ  ψ)  ((φ & ¬ψ)  (¬φ & ψ))
476proof (safe intro!: "conventions:3"[THEN "df-rules-formulas[4]", THEN "→E"]
477                    "&I" "→I")
478  AOT_show φ & ¬ψ  (¬φ & ψ) if ¬(φ  ψ)
479    by (metis that "&I" "∨I"(1, 2) "→I" MT(1) "df-rules-formulas[4]"
480              "raa-cor:3" "conventions:3")
481next
482  AOT_show ¬(φ  ψ) if φ & ¬ψ  (¬φ & ψ)
483    by (metis that "&E" "∨E"(2) "→E" "df-rules-formulas[3]"
484              "raa-cor:3" "conventions:3")
485qed
486AOT_theorem "oth-class-taut:5:a": (φ & ψ)  ¬(¬φ  ¬ψ)
487  using "conventions:3"[THEN "df-rules-formulas[4]"]
488        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
489AOT_theorem "oth-class-taut:5:b": (φ  ψ)  ¬(¬φ & ¬ψ)
490  using "conventions:3"[THEN "df-rules-formulas[4]"]
491        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
492AOT_theorem "oth-class-taut:5:c": ¬(φ & ψ)  (¬φ  ¬ψ)
493  using "conventions:3"[THEN "df-rules-formulas[4]"]
494        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
495AOT_theorem "oth-class-taut:5:d": ¬(φ  ψ)  (¬φ & ¬ψ)
496  using "conventions:3"[THEN "df-rules-formulas[4]"]
497        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
498
499lemmas DeMorgan = "oth-class-taut:5:c" "oth-class-taut:5:d"
500
501AOT_theorem "oth-class-taut:6:a":
502  (φ & (ψ  χ))  ((φ & ψ)  (φ & χ))
503  using "conventions:3"[THEN "df-rules-formulas[4]"]
504        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
505AOT_theorem "oth-class-taut:6:b":
506  (φ  (ψ & χ))  ((φ  ψ) & (φ  χ))
507  using "conventions:3"[THEN "df-rules-formulas[4]"]
508        "→I" "→E" "&E" "&I" "∨I" "∨E" RAA by metis
509
510AOT_theorem "oth-class-taut:7:a": ((φ & ψ)  χ)  (φ  (ψ  χ))
511  by (metis "&I" "→E" "→I")
512lemmas Exportation = "oth-class-taut:7:a"
513AOT_theorem "oth-class-taut:7:b": (φ  (ψ χ))  ((φ & ψ)  χ)
514  by (metis "&E" "→E" "→I")
515lemmas Importation = "oth-class-taut:7:b"
516
517AOT_theorem "oth-class-taut:8:a":
518  (φ  (ψ  χ))  (ψ  (φ  χ))
519  using "conventions:3"[THEN "df-rules-formulas[4]"] "→I" "→E" "&E" "&I"
520  by metis
521lemmas Permutation = "oth-class-taut:8:a"
522AOT_theorem "oth-class-taut:8:b":
523  (φ  ψ)  ((φ  χ)  (φ  (ψ & χ)))
524  by (metis "&I" "→E" "→I")
525lemmas Composition = "oth-class-taut:8:b"
526AOT_theorem "oth-class-taut:8:c":
527  (φ  χ)  ((ψ  χ)  ((φ  ψ)  χ))
528  by (metis "∨E"(2) "→E" "→I" RAA(1))
529AOT_theorem "oth-class-taut:8:d":
530  ((φ  ψ) & (χ  Θ))  ((φ & χ)  (ψ & Θ))
531  by (metis "&E" "&I" "→E" "→I")
532lemmas "Double Composition" = "oth-class-taut:8:d"
533AOT_theorem "oth-class-taut:8:e":
534  ((φ & ψ)  (φ & χ))  (φ  (ψ  χ))
535  by (metis "conventions:3"[THEN "df-rules-formulas[4]"]
536            "conventions:3"[THEN "df-rules-formulas[3]"]
537            "→I" "→E" "&E" "&I")
538AOT_theorem "oth-class-taut:8:f":
539  ((φ & ψ)  (χ & ψ))  (ψ  (φ  χ))
540  by (metis "conventions:3"[THEN "df-rules-formulas[4]"]
541            "conventions:3"[THEN "df-rules-formulas[3]"]
542            "→I" "→E" "&E" "&I")
543AOT_theorem "oth-class-taut:8:g":
544  (ψ  χ)  ((φ  ψ)  (φ  χ))
545  by (metis "conventions:3"[THEN "df-rules-formulas[4]"]
546            "conventions:3"[THEN "df-rules-formulas[3]"]
547            "→I" "→E" "&E" "&I" "∨I" "∨E"(1))
548AOT_theorem "oth-class-taut:8:h":
549  (ψ  χ)  ((ψ  φ)  (χ  φ))
550  by (metis "conventions:3"[THEN "df-rules-formulas[4]"]
551            "conventions:3"[THEN "df-rules-formulas[3]"]
552            "→I" "→E" "&E" "&I" "∨I" "∨E"(1))
553AOT_theorem "oth-class-taut:8:i":
554  (φ  (ψ & χ))  (ψ  (φ  χ))
555  by (metis "conventions:3"[THEN "df-rules-formulas[4]"]
556            "conventions:3"[THEN "df-rules-formulas[3]"]
557            "→I" "→E" "&E" "&I")
558
559AOT_theorem "intro-elim:1":
560  assumes φ  ψ and φ  χ and ψ  Θ
561  shows χ  Θ
562  by (metis assms "∨I"(1, 2) "∨E"(1) "→I" "→E" "&E"(1)
563            "conventions:3"[THEN "df-rules-formulas[3]"])
564
565AOT_theorem "intro-elim:2":
566  assumes φ  ψ and ψ  φ
567  shows φ  ψ
568  by (meson "&I" "conventions:3" "df-rules-formulas[4]" MP assms)
569lemmas "≡I" = "intro-elim:2"
570
571AOT_theorem "intro-elim:3:a":
572  assumes φ  ψ and φ
573  shows ψ
574  by (metis "∨I"(1) "→I" "∨E"(1) "intro-elim:1" assms)
575AOT_theorem "intro-elim:3:b":
576  assumes φ  ψ and ψ
577  shows φ
578  using "intro-elim:3:a" "Commutativity of ≡" assms by blast
579AOT_theorem "intro-elim:3:c":
580  assumes φ  ψ and ¬φ
581  shows ¬ψ
582  using "intro-elim:3:b" "raa-cor:3" assms by blast
583AOT_theorem "intro-elim:3:d":
584  assumes φ  ψ and ¬ψ
585  shows ¬φ
586  using "intro-elim:3:a" "raa-cor:3" assms by blast
587AOT_theorem "intro-elim:3:e":
588  assumes φ  ψ and ψ  χ
589  shows φ  χ
590  by (metis "≡I" "→I" "intro-elim:3:a" "intro-elim:3:b" assms)
591declare "intro-elim:3:e"[trans]
592AOT_theorem "intro-elim:3:f":
593  assumes φ  ψ and φ  χ
594  shows χ  ψ
595  by (metis "≡I" "→I" "intro-elim:3:a" "intro-elim:3:b" assms)
596lemmas "≡E" = "intro-elim:3:a" "intro-elim:3:b" "intro-elim:3:c"
597              "intro-elim:3:d" "intro-elim:3:e" "intro-elim:3:f"
598
599declare "Commutativity of ≡"[THEN "≡E"(1), sym]
600
601AOT_theorem "rule-eq-df:1":
602  assumes φ df ψ
603  shows φ  ψ
604  by (simp add: "≡I" "df-rules-formulas[3]" "df-rules-formulas[4]" assms)
605lemmas "≡Df" = "rule-eq-df:1"
606AOT_theorem "rule-eq-df:2":
607  assumes φ df ψ and φ
608  shows ψ
609  using "≡Df" "≡E"(1) assms by blast
610lemmas "dfE" = "rule-eq-df:2"
611AOT_theorem "rule-eq-df:3":
612  assumes φ df ψ and ψ
613  shows φ
614  using "≡Df" "≡E"(2) assms by blast
615lemmas "dfI" = "rule-eq-df:3"
616
617AOT_theorem  "df-simplify:1":
618  assumes φ  (ψ & χ) and ψ
619  shows φ  χ
620  by (metis "&E"(2) "&I" "≡E"(1, 2) "≡I" "→I" assms)
621(* Note: this is a slight variation from PLM *)
622AOT_theorem  "df-simplify:2":
623  assumes φ  (ψ & χ) and χ
624  shows φ  ψ
625  by (metis "&E"(1) "&I" "≡E"(1, 2) "≡I" "→I" assms)
626lemmas "≡S" = "df-simplify:1"  "df-simplify:2"
627
628subsection‹The Theory of Quantification›
629text‹\label{PLM: 9.6}›
630
631AOT_theorem "rule-ui:1":
632  assumes α φ{α} and τ
633  shows φ{τ}
634  using "→E" "cqt:1"[axiom_inst] assms by blast
635AOT_theorem "rule-ui:2[const_var]":
636  assumes α φ{α}
637  shows φ{β}
638  by (simp add: "rule-ui:1" "cqt:2[const_var]"[axiom_inst] assms)
639AOT_theorem "rule-ui:2[lambda]":
640  assumes F φ{F} and INSTANCE_OF_CQT_2(ψ)
641  shows φ{ν1...νn ψ{ν1...νn}]}
642  by (simp add: "rule-ui:1" "cqt:2[lambda]"[axiom_inst] assms)
643AOT_theorem "rule-ui:3":
644  assumes α φ{α}
645  shows φ{α}
646  by (simp add: "rule-ui:2[const_var]" assms)
647lemmas "∀E" = "rule-ui:1" "rule-ui:2[const_var]"
648              "rule-ui:2[lambda]" "rule-ui:3"
649
650AOT_theorem "cqt-orig:1[const_var]": α φ{α}  φ{β}
651  by (simp add: "∀E"(2) "→I")
652AOT_theorem "cqt-orig:1[lambda]":
653  assumes INSTANCE_OF_CQT_2(ψ)
654  shows F φ{F}  φ{ν1...νn ψ{ν1...νn}]}
655  by (simp add: "∀E"(3) "→I" assms)
656AOT_theorem "cqt-orig:2": α (φ  ψ{α})  (φ  α ψ{α})
657  by (metis "→I" GEN "vdash-properties:6" "∀E"(4))
658AOT_theorem "cqt-orig:3": α φ{α}  φ{α}
659  using "cqt-orig:1[const_var]".
660
661AOT_theorem universal:
662  assumes for arbitrary β: φ{β}
663  shows α φ{α}
664  using GEN assms .
665lemmas "∀I" = universal
666
667(* Generalized mechanism for ∀I followed by ∀E *)
668ML669fun get_instantiated_allI ctxt varname thm = let
670val trm = Thm.concl_of thm
671val trm =
672  case trm of (@{const Trueprop} $ (@{const AOT_model_valid_in} $ _ $ x)) => x
673  | _ => raise Term.TERM ("Expected simple theorem.", [trm])
674fun extractVars (Const (const_nameAOT_term_of_var, _) $ Var v) =
675    (if fst (fst v) = fst varname then [Var v] else [])
676  | extractVars (t1 $ t2) = extractVars t1 @ extractVars t2
677  | extractVars (Abs (_, _, t)) = extractVars t
678  | extractVars _ = []
679val vars = extractVars trm
680val vars = fold Term.add_vars vars []
681val var = hd vars
682val trmty =
683  case (snd var) of (Type (type_nameAOT_var, [t])) => (t)
684  | _ => raise Term.TYPE ("Expected variable type.", [snd var], [Var var])
685val trm = Abs (Term.string_of_vname (fst var), trmty, Term.abstract_over (
686      Const (const_nameAOT_term_of_var, Type ("fun", [snd var, trmty]))
687       $ Var var, trm))
688val trm = Thm.cterm_of (Context.proof_of ctxt) trm
689val ty = hd (Term.add_tvars (Thm.prop_of @{thm "∀I"}) [])
690val typ = Thm.ctyp_of (Context.proof_of ctxt) trmty
691val allthm = Drule.instantiate_normalize (TVars.make [(ty, typ)], Vars.empty) @{thm "∀I"}
692val phi = hd (Term.add_vars (Thm.prop_of allthm) [])
693val allthm = Drule.instantiate_normalize (TVars.empty, Vars.make [(phi,trm)]) allthm
694in
695allthm
696end
697
698
699attribute_setup "∀I" =
700  Scan.lift (Scan.repeat1 Args.var) >> (fn args => Thm.rule_attribute []
701  (fn ctxt => fn thm => fold (fn arg => fn thm =>
702    thm RS get_instantiated_allI ctxt arg thm) args thm))
703  "Quantify over a variable in a theorem using GEN."
704
705attribute_setup "unvarify" =
706  Scan.lift (Scan.repeat1 Args.var) >> (fn args => Thm.rule_attribute []
707  (fn ctxt => fn thm =>
708    let
709      fun get_inst_allI arg thm = thm RS get_instantiated_allI ctxt arg thm
710      val thm = fold get_inst_allI args thm
711      val thm = fold (K (fn thm => thm RS @{thm "∀E"(1)})) args thm
712    in
713     thm
714    end))
715  "Generalize a statement about variables to a statement about denoting terms."
716
717(* Note: rereplace-lem does not apply to the embedding *)
718
719AOT_theorem "cqt-basic:1": αβ φ{α,β}  βα φ{α,β}
720  by (metis "≡I" "∀E"(2) "∀I" "→I")
721
722AOT_theorem "cqt-basic:2":
723  α(φ{α}  ψ{α})  (α(φ{α}  ψ{α}) & α(ψ{α}  φ{α}))
724proof (rule "≡I"; rule "→I")
725  AOT_assume α(φ{α}  ψ{α})
726  AOT_hence φ{α}  ψ{α} for α using "∀E"(2) by blast
727  AOT_hence φ{α}  ψ{α} and ψ{α}  φ{α} for α
728    using "≡E"(1,2) "→I" by blast+
729  AOT_thus α(φ{α}  ψ{α}) & α(ψ{α}  φ{α})
730    by (auto intro: "&I" "∀I")
731next
732  AOT_assume α(φ{α}  ψ{α}) & α(ψ{α}  φ{α})
733  AOT_hence φ{α}  ψ{α} and ψ{α}  φ{α} for α
734    using "∀E"(2) "&E" by blast+
735  AOT_hence φ{α}  ψ{α} for α
736    using "≡I" by blast
737  AOT_thus α(φ{α}  ψ{α}) by (auto intro: "∀I")
738qed
739
740AOT_theorem "cqt-basic:3": α(φ{α}  ψ{α})  (α φ{α}  α ψ{α})
741proof(rule "→I")
742  AOT_assume α(φ{α}  ψ{α})
743  AOT_hence 1: φ{α}  ψ{α} for α using "∀E"(2) by blast
744  {
745    AOT_assume α φ{α}
746    AOT_hence α ψ{α} using 1 "∀I" "∀E"(4) "≡E" by metis
747  }
748  moreover {
749    AOT_assume α ψ{α}
750    AOT_hence α φ{α} using 1 "∀I" "∀E"(4) "≡E" by metis
751  }
752  ultimately AOT_show α φ{α}  α ψ{α}
753    using "≡I" "→I" by auto
754qed
755
756AOT_theorem "cqt-basic:4": α(φ{α} & ψ{α})  (α φ{α} & α ψ{α})
757proof(rule "→I")
758  AOT_assume 0: α(φ{α} & ψ{α})
759  AOT_have φ{α} and ψ{α} for α using "∀E"(2) 0 "&E" by blast+
760  AOT_thus α φ{α} & α ψ{α}
761    by (auto intro: "∀I" "&I")
762qed
763
764AOT_theorem "cqt-basic:5": (α1...∀αn(φ{α1...αn}))  φ{α1...αn}
765  using "cqt-orig:3" by blast
766
767AOT_theorem "cqt-basic:6": αα φ{α}  α φ{α}
768  by (meson "≡I" "→I" GEN "cqt-orig:1[const_var]")
769
770AOT_theorem "cqt-basic:7": (φ  α ψ{α})  α(φ  ψ{α})
771  by (metis "→I" "vdash-properties:6" "rule-ui:3" "≡I" GEN)
772
773AOT_theorem "cqt-basic:8": (α φ{α}  α ψ{α})  α (φ{α}  ψ{α})
774  by (simp add: "∨I"(3) "→I" GEN "cqt-orig:1[const_var]")
775
776AOT_theorem "cqt-basic:9":
777  (α (φ{α}  ψ{α}) & α (ψ{α}  χ{α}))  α(φ{α}  χ{α})
778proof -
779  {
780    AOT_assume α (φ{α}  ψ{α})
781    moreover AOT_assume α (ψ{α}  χ{α})
782    ultimately AOT_have φ{α}  ψ{α} and ψ{α}  χ{α} for α
783      using "∀E" by blast+
784    AOT_hence φ{α}  χ{α} for α by (metis "→E" "→I")
785    AOT_hence α(φ{α}  χ{α}) using "∀I" by fast
786  }
787  thus ?thesis using "&I" "→I" "&E" by meson
788qed
789
790AOT_theorem "cqt-basic:10":
791  (α(φ{α}  ψ{α}) & α(ψ{α}  χ{α}))  α (φ{α}  χ{α})
792proof(rule "→I"; rule "∀I")
793  fix β
794  AOT_assume α(φ{α}  ψ{α}) & α(ψ{α}  χ{α})
795  AOT_hence φ{β}  ψ{β} and ψ{β}  χ{β} using "&E" "∀E" by blast+
796  AOT_thus φ{β}  χ{β} using "≡I" "≡E" by blast
797qed
798
799AOT_theorem "cqt-basic:11": α(φ{α}  ψ{α})  α (ψ{α}  φ{α})
800proof (rule "≡I"; rule "→I")
801  AOT_assume 0: α(φ{α}  ψ{α})
802  {
803    fix α
804    AOT_have φ{α}  ψ{α} using 0 "∀E" by blast
805    AOT_hence ψ{α}  φ{α} using "≡I" "≡E" "→I" "→E" by metis
806  }
807  AOT_thus α(ψ{α}  φ{α}) using "∀I" by fast
808next
809  AOT_assume 0: α(ψ{α}  φ{α})
810  {
811    fix α
812    AOT_have ψ{α}  φ{α} using 0 "∀E" by blast
813    AOT_hence φ{α}  ψ{α} using "≡I" "≡E" "→I" "→E" by metis
814  }
815  AOT_thus α(φ{α}  ψ{α}) using "∀I" by fast
816qed
817
818AOT_theorem "cqt-basic:12": α φ{α}  α (ψ{α}  φ{α})
819  by (simp add: "∀E"(2) "→I" GEN)
820
821AOT_theorem "cqt-basic:13": α φ{α}  β φ{β}
822  using "≡I" "→I" by blast
823
824AOT_theorem "cqt-basic:14":
825  (α1...∀αn (φ{α1...αn}  ψ{α1...αn})) 
826   ((α1...∀αn φ{α1...αn})  (α1...∀αn ψ{α1...αn}))
827  using "cqt:3"[axiom_inst] by auto
828
829AOT_theorem "cqt-basic:15":
830  (α1...∀αn (φ  ψ{α1...αn}))  (φ  (α1...∀αn ψ{α1...αn}))
831  using "cqt-orig:2" by auto
832
833AOT_theorem "universal-cor":
834  assumes for arbitrary β: φ{β}
835  shows α φ{α}
836  using GEN assms .
837
838AOT_theorem "existential:1":
839  assumes φ{τ} and τ
840  shows α φ{α}
841proof(rule "raa-cor:1")
842  AOT_assume ¬α φ{α}
843  AOT_hence α ¬φ{α}
844    using "dfI" "conventions:4" RAA "&I" by blast
845  AOT_hence ¬φ{τ} using assms(2) "∀E"(1) "→E" by blast
846  AOT_thus φ{τ} & ¬φ{τ} using assms(1) "&I" by blast
847qed
848
849AOT_theorem "existential:2[const_var]":
850  assumes φ{β}
851  shows α φ{α}
852  using "existential:1" "cqt:2[const_var]"[axiom_inst] assms by blast
853
854AOT_theorem "existential:2[lambda]":
855  assumes φ{ν1...νn ψ{ν1...νn}]} and INSTANCE_OF_CQT_2(ψ)
856  shows α φ{α}
857  using "existential:1" "cqt:2[lambda]"[axiom_inst] assms by blast
858lemmas "∃I" = "existential:1" "existential:2[const_var]"
859              "existential:2[lambda]" 
860
861AOT_theorem "instantiation":
862  assumes for arbitrary β: φ{β}  ψ and α φ{α}
863  shows ψ
864  by (metis (no_types, lifting) "dfE" GEN "raa-cor:3" "conventions:4" assms)
865lemmas "∃E" = "instantiation"
866
867AOT_theorem "cqt-further:1": α φ{α}  α φ{α}
868  using "∀E"(4) "∃I"(2) "→I" by metis
869
870AOT_theorem "cqt-further:2": ¬α φ{α}  α ¬φ{α}
871  using "∀I" "∃I"(2) "→I" RAA by metis
872
873AOT_theorem "cqt-further:3": α φ{α}  ¬α ¬φ{α}
874  using "∀E"(4) "∃E" "→I" RAA
875  by (metis "cqt-further:2" "≡I" "modus-tollens:1")
876
877AOT_theorem "cqt-further:4": ¬α φ{α}  α ¬φ{α}
878  using "∀I" "∃I"(2)"→I" RAA by metis
879
880AOT_theorem "cqt-further:5": α (φ{α} & ψ{α})  (α φ{α} & α ψ{α})
881  by (metis (no_types, lifting) "&E" "&I" "∃E" "∃I"(2) "→I")
882
883AOT_theorem "cqt-further:6": α (φ{α}  ψ{α})  (α φ{α}  α ψ{α})
884  by (metis (mono_tags, lifting) "∃E" "∃I"(2) "∨E"(3) "∨I"(1, 2) "→I" RAA(2))
885
886(* NOTE: vacuous in the embedding *)
887AOT_theorem "cqt-further:7": α φ{α}  β φ{β}
888  by (simp add: "oth-class-taut:3:a")
889
890AOT_theorem "cqt-further:8":
891  (α φ{α} & α ψ{α})  α (φ{α}  ψ{α})
892  by (metis (mono_tags, lifting) "&E" "≡I" "∀E"(2) "→I" GEN)
893
894AOT_theorem "cqt-further:9":
895  (¬α φ{α} & ¬α ψ{α})  α (φ{α}  ψ{α})
896  by (metis (mono_tags, lifting) "&E" "≡I" "∃I"(2) "→I" GEN "raa-cor:4")
897
898AOT_theorem "cqt-further:10":
899  (α φ{α} & ¬α ψ{α})  ¬α (φ{α}  ψ{α})
900proof(rule "→I"; rule "raa-cor:2")
901  AOT_assume 0: α φ{α} & ¬α ψ{α}
902  then AOT_obtain α where φ{α} using "∃E" "&E"(1) by metis
903  moreover AOT_assume α (φ{α}  ψ{α})
904  ultimately AOT_have ψ{α} using "∀E"(4) "≡E"(1) by blast
905  AOT_hence α ψ{α} using "∃I" by blast
906  AOT_thus α ψ{α} & ¬α ψ{α} using 0 "&E"(2) "&I" by blast
907qed
908
909AOT_theorem "cqt-further:11": αβ φ{α,β}  βα φ{α,β}
910  using "≡I" "→I" "∃I"(2) "∃E" by metis
911
912subsection‹Logical Existence, Identity, and Truth›
913text‹\label{PLM: 9.7}›
914
915AOT_theorem "log-prop-prop:1":  φ]
916  using "cqt:2[lambda0]"[axiom_inst] by auto
917
918AOT_theorem "log-prop-prop:2": φ
919  by (rule "dfI"[OF "existence:3"]) "cqt:2[lambda]"
920
921AOT_theorem "exist-nec": τ  τ
922proof -
923  AOT_have β β
924    by (simp add: GEN RN "cqt:2[const_var]"[axiom_inst])
925  AOT_thus τ  τ
926    using "cqt:1"[axiom_inst] "→E" by blast
927qed
928
929(* TODO: replace this mechanism by a "proof by types" command *)
930class AOT_Term_id = AOT_Term +
931  assumes "t=t-proper:1"[AOT]: [v  τ = τ'  τ]
932      and "t=t-proper:2"[AOT]: [v  τ = τ'  τ']
933
934instance κ :: AOT_Term_id
935proof
936  AOT_modally_strict {
937    AOT_show κ = κ'  κ for κ κ'
938    proof(rule "→I")
939      AOT_assume κ = κ'
940      AOT_hence O!κ  A!κ
941        by (rule "∨I"(3)[OF "dfE"[OF "identity:1"]])
942           (meson "→I" "∨I"(1) "&E"(1))+
943      AOT_thus κ
944        by (rule "∨E"(1))
945           (metis "cqt:5:a"[axiom_inst] "→I" "→E" "&E"(2))+
946    qed
947  }
948next
949  AOT_modally_strict {
950    AOT_show κ = κ'  κ' for κ κ'
951    proof(rule "→I")
952      AOT_assume κ = κ'
953      AOT_hence O!κ'  A!κ'
954        by (rule "∨I"(3)[OF "dfE"[OF "identity:1"]])
955           (meson "→I" "∨I" "&E")+
956      AOT_thus κ'
957        by (rule "∨E"(1))
958           (metis "cqt:5:a"[axiom_inst] "→I" "→E" "&E"(2))+
959    qed
960  }
961qed
962
963instance rel :: (AOT_κs) AOT_Term_id
964proof
965  AOT_modally_strict {
966    AOT_show Π = Π'  Π for Π Π' :: <'a>
967    proof(rule "→I")
968      AOT_assume Π = Π'
969      AOT_thus Π using "dfE"[OF "identity:3"[of Π Π']] "&E" by blast
970    qed
971  }
972next
973  AOT_modally_strict {
974    AOT_show Π = Π'  Π' for Π Π' :: <'a>
975    proof(rule "→I")
976      AOT_assume Π = Π'
977      AOT_thus Π' using "dfE"[OF "identity:3"[of Π Π']] "&E" by blast
978    qed
979  }
980qed
981
982instance 𝗈 :: AOT_Term_id
983proof
984  AOT_modally_strict {
985    fix φ ψ
986    AOT_show φ = ψ  φ
987    proof(rule "→I")
988      AOT_assume φ = ψ
989      AOT_thus φ using "dfE"[OF "identity:4"[of φ ψ]] "&E" by blast
990    qed
991  }
992next
993  AOT_modally_strict {
994    fix φ ψ
995    AOT_show φ = ψ  ψ
996    proof(rule "→I")
997      AOT_assume φ = ψ
998      AOT_thus ψ using "dfE"[OF "identity:4"[of φ ψ]] "&E" by blast
999    qed
1000  }
1001qed
1002
1003instance prod :: (AOT_Term_id, AOT_Term_id) AOT_Term_id
1004proof
1005  AOT_modally_strict {
1006    fix τ τ' :: 'a×'b
1007    AOT_show τ = τ'  τ
1008    proof (induct τ; induct τ'; rule "→I")
1009      fix τ1 τ1' :: 'a and τ2  τ2' :: 'b
1010      AOT_assume «(τ1, τ2)» = «(τ1', τ2')»
1011      AOT_hence (τ1 = τ1') & (τ2 = τ2') by (metis "dfE" tuple_identity_1)
1012      AOT_hence τ1 and τ2
1013        using "t=t-proper:1" "&E" "vdash-properties:10" by blast+
1014      AOT_thus «(τ1, τ2)» by (metis "dfI" "&I" tuple_denotes)
1015    qed
1016  }
1017next
1018  AOT_modally_strict {
1019    fix τ τ' :: 'a×'b
1020    AOT_show τ = τ'  τ'
1021    proof (induct τ; induct τ'; rule "→I")
1022      fix τ1 τ1' :: 'a and τ2  τ2' :: 'b
1023      AOT_assume «(τ1, τ2)» = «(τ1', τ2')»
1024      AOT_hence (τ1 = τ1') & (τ2 = τ2') by (metis "dfE" tuple_identity_1)
1025      AOT_hence τ1' and τ2'
1026        using "t=t-proper:2" "&E" "vdash-properties:10" by blast+
1027      AOT_thus «(τ1', τ2')» by (metis "dfI" "&I" tuple_denotes)
1028    qed
1029  }
1030qed
1031
1032(* This is the end of the "proof by types" and
1033   makes the results available on new theorems *)
1034AOT_register_type_constraints
1035  Term: _::AOT_Term_id _::AOT_Term_id
1036AOT_register_type_constraints
1037  Individual: κ _::{AOT_κs, AOT_Term_id}
1038AOT_register_type_constraints
1039  Relation: <_::{AOT_κs, AOT_Term_id}>
1040
1041AOT_theorem "id-rel-nec-equiv:1":
1042  Π = Π'  x1...∀xn ([Π]x1...xn  [Π']x1...xn)
1043proof(rule "→I")
1044  AOT_assume assumption: Π = Π'
1045  AOT_hence Π and Π'
1046    using "t=t-proper:1" "t=t-proper:2" MP by blast+
1047  moreover AOT_have FG (F = G  ((x1...∀xn ([F]x1...xn  [F]x1...xn)) 
1048                                     x1...∀xn ([F]x1...xn  [G]x1...xn)))
1049    apply (rule GEN)+ using "l-identity"[axiom_inst] by force
1050  ultimately AOT_have Π = Π'  ((x1...∀xn ([Π]x1...xn  [Π]x1...xn)) 
1051                                   x1...∀xn ([Π]x1...xn  [Π']x1...xn))
1052    using "∀E"(1) by blast
1053  AOT_hence (x1...∀xn ([Π]x1...xn  [Π]x1...xn)) 
1054             x1...∀xn ([Π]x1...xn  [Π']x1...xn)
1055    using assumption "→E" by blast
1056  moreover AOT_have x1...∀xn ([Π]x1...xn  [Π]x1...xn)
1057    by (simp add: RN "oth-class-taut:3:a" "universal-cor")
1058  ultimately AOT_show x1...∀xn ([Π]x1...xn  [Π']x1...xn)
1059    using "→E" by blast
1060qed
1061
1062AOT_theorem "id-rel-nec-equiv:2": φ = ψ  (φ  ψ)
1063proof(rule "→I")
1064  AOT_assume assumption: φ = ψ
1065  AOT_hence φ and ψ
1066    using "t=t-proper:1" "t=t-proper:2" MP by blast+
1067  moreover AOT_have pq (p = q  (((p  p)  (p  q))))
1068    apply (rule GEN)+ using "l-identity"[axiom_inst] by force
1069  ultimately AOT_have φ = ψ  ((φ  φ)  (φ  ψ))
1070    using "∀E"(1) by blast
1071  AOT_hence (φ  φ)  (φ  ψ)
1072    using assumption "→E" by blast
1073  moreover AOT_have (φ  φ)
1074    by (simp add: RN "oth-class-taut:3:a" "universal-cor")
1075  ultimately AOT_show (φ  ψ)
1076    using "→E" by blast
1077qed
1078
1079AOT_theorem "rule=E":
1080  assumes φ{τ} and τ = σ
1081  shows φ{σ}
1082proof -
1083  AOT_have τ and σ
1084    using assms(2) "t=t-proper:1" "t=t-proper:2" "→E" by blast+
1085  moreover AOT_have αβ(α = β  (φ{α}  φ{β}))
1086    apply (rule GEN)+ using "l-identity"[axiom_inst] by blast
1087  ultimately AOT_have τ = σ  (φ{τ}  φ{σ})
1088    using "∀E"(1) by blast
1089  AOT_thus φ{σ} using assms "→E" by blast
1090qed
1091
1092AOT_theorem "propositions-lemma:1":  φ] = φ
1093proof -
1094  AOT_have φ by (simp add: "log-prop-prop:2")
1095  moreover AOT_have p  p] = p
1096    using "lambda-predicates:3[zero]"[axiom_inst] "∀I" by fast
1097  ultimately AOT_show  φ] = φ
1098    using "∀E" by blast
1099qed
1100
1101AOT_theorem "propositions-lemma:2":  φ]  φ
1102proof -
1103  AOT_have  φ]   φ] by (simp add: "oth-class-taut:3:a")
1104  AOT_thus  φ]  φ using "propositions-lemma:1" "rule=E" by blast
1105qed
1106
1107text‹propositions-lemma:3 through propositions-lemma:5 hold implicitly›
1108
1109AOT_theorem "propositions-lemma:6": (φ  ψ)  ( φ]   ψ])
1110  by (metis "≡E"(1) "≡E"(5) "Associativity of ≡" "propositions-lemma:2")
1111
1112text‹dr-alphabetic-rules holds implicitly›
1113
1114AOT_theorem "oa-exist:1": O!
1115proof -
1116  AOT_have x [E!]x] by "cqt:2[lambda]"
1117  AOT_hence 1: O! = x [E!]x]
1118    using "df-rules-terms[4]"[OF "oa:1", THEN "&E"(1)] "→E" by blast
1119  AOT_show O! using "t=t-proper:1"[THEN "→E", OF 1] by simp
1120qed
1121
1122AOT_theorem "oa-exist:2": A!
1123proof -
1124  AOT_have x ¬[E!]x] by "cqt:2[lambda]"
1125  AOT_hence 1: A! = x ¬[E!]x]
1126    using "df-rules-terms[4]"[OF "oa:2", THEN "&E"(1)] "→E" by blast
1127  AOT_show A! using "t=t-proper:1"[THEN "→E", OF 1] by simp
1128qed
1129
1130AOT_theorem "oa-exist:3": O!x  A!x
1131proof(rule "raa-cor:1")
1132  AOT_assume ¬(O!x  A!x)
1133  AOT_hence A: ¬O!x and B: ¬A!x
1134    using "Disjunction Addition"(1) "modus-tollens:1"
1135          "∨I"(2) "raa-cor:5" by blast+
1136  AOT_have C: O! = x [E!]x]
1137    by (rule "df-rules-terms[4]"[OF "oa:1", THEN "&E"(1), THEN "→E"]) "cqt:2"
1138  AOT_have D: A! = x ¬[E!]x]
1139    by (rule "df-rules-terms[4]"[OF "oa:2", THEN "&E"(1), THEN "→E"]) "cqt:2"
1140  AOT_have E: ¬x [E!]x]x
1141    using A C "rule=E" by fast
1142  AOT_have F: ¬x ¬[E!]x]x
1143    using B D "rule=E" by fast
1144  AOT_have G: x [E!]x]x  [E!]x
1145    by (rule "lambda-predicates:2"[axiom_inst, THEN "→E"]) "cqt:2"
1146  AOT_have H: x ¬[E!]x]x  ¬[E!]x
1147    by (rule "lambda-predicates:2"[axiom_inst, THEN "→E"]) "cqt:2"
1148  AOT_show ¬[E!]x & ¬¬[E!]x using G E "≡E" H F "≡E" "&I" by metis
1149qed
1150
1151AOT_theorem "p-identity-thm2:1": F = G  x(x[F]  x[G])
1152proof -
1153  AOT_have F = G  F & G & x(x[F]  x[G])
1154    using "identity:2" "df-rules-formulas[3]" "df-rules-formulas[4]"
1155          "→E" "&E" "≡I" "→I" by blast
1156  moreover AOT_have F and G
1157    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1158  ultimately AOT_show F = G  x(x[F]  x[G])
1159    using "≡S"(1) "&I" by blast
1160qed
1161
1162AOT_theorem "p-identity-thm2:2[2]":
1163  F = G  y1(x [F]xy1] = x [G]xy1] & x [F]y1x] = x [G]y1x])
1164proof -
1165  AOT_have F = G  F & G &
1166              y1(x [F]xy1] = x [G]xy1] & x [F]y1x] = x [G]y1x])
1167    using "identity:3[2]" "df-rules-formulas[3]" "df-rules-formulas[4]"
1168          "→E" "&E" "≡I" "→I" by blast
1169  moreover AOT_have F and G
1170    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1171  ultimately show ?thesis
1172    using "≡S"(1) "&I" by blast
1173qed
1174    
1175AOT_theorem "p-identity-thm2:2[3]":
1176  F = G  y1y2(x [F]xy1y2] = x [G]xy1y2] &
1177                  x [F]y1xy2] = x [G]y1xy2] &
1178                  x [F]y1y2x] = x [G]y1y2x])
1179proof -
1180  AOT_have F = G  F & G & y1y2(x [F]xy1y2] = x [G]xy1y2] &
1181                                     x [F]y1xy2] = x [G]y1xy2] &
1182                                     x [F]y1y2x] = x [G]y1y2x])
1183    using "identity:3[3]" "df-rules-formulas[3]" "df-rules-formulas[4]"
1184          "→E" "&E" "≡I" "→I" by blast
1185  moreover AOT_have F and G
1186    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1187  ultimately show ?thesis
1188    using "≡S"(1) "&I" by blast
1189qed
1190
1191AOT_theorem "p-identity-thm2:2[4]":
1192  F = G  y1y2y3(x [F]xy1y2y3] = x [G]xy1y2y3] &
1193                     x [F]y1xy2y3] = x [G]y1xy2y3] &
1194                     x [F]y1y2xy3] = x [G]y1y2xy3] &
1195                     x [F]y1y2y3x] = x [G]y1y2y3x])
1196proof -
1197  AOT_have F = G  F & G & y1y2y3(x [F]xy1y2y3] = x [G]xy1y2y3] &
1198                                        x [F]y1xy2y3] = x [G]y1xy2y3] &
1199                                        x [F]y1y2xy3] = x [G]y1y2xy3] &
1200                                        x [F]y1y2y3x] = x [G]y1y2y3x])
1201    using "identity:3[4]" "df-rules-formulas[3]" "df-rules-formulas[4]"
1202          "→E" "&E" "≡I" "→I" by blast
1203  moreover AOT_have F and G
1204    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1205  ultimately show ?thesis
1206    using "≡S"(1) "&I" by blast
1207qed
1208
1209AOT_theorem "p-identity-thm2:2":
1210  F = G  x1...∀xn «AOT_sem_proj_id x1xn (λ τ . «[F]τ») (λ τ . «[G]τ»)»
1211proof -
1212  AOT_have F = G  F & G &
1213              x1...∀xn «AOT_sem_proj_id x1xn (λ τ . «[F]τ») (λ τ . «[G]τ»)»
1214    using "identity:3" "df-rules-formulas[3]" "df-rules-formulas[4]"
1215          "→E" "&E" "≡I" "→I" by blast
1216  moreover AOT_have F and G
1217    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1218  ultimately show ?thesis
1219    using "≡S"(1) "&I" by blast
1220qed
1221
1222AOT_theorem "p-identity-thm2:3":
1223  p = q  x p] = x q]
1224proof -
1225  AOT_have p = q  p & q & x p] = x q]
1226    using "identity:4" "df-rules-formulas[3]" "df-rules-formulas[4]"
1227          "→E" "&E" "≡I" "→I" by blast
1228  moreover AOT_have p and q
1229    by (auto simp: "cqt:2[const_var]"[axiom_inst])
1230  ultimately show ?thesis
1231    using "≡S"(1) "&I" by blast
1232qed
1233
1234class AOT_Term_id_2 = AOT_Term_id + assumes "id-eq:1": [v  α = α]
1235
1236instance κ :: AOT_Term_id_2
1237proof
1238  AOT_modally_strict {
1239    fix x
1240    {
1241      AOT_assume O!x
1242      moreover AOT_have F([F]x  [F]x)
1243        using RN GEN "oth-class-taut:3:a" by fast
1244      ultimately AOT_have O!x & O!x & F([F]x  [F]x) using "&I" by simp
1245    }
1246    moreover {
1247      AOT_assume A!x
1248      moreover AOT_have F(x[F]  x[F])
1249        using RN GEN "oth-class-taut:3:a" by fast
1250      ultimately AOT_have A!x & A!x & F(x[F]  x[F]) using "&I" by simp
1251    }
1252    ultimately AOT_have (O!x & O!x & F([F]x  [F]x)) 
1253                         (A!x & A!x & F(x[F]  x[F]))
1254      using "oa-exist:3" "∨I"(1) "∨I"(2) "∨E"(3) "raa-cor:1" by blast
1255    AOT_thus x = x
1256      using "identity:1"[THEN "df-rules-formulas[4]"] "→E" by blast
1257  }
1258qed
1259
1260instance rel :: ("{AOT_κs,AOT_Term_id_2}") AOT_Term_id_2
1261proof
1262  AOT_modally_strict {
1263    fix F :: "<'a> AOT_var"
1264    AOT_have 0: x1...xn [F]x1...xn] = F
1265      by (simp add: "lambda-predicates:3"[axiom_inst])
1266    AOT_have x1...xn [F]x1...xn]
1267      by "cqt:2[lambda]"
1268    AOT_hence x1...xn [F]x1...xn] = x1...xn [F]x1...xn]
1269      using "lambda-predicates:1"[axiom_inst] "→E" by blast
1270    AOT_show F = F using "rule=E" 0 by force 
1271  }
1272qed
1273
1274instance 𝗈 :: AOT_Term_id_2
1275proof
1276  AOT_modally_strict {
1277    fix p
1278    AOT_have 0:  p] = p
1279      by (simp add: "lambda-predicates:3[zero]"[axiom_inst])
1280    AOT_have  p]
1281      by (rule "cqt:2[lambda0]"[axiom_inst])
1282    AOT_hence  p] =  p]
1283      using "lambda-predicates:1[zero]"[axiom_inst] "→E" by blast
1284    AOT_show p = p using "rule=E" 0 by force
1285  }
1286qed
1287
1288instance prod :: (AOT_Term_id_2, AOT_Term_id_2) AOT_Term_id_2
1289proof
1290  AOT_modally_strict {
1291    fix α :: ('a×'b) AOT_var
1292    AOT_show α = α
1293    proof (induct)
1294      AOT_show τ = τ if τ for τ :: 'a×'b
1295        using that
1296      proof (induct τ)
1297        fix τ1 :: 'a and τ2 :: 'b
1298        AOT_assume «(τ1,τ2)»
1299        AOT_hence τ1 and τ2
1300          using "dfE" "&E" tuple_denotes by blast+
1301        AOT_hence τ1 = τ1 and τ2 = τ2
1302          using "id-eq:1"[unvarify α] by blast+
1303        AOT_thus «(τ1, τ2)» = «(τ1, τ2)»
1304          by (metis "dfI" "&I" tuple_identity_1)
1305      qed
1306    qed
1307  }
1308qed
1309
1310AOT_register_type_constraints
1311  Term: _::AOT_Term_id_2 _::AOT_Term_id_2
1312AOT_register_type_constraints
1313  Individual: κ _::{AOT_κs, AOT_Term_id_2}
1314AOT_register_type_constraints
1315  Relation: <_::{AOT_κs, AOT_Term_id_2}>
1316
1317AOT_theorem "id-eq:2": α = β  β = α
1318  by (meson "rule=E" "deduction-theorem")
1319
1320AOT_theorem "id-eq:3": α = β & β = γ  α = γ
1321  using "rule=E" "→I" "&E" by blast
1322
1323AOT_theorem "id-eq:4": α = β  γ (α = γ  β = γ)
1324proof (rule "≡I"; rule "→I")
1325  AOT_assume 0: α = β
1326  AOT_hence 1: β = α using "id-eq:2" "→E" by blast
1327  AOT_show γ (α = γ  β = γ)
1328    by (rule GEN) (metis "≡I" "→I" 0 "1" "rule=E")
1329next
1330  AOT_assume γ (α = γ  β = γ)
1331  AOT_hence α = α  β = α using "∀E"(2) by blast
1332  AOT_hence α = α  β = α using "≡E"(1) "→I" by blast
1333  AOT_hence β = α using "id-eq:1" "→E" by blast
1334  AOT_thus α = β using "id-eq:2" "→E" by blast
1335qed
1336
1337AOT_theorem "rule=I:1":
1338  assumes τ
1339  shows τ = τ
1340proof -
1341  AOT_have α (α = α)
1342    by (rule GEN) (metis "id-eq:1")
1343  AOT_thus τ = τ using assms "∀E" by blast
1344qed
1345
1346AOT_theorem "rule=I:2[const_var]": "α = α"
1347  using "id-eq:1".
1348
1349AOT_theorem "rule=I:2[lambda]":
1350  assumes INSTANCE_OF_CQT_2(φ)
1351  shows "ν1...νn φ{ν1...νn}] = ν1...νn φ{ν1...νn}]"
1352proof -
1353  AOT_have α (α = α)
1354    by (rule GEN) (metis "id-eq:1")
1355  moreover AOT_have ν1...νn φ{ν1...νn}]
1356    using assms by (rule "cqt:2[lambda]"[axiom_inst])
1357  ultimately AOT_show ν1...νn φ{ν1...νn}] = ν1...νn φ{ν1...νn}]
1358    using assms "∀E" by blast
1359qed
1360
1361lemmas "=I" = "rule=I:1" "rule=I:2[const_var]" "rule=I:2[lambda]"
1362
1363AOT_theorem "rule-id-df:1":
1364  assumes τ{α1...αn} =df σ{α1...αn} and σ{τ1...τn}
1365  shows τ{τ1...τn} = σ{τ1...τn}
1366proof -
1367  AOT_have σ{τ1...τn}  τ{τ1...τn} = σ{τ1...τn}
1368    using "df-rules-terms[3]" assms(1) "&E" by blast
1369  AOT_thus τ{τ1...τn} = σ{τ1...τn}
1370    using assms(2) "→E" by blast
1371qed
1372
1373AOT_theorem "rule-id-df:1[zero]":
1374  assumes τ =df σ and σ
1375  shows τ = σ
1376proof -
1377  AOT_have σ  τ = σ
1378    using "df-rules-terms[4]" assms(1) "&E" by blast
1379  AOT_thus τ = σ
1380    using assms(2) "→E" by blast
1381qed
1382
1383AOT_theorem "rule-id-df:2:a":
1384  assumes τ{α1...αn} =df σ{α1...αn} and σ{τ1...τn} and φ{τ{τ1...τn}}
1385  shows φ{σ{τ1...τn}}
1386proof -
1387  AOT_have τ{τ1...τn} = σ{τ1...τn} using "rule-id-df:1" assms(1,2) by blast
1388  AOT_thus φ{σ{τ1...τn}} using assms(3) "rule=E" by blast
1389qed
1390
1391AOT_theorem "rule-id-df:2:a[2]":
1392  assumes τ{«(α1,α2)»} =df σ{«(α1,α2)»}
1393    and σ{«(τ1,τ2)»}
1394      and φ{τ{«(τ1,τ2)»}}
1395  shows φ{σ{«(τ1::'a::AOT_Term_id_2,τ2::'b::AOT_Term_id_2)»}}
1396proof -
1397  AOT_have τ{«(τ1,τ2)»} = σ{«(τ1,τ2)»}
1398    using "rule-id-df:1" assms(1,2) by auto
1399  AOT_thus φ{σ{«(τ1,τ2)»}} using assms(3) "rule=E" by blast
1400qed
1401
1402AOT_theorem "rule-id-df:2:a[zero]":
1403  assumes τ =df σ and σ and φ{τ}
1404  shows φ{σ}
1405proof -
1406  AOT_have τ = σ using "rule-id-df:1[zero]" assms(1,2) by blast
1407  AOT_thus φ{σ} using assms(3) "rule=E" by blast
1408qed
1409
1410lemmas "=dfE" = "rule-id-df:2:a" "rule-id-df:2:a[zero]"
1411
1412AOT_theorem "rule-id-df:2:b":
1413  assumes τ{α1...αn} =df σ{α1...αn} and σ{τ1...τn} and φ{σ{τ1...τn}}
1414  shows φ{τ{τ1...τn}}
1415proof -
1416  AOT_have τ{τ1...τn} = σ{τ1...τn}
1417    using "rule-id-df:1" assms(1,2) by blast
1418  AOT_hence σ{τ1...τn} = τ{τ1...τn}
1419    using "rule=E" "=I"(1) "t=t-proper:1" "→E" by fast
1420  AOT_thus φ{τ{τ1...τn}} using assms(3) "rule=E" by blast
1421qed
1422
1423AOT_theorem "rule-id-df:2:b[2]":
1424  assumes τ{«(α1,α2)»} =df σ{«(α1,α2)»}
1425      and σ{«(τ1,τ2)»}
1426      and φ{σ{«(τ1,τ2)»}}
1427  shows φ{τ{«(τ1::'a::AOT_Term_id_2,τ2::'b::AOT_Term_id_2)»}}
1428proof -
1429  AOT_have τ{«(τ1,τ2)»} = σ{«(τ1,τ2)»}
1430    using "=I"(1) "rule-id-df:2:a[2]" RAA(1) assms(1,2) "→I" by metis
1431  AOT_hence σ{«(τ1,τ2)»} = τ{«(τ1,τ2)»}
1432    using "rule=E" "=I"(1) "t=t-proper:1" "→E" by fast
1433  AOT_thus φ{τ{«(τ1,τ2)»}} using assms(3) "rule=E" by blast
1434qed
1435
1436AOT_theorem "rule-id-df:2:b[zero]":
1437  assumes τ =df σ and σ and φ{σ}
1438  shows φ{τ}
1439proof -
1440  AOT_have τ = σ using "rule-id-df:1[zero]" assms(1,2) by blast
1441  AOT_hence σ = τ
1442    using "rule=E" "=I"(1) "t=t-proper:1" "→E" by fast
1443  AOT_thus φ{τ} using assms(3) "rule=E" by blast
1444qed
1445
1446lemmas "=dfI" = "rule-id-df:2:b" "rule-id-df:2:b[zero]"
1447
1448AOT_theorem "free-thms:1": τ  β (β = τ)
1449  by (metis "∃E" "rule=I:1" "t=t-proper:2" "→I" "∃I"(1) "≡I" "→E")
1450
1451AOT_theorem "free-thms:2": α φ{α}  (β (β = τ)  φ{τ})
1452  by (metis "∃E" "rule=E" "cqt:2[const_var]"[axiom_inst] "→I" "∀E"(1))
1453
1454AOT_theorem "free-thms:3[const_var]": β (β = α)
1455  by (meson "∃I"(2) "id-eq:1")
1456
1457AOT_theorem "free-thms:3[lambda]":
1458  assumes INSTANCE_OF_CQT_2(φ)
1459  shows β (β = ν1...νn φ{ν1...νn}])
1460  by (meson "=I"(3) assms "cqt:2[lambda]"[axiom_inst] "existential:1")
1461
1462AOT_theorem "free-thms:4[rel]":
1463  ([Π]κ1...κn  κ1...κn[Π])  β (β = Π)
1464  by (metis "rule=I:1" "&E"(1) "∨E"(1) "cqt:5:a"[axiom_inst]
1465            "cqt:5:b"[axiom_inst] "→I" "∃I"(1))
1466
1467AOT_theorem "free-thms:4[vars]":
1468  ([Π]κ1...κn  κ1...κn[Π])  β1...∃βn (β1...βn = κ1...κn)
1469  by (metis "rule=I:1" "&E"(2) "∨E"(1) "cqt:5:a"[axiom_inst]
1470            "cqt:5:b"[axiom_inst] "→I" "∃I"(1))
1471
1472AOT_theorem "free-thms:4[1,rel]":
1473  ([Π]κ  κ[Π])  β (β = Π)
1474  by (metis "rule=I:1" "&E"(1) "∨E"(1) "cqt:5:a"[axiom_inst]
1475            "cqt:5:b"[axiom_inst] "→I" "∃I"(1))
1476AOT_theorem "free-thms:4[1,1]":
1477  ([Π]κ  κ[Π])  β (β = κ)
1478  by (metis "rule=I:1" "&E"(2) "∨E"(1) "cqt:5:a"[axiom_inst]
1479            "cqt:5:b"[axiom_inst] "→I" "∃I"(1))
1480
1481AOT_theorem "free-thms:4[2,rel]":
1482  ([Π]κ1κ2  κ1κ2[Π])  β (β = Π)
1483  by (metis "rule=I:1" "&E"(1) "∨E"(1) "cqt:5:a[2]"[axiom_inst]
1484            "cqt:5:b[2]"[axiom_inst] "→I" "∃I"(1))
1485AOT_theorem "free-thms:4[2,1]":
1486  ([Π]κ1κ2  κ1κ2[Π])  β (β = κ1)
1487  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[2]"[axiom_inst]
1488            "cqt:5:b[2]"[axiom_inst] "→I" "∃I"(1))
1489AOT_theorem "free-thms:4[2,2]":
1490  ([Π]κ1κ2  κ1κ2[Π])  β (β = κ2)
1491  by (metis "rule=I:1" "&E"(2) "∨E"(1) "cqt:5:a[2]"[axiom_inst]
1492            "cqt:5:b[2]"[axiom_inst] "→I" "∃I"(1))
1493AOT_theorem "free-thms:4[3,rel]":
1494  ([Π]κ1κ2κ3  κ1κ2κ3[Π])  β (β = Π)
1495  by (metis "rule=I:1" "&E"(1) "∨E"(1) "cqt:5:a[3]"[axiom_inst]
1496            "cqt:5:b[3]"[axiom_inst] "→I" "∃I"(1))
1497AOT_theorem "free-thms:4[3,1]":
1498  ([Π]κ1κ2κ3  κ1κ2κ3[Π])  β (β = κ1)
1499  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[3]"[axiom_inst]
1500            "cqt:5:b[3]"[axiom_inst] "→I" "∃I"(1))
1501AOT_theorem "free-thms:4[3,2]":
1502  ([Π]κ1κ2κ3  κ1κ2κ3[Π])  β (β = κ2)
1503  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[3]"[axiom_inst]
1504            "cqt:5:b[3]"[axiom_inst] "→I" "∃I"(1))
1505AOT_theorem "free-thms:4[3,3]":
1506  ([Π]κ1κ2κ3  κ1κ2κ3[Π])  β (β = κ3)
1507  by (metis "rule=I:1" "&E"(2) "∨E"(1) "cqt:5:a[3]"[axiom_inst]
1508            "cqt:5:b[3]"[axiom_inst] "→I" "∃I"(1))
1509AOT_theorem "free-thms:4[4,rel]":
1510  ([Π]κ1κ2κ3κ4  κ1κ2κ3κ4[Π])  β (β = Π)
1511  by (metis "rule=I:1" "&E"(1) "∨E"(1) "cqt:5:a[4]"[axiom_inst]
1512            "cqt:5:b[4]"[axiom_inst] "→I" "∃I"(1))
1513AOT_theorem "free-thms:4[4,1]":
1514  ([Π]κ1κ2κ3κ4  κ1κ2κ3κ4[Π])  β (β = κ1)
1515  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[4]"[axiom_inst]
1516            "cqt:5:b[4]"[axiom_inst] "→I" "∃I"(1))
1517AOT_theorem "free-thms:4[4,2]":
1518  ([Π]κ1κ2κ3κ4  κ1κ2κ3κ4[Π])  β (β = κ2)
1519  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[4]"[axiom_inst]
1520            "cqt:5:b[4]"[axiom_inst] "→I" "∃I"(1))
1521AOT_theorem "free-thms:4[4,3]":
1522  ([Π]κ1κ2κ3κ4  κ1κ2κ3κ4[Π])  β (β = κ3)
1523  by (metis "rule=I:1" "&E" "∨E"(1) "cqt:5:a[4]"[axiom_inst]
1524            "cqt:5:b[4]"[axiom_inst] "→I" "∃I"(1))
1525AOT_theorem "free-thms:4[4,4]":
1526  ([Π]κ1κ2κ3κ4  κ1κ2κ3κ4[Π])  β (β = κ4)
1527  by (metis "rule=I:1" "&E"(2) "∨E"(1) "cqt:5:a[4]"[axiom_inst]
1528            "cqt:5:b[4]"[axiom_inst] "→I" "∃I"(1))
1529
1530AOT_theorem "ex:1:a": α α
1531  by (rule GEN) (fact "cqt:2[const_var]"[axiom_inst])
1532AOT_theorem "ex:1:b": αβ(β = α)
1533  by (rule GEN) (fact "free-thms:3[const_var]")
1534
1535AOT_theorem "ex:2:a": α
1536  by (rule RN) (fact "cqt:2[const_var]"[axiom_inst])
1537AOT_theorem "ex:2:b": β(β = α)
1538  by (rule RN) (fact "free-thms:3[const_var]")
1539
1540AOT_theorem "ex:3:a": α α
1541  by (rule RN) (fact "ex:1:a")
1542AOT_theorem "ex:3:b": αβ(β = α)
1543  by (rule RN) (fact "ex:1:b")
1544
1545AOT_theorem "ex:4:a": α α
1546  by (rule GEN; rule RN) (fact "cqt:2[const_var]"[axiom_inst])
1547AOT_theorem "ex:4:b": αβ(β = α)
1548  by (rule GEN; rule RN) (fact "free-thms:3[const_var]")
1549
1550AOT_theorem "ex:5:a": α α
1551  by (rule RN) (simp add: "ex:4:a")
1552AOT_theorem "ex:5:b": αβ(β = α)
1553  by (rule RN) (simp add: "ex:4:b")
1554
1555AOT_theorem "all-self=:1": α(α = α)
1556  by (rule RN; rule GEN) (fact "id-eq:1")
1557AOT_theorem "all-self=:2": α(α = α)
1558  by (rule GEN; rule RN) (fact "id-eq:1")
1559
1560AOT_theorem "id-nec:1": α = β  (α = β)
1561proof(rule "→I")
1562  AOT_assume α = β
1563  moreover AOT_have (α = α)
1564    by (rule RN) (fact "id-eq:1")
1565  ultimately AOT_show (α = β) using "rule=E" by fast
1566qed
1567
1568AOT_theorem "id-nec:2": τ = σ  (τ = σ)
1569proof(rule "→I")
1570  AOT_assume asm: τ = σ
1571  moreover AOT_have τ
1572    using calculation "t=t-proper:1" "→E" by blast
1573  moreover AOT_have (τ = τ)
1574    using calculation "all-self=:2" "∀E"(1) by blast
1575  ultimately AOT_show (τ = σ) using "rule=E" by fast
1576qed
1577
1578AOT_theorem "term-out:1": φ{α}  β (β = α & φ{β})
1579proof (rule "≡I"; rule "→I")
1580  AOT_assume asm: φ{α}
1581  AOT_show β (β = α & φ{β})
1582    by (rule "∃I"(2)[where β=α]; rule "&I")
1583       (auto simp: "id-eq:1" asm)
1584next
1585  AOT_assume 0: β (β = α & φ{β})
1586  AOT_obtain β where β = α & φ{β}
1587    using "∃E"[rotated, OF 0] by blast
1588  AOT_thus φ{α} using "&E" "rule=E" by blast
1589qed
1590
1591AOT_theorem "term-out:2": τ  (φ{τ}  α(α = τ & φ{α}))
1592proof(rule "→I")
1593  AOT_assume τ
1594  moreover AOT_have α (φ{α}  β (β = α & φ{β}))
1595    by (rule GEN) (fact "term-out:1")
1596  ultimately AOT_show φ{τ}  α(α = τ & φ{α})
1597    using "∀E" by blast
1598qed
1599
1600AOT_theorem "term-out:3":
1601  (φ{α} & β(φ{β}  β = α))  β(φ{β}  β = α)
1602  apply (rule "≡I"; rule "→I")
1603   apply (frule "&E"(1))
1604   apply (drule "&E"(2))
1605   apply (rule GEN; rule "≡I"; rule "→I")
1606  using "rule-ui:2[const_var]" "vdash-properties:5"
1607    apply blast
1608   apply (meson "rule=E" "id-eq:1")
1609  apply (rule "&I")
1610  using "id-eq:1" "≡E"(2) "rule-ui:3"
1611   apply blast
1612  apply (rule GEN; rule "→I")
1613  using "≡E"(1) "rule-ui:2[const_var]"
1614  by blast
1615
1616(* Note: generalized alphabetic variant of the last theorem. *)
1617AOT_theorem "term-out:4":
1618  (φ{β} & α(φ{α}  α = β))  α(φ{α}  α = β)
1619  using "term-out:3" .
1620
1621(* TODO: Provide a nicer mechanism for introducing custom binders. *)
1622AOT_define AOT_exists_unique :: α  φ  φ "uniqueness:1":
1623  «AOT_exists_unique φ» df α (φ{α} & β (φ{β}  β = α))
1624syntax (input) "_AOT_exists_unique" :: α  φ  φ ("∃!_ _" [1,40])
1625syntax (output) "_AOT_exists_unique" :: α  φ  φ ("∃!_'(_')" [1,40])
1626AOT_syntax_print_translations
1627  "_AOT_exists_unique τ φ" <= "CONST AOT_exists_unique (_abs τ φ)"
1628syntax
1629   "_AOT_exists_unique_ellipse" :: id_position  id_position  φ  φ
1630   (∃!_...∃!_ _› [1,40])
1631parse_ast_translation1632[(syntax_const‹_AOT_exists_unique_ellipse›,
1633  fn ctx => fn [a,b,c] => Ast.mk_appl (Ast.Constant "AOT_exists_unique")
1634  [parseEllipseList "_AOT_vars" ctx [a,b],c]),
1635 (syntax_const‹_AOT_exists_unique›,
1636  AOT_restricted_binder
1637    const_nameAOT_exists_unique
1638    const_syntaxAOT_conj)]
1639print_translationAOT_syntax_print_translations [
1640  AOT_preserve_binder_abs_tr'
1641    const_syntaxAOT_exists_unique
1642    syntax_const‹_AOT_exists_unique›
1643    (syntax_const‹_AOT_exists_unique_ellipse›, true)
1644    const_nameAOT_conj,
1645  AOT_binder_trans
1646    @{theory}
1647    @{binding "AOT_exists_unique_binder"}
1648    syntax_const‹_AOT_exists_unique›
1649]
1650
1651
1652context AOT_meta_syntax
1653begin
1654notation AOT_exists_unique (binder "!" 20)
1655end
1656context AOT_no_meta_syntax
1657begin
1658no_notation AOT_exists_unique (binder "!" 20)
1659end
1660
1661AOT_theorem "uniqueness:2": ∃!α φ{α}  αβ(φ{β}  β = α)
1662proof(rule "≡I"; rule "→I")
1663    AOT_assume ∃!α φ{α}
1664    AOT_hence α (φ{α} & β (φ{β}  β = α))
1665      using "uniqueness:1" "dfE" by blast
1666    then AOT_obtain α where φ{α} & β (φ{β}  β = α)
1667      using "instantiation"[rotated] by blast
1668    AOT_hence β(φ{β}  β = α)
1669      using "term-out:3" "≡E" by blast
1670    AOT_thus αβ(φ{β}  β = α)
1671      using "∃I" by fast
1672next
1673    AOT_assume αβ(φ{β}  β = α)
1674    then AOT_obtain α where β (φ{β}  β = α)
1675      using "instantiation"[rotated] by blast
1676    AOT_hence φ{α} & β (φ{β}  β = α)
1677      using "term-out:3" "≡E" by blast
1678    AOT_hence α (φ{α} & β (φ{β}  β = α))
1679      using "∃I" by fast
1680    AOT_thus ∃!α φ{α}
1681      using "uniqueness:1" "dfI" by blast
1682qed
1683
1684AOT_theorem "uni-most": ∃!α φ{α}  βγ((φ{β} & φ{γ})  β = γ)
1685proof(rule "→I"; rule GEN; rule GEN; rule "→I")
1686  fix β γ
1687  AOT_assume ∃!α φ{α}
1688  AOT_hence αβ(φ{β}  β = α)
1689    using "uniqueness:2" "≡E" by blast
1690  then AOT_obtain α where β(φ{β}  β = α)
1691    using "instantiation"[rotated] by blast
1692  moreover AOT_assume φ{β} & φ{γ}
1693  ultimately AOT_have β = α and γ = α
1694    using "∀E"(2) "&E" "≡E"(1,2) by blast+
1695  AOT_thus β = γ
1696    by (metis "rule=E" "id-eq:2" "→E")
1697qed
1698
1699AOT_theorem "nec-exist-!": α(φ{α}  φ{α})  (∃!α φ{α}  ∃!α φ{α})
1700proof (rule "→I"; rule "→I")
1701  AOT_assume a: α(φ{α}  φ{α})
1702  AOT_assume ∃!α φ{α}
1703  AOT_hence α (φ{α} & β (φ{β}  β = α))
1704    using "uniqueness:1" "dfE" by blast
1705  then AOT_obtain α where ξ: φ{α} & β (φ{β}  β = α)
1706    using "instantiation"[rotated] by blast
1707  AOT_have φ{α}
1708    using ξ a "&E" "∀E" "→E" by fast
1709  moreover AOT_have β (φ{β}  β = α)
1710    apply (rule GEN; rule "→I")
1711    using ξ[THEN "&E"(2), THEN "∀E"(2), THEN "→E"]
1712          "qml:2"[axiom_inst, THEN "→E"] by blast
1713  ultimately AOT_have (φ{α} & β (φ{β}  β = α))
1714    using "&I" by blast
1715  AOT_thus ∃!α φ{α}
1716    using "uniqueness:1" "dfI" "∃I" by fast
1717qed
1718
1719subsection‹The Theory of Actuality and Descriptions›
1720text‹\label{PLM: 9.8}›
1721
1722AOT_theorem "act-cond": 𝒜(φ  ψ)  (𝒜φ  𝒜ψ)
1723  using "→I" "≡E"(1) "logic-actual-nec:2"[axiom_inst] by blast
1724
1725AOT_theorem "nec-imp-act": φ  𝒜φ
1726  by (metis "act-cond" "contraposition:1[2]" "≡E"(4)
1727            "qml:2"[THEN act_closure, axiom_inst]
1728            "qml-act:2"[axiom_inst] RAA(1) "→E" "→I")
1729
1730AOT_theorem "act-conj-act:1": 𝒜(𝒜φ  φ)
1731  using "→I" "≡E"(2) "logic-actual-nec:2"[axiom_inst]
1732        "logic-actual-nec:4"[axiom_inst] by blast
1733
1734AOT_theorem "act-conj-act:2": 𝒜(φ  𝒜φ)
1735  by (metis "→I" "≡E"(2, 4) "logic-actual-nec:2"[axiom_inst]
1736            "logic-actual-nec:4"[axiom_inst] RAA(1))
1737
1738AOT_theorem "act-conj-act:3": (𝒜φ & 𝒜ψ)  𝒜(φ & ψ)
1739proof -
1740  AOT_have (φ  (ψ  (φ & ψ)))
1741    by (rule RN) (fact Adjunction)
1742  AOT_hence 𝒜(φ  (ψ  (φ & ψ)))
1743    using "nec-imp-act" "→E" by blast
1744  AOT_hence 𝒜φ  𝒜(ψ  (φ & ψ))
1745    using "act-cond" "→E" by blast
1746  moreover AOT_have 𝒜(ψ  (φ & ψ))  (𝒜ψ  𝒜(φ & ψ))
1747    by (fact "act-cond")
1748  ultimately AOT_have 𝒜φ  (𝒜ψ  𝒜(φ & ψ))
1749    using "→I" "→E" by metis
1750  AOT_thus (𝒜φ & 𝒜ψ)  𝒜(φ & ψ)
1751    by (metis Importation "→E")
1752qed
1753
1754AOT_theorem "act-conj-act:4": 𝒜(𝒜φ  φ)
1755proof -
1756  AOT_have (𝒜(𝒜φ  φ) & 𝒜(φ  𝒜φ))  𝒜((𝒜φ  φ) & (φ  𝒜φ))
1757    by (fact "act-conj-act:3")
1758  moreover AOT_have 𝒜(𝒜φ  φ) & 𝒜(φ  𝒜φ)
1759    using "&I" "act-conj-act:1" "act-conj-act:2" by simp
1760  ultimately AOT_have ζ: 𝒜((𝒜φ  φ) & (φ  𝒜φ))
1761    using "→E" by blast
1762  AOT_have 𝒜(((𝒜φ  φ) & (φ  𝒜φ))  (𝒜φ  φ))
1763    using "conventions:3"[THEN "df-rules-formulas[2]",
1764                          THEN act_closure, axiom_inst] by blast
1765  AOT_hence 𝒜((𝒜φ  φ) & (φ  𝒜φ))  𝒜(𝒜φ  φ)
1766    using "act-cond" "→E" by blast
1767  AOT_thus 𝒜(𝒜φ  φ) using ζ "→E" by blast
1768qed
1769
1770(* TODO: Consider introducing AOT_inductive. *)
1771inductive arbitrary_actualization for φ where
1772  arbitrary_actualization φ «𝒜φ»
1773| arbitrary_actualization φ «𝒜ψ» if arbitrary_actualization φ ψ
1774declare arbitrary_actualization.cases[AOT]
1775        arbitrary_actualization.induct[AOT]
1776        arbitrary_actualization.simps[AOT]
1777        arbitrary_actualization.intros[AOT]
1778syntax arbitrary_actualization :: φ'  φ'  AOT_prop
1779  ("ARBITRARY'_ACTUALIZATION'(_,_')")
1780
1781notepad
1782begin
1783  AOT_modally_strict {
1784    fix φ
1785    AOT_have ARBITRARY_ACTUALIZATION(𝒜φ  φ, 𝒜(𝒜φ  φ))
1786      using AOT_PLM.arbitrary_actualization.intros by metis
1787    AOT_have ARBITRARY_ACTUALIZATION(𝒜φ  φ, 𝒜𝒜(𝒜φ  φ))
1788      using AOT_PLM.arbitrary_actualization.intros by metis
1789    AOT_have ARBITRARY_ACTUALIZATION(𝒜φ  φ, 𝒜𝒜𝒜(𝒜φ  φ))
1790      using AOT_PLM.arbitrary_actualization.intros by metis
1791  }
1792end
1793
1794
1795AOT_theorem "closure-act:1":
1796  assumes ARBITRARY_ACTUALIZATION(𝒜φ  φ, ψ)
1797  shows ψ
1798using assms proof(induct)
1799  case 1
1800  AOT_show 𝒜(𝒜φ  φ)
1801    by (simp add: "act-conj-act:4")
1802next
1803  case (2 ψ)
1804  AOT_thus 𝒜ψ
1805    by (metis arbitrary_actualization.simps "≡E"(1)
1806              "logic-actual-nec:4"[axiom_inst])
1807qed
1808
1809AOT_theorem "closure-act:2": α 𝒜(𝒜φ{α}  φ{α})
1810  by (simp add: "act-conj-act:4" "∀I")
1811
1812AOT_theorem "closure-act:3": 𝒜α 𝒜(𝒜φ{α}  φ{α})
1813  by (metis (no_types, lifting) "act-conj-act:4" "≡E"(1,2) "∀I"
1814            "logic-actual-nec:3"[axiom_inst]
1815            "logic-actual-nec:4"[axiom_inst])
1816
1817AOT_theorem "closure-act:4": 𝒜α1...∀αn 𝒜(𝒜φ{α1...αn}  φ{α1...αn})
1818  using "closure-act:3" .
1819
1820AOT_act_theorem "RA[1]":
1821  assumes  φ
1822  shows  𝒜φ
1823  ― ‹While this proof is rejected in PLM,
1824      we merely state it as modally-fragile rule,
1825      which addresses the concern in PLM.›
1826  using "¬¬E" assms "≡E"(3) "logic-actual"[act_axiom_inst]
1827        "logic-actual-nec:1"[axiom_inst] "modus-tollens:2" by blast
1828AOT_theorem "RA[2]":
1829  assumes  φ
1830  shows  𝒜φ
1831  ― ‹This rule is in fact a consequence of RN and
1832      does not require an appeal to the semantics itself.›
1833  using RN assms "nec-imp-act" "vdash-properties:5" by blast
1834AOT_theorem "RA[3]":
1835  assumes Γ  φ
1836  shows 𝒜Γ  𝒜φ
1837  text‹This rule is only derivable from the semantics,
1838       but apparently no proof actually relies on it.
1839       If this turns out to be required, it is valid to derive it from the
1840       semantics just like RN, but we refrain from doing so, unless necessary.›
1841  (*  using assms by (meson AOT_sem_act imageI) *)
1842  oops ― ‹discard the rule›
1843
1844AOT_act_theorem "ANeg:1": ¬𝒜φ  ¬φ
1845  by (simp add: "RA[1]" "contraposition:1[1]" "deduction-theorem"
1846                "≡I" "logic-actual"[act_axiom_inst])
1847
1848AOT_act_theorem "ANeg:2": ¬𝒜¬φ  φ
1849  using "ANeg:1" "≡I" "≡E"(5) "useful-tautologies:1"
1850        "useful-tautologies:2" by blast
1851
1852AOT_theorem "Act-Basic:1": 𝒜φ  𝒜¬φ
1853  by (meson "∨I"(1,2) "≡E"(2) "logic-actual-nec:1"[axiom_inst] "raa-cor:1")
1854
1855AOT_theorem "Act-Basic:2": 𝒜(φ & ψ)  (𝒜φ & 𝒜ψ)
1856proof (rule "≡I"; rule "→I")
1857  AOT_assume 𝒜(φ & ψ)
1858  moreover AOT_have 𝒜((φ & ψ)  φ)
1859    by (simp add: "RA[2]" "Conjunction Simplification"(1))
1860  moreover AOT_have 𝒜((φ & ψ)  ψ)
1861    by (simp add: "RA[2]" "Conjunction Simplification"(2))
1862  ultimately AOT_show 𝒜φ & 𝒜ψ
1863    using "act-cond"[THEN "→E", THEN "→E"] "&I" by metis
1864next
1865  AOT_assume 𝒜φ & 𝒜ψ
1866  AOT_thus 𝒜(φ & ψ)
1867    using "act-conj-act:3" "vdash-properties:6" by blast
1868qed
1869
1870AOT_theorem "Act-Basic:3": 𝒜(φ  ψ)  (𝒜(φ  ψ) & 𝒜(ψ  φ))
1871proof (rule "≡I"; rule "→I")
1872  AOT_assume 𝒜(φ  ψ)
1873  moreover AOT_have 𝒜((φ  ψ)  (φ  ψ))
1874    by (simp add: "RA[2]" "deduction-theorem" "≡E"(1))
1875  moreover AOT_have 𝒜((φ  ψ)  (ψ  φ))
1876    by (simp add: "RA[2]" "deduction-theorem" "≡E"(2))
1877  ultimately AOT_show 𝒜(φ  ψ) & 𝒜(ψ  φ)
1878    using "act-cond"[THEN "→E", THEN "→E"] "&I" by metis
1879next
1880  AOT_assume 𝒜(φ  ψ) & 𝒜(ψ  φ)
1881  AOT_hence 𝒜((φ  ψ) & (ψ  φ))
1882    by (metis "act-conj-act:3" "vdash-properties:10")
1883  moreover AOT_have 𝒜(((φ  ψ) & (ψ  φ))  (φ  ψ))
1884    by (simp add: "conventions:3" "RA[2]" "df-rules-formulas[2]"
1885                  "vdash-properties:1[2]")
1886  ultimately AOT_show 𝒜(φ  ψ)
1887    using "act-cond"[THEN "→E", THEN "→E"] by metis
1888qed
1889
1890AOT_theorem "Act-Basic:4": (𝒜(φ  ψ) & 𝒜(ψ  φ))  (𝒜φ  𝒜ψ)
1891proof (rule "≡I"; rule "→I")
1892  AOT_assume 0: 𝒜(φ  ψ) & 𝒜(ψ  φ)
1893  AOT_show 𝒜φ  𝒜ψ
1894    using 0 "&E" "act-cond"[THEN "→E", THEN "→E"] "≡I" "→I" by metis
1895next
1896  AOT_assume 𝒜φ  𝒜ψ
1897  AOT_thus 𝒜(φ  ψ) & 𝒜(ψ  φ)
1898    by (metis "→I" "logic-actual-nec:2"[axiom_inst] "≡E"(1,2) "&I")
1899qed
1900
1901AOT_theorem "Act-Basic:5": 𝒜(φ  ψ)  (𝒜φ  𝒜ψ)
1902  using "Act-Basic:3" "Act-Basic:4" "≡E"(5) by blast
1903
1904AOT_theorem "Act-Basic:6": 𝒜φ  𝒜φ
1905  by (simp add: "≡I" "qml:2"[axiom_inst] "qml-act:1"[axiom_inst])
1906
1907AOT_theorem "Act-Basic:7": 𝒜φ  𝒜φ
1908  by (metis "Act-Basic:6" "→I" "→E" "≡E"(1,2) "nec-imp-act"
1909            "qml-act:2"[axiom_inst])
1910
1911AOT_theorem "Act-Basic:8": φ  𝒜φ
1912  using "Hypothetical Syllogism" "nec-imp-act" "qml-act:1"[axiom_inst] by blast
1913
1914AOT_theorem "Act-Basic:9": 𝒜(φ  ψ)  (𝒜φ  𝒜ψ)
1915proof (rule "≡I"; rule "→I")
1916  AOT_assume 𝒜(φ  ψ)
1917  AOT_thus 𝒜φ  𝒜ψ
1918  proof (rule "raa-cor:3")
1919    AOT_assume ¬(𝒜φ  𝒜ψ)
1920    AOT_hence ¬𝒜φ & ¬𝒜ψ
1921      by (metis "≡E"(1) "oth-class-taut:5:d")
1922    AOT_hence 𝒜¬φ & 𝒜¬ψ
1923      using "logic-actual-nec:1"[axiom_inst, THEN "≡E"(2)] "&E" "&I" by metis
1924    AOT_hence 𝒜(¬φ & ¬ψ)
1925      using "≡E" "Act-Basic:2" by metis
1926    moreover AOT_have 𝒜((¬φ & ¬ψ)  ¬(φ  ψ))
1927      using "RA[2]" "≡E"(6) "oth-class-taut:3:a" "oth-class-taut:5:d" by blast
1928    moreover AOT_have 𝒜(¬φ & ¬ψ)  𝒜(¬(φ  ψ))
1929      using calculation(2) by (metis "Act-Basic:5" "≡E"(1))
1930    ultimately AOT_have 𝒜(¬(φ  ψ)) using "≡E" by blast
1931    AOT_thus ¬𝒜(φ  ψ)
1932      using "logic-actual-nec:1"[axiom_inst, THEN "≡E"(1)] by auto
1933  qed
1934next
1935  AOT_assume 𝒜φ  𝒜ψ
1936  AOT_thus 𝒜(φ  ψ)
1937    by (meson "RA[2]" "act-cond" "∨I"(1) "∨E"(1) "Disjunction Addition"(1,2))
1938qed
1939
1940AOT_theorem "Act-Basic:10": 𝒜α φ{α}  α 𝒜φ{α}
1941proof -
1942  AOT_have θ: ¬𝒜α ¬φ{α}  ¬α 𝒜¬φ{α}
1943    by (rule "oth-class-taut:4:b"[THEN "≡E"(1)])
1944       (metis "logic-actual-nec:3"[axiom_inst])
1945  AOT_have ξ: ¬α 𝒜¬φ{α}  ¬α ¬𝒜φ{α}
1946    by (rule "oth-class-taut:4:b"[THEN "≡E"(1)])
1947       (rule "logic-actual-nec:1"[THEN universal_closure,
1948               axiom_inst, THEN "cqt-basic:3"[THEN "→E"]])
1949  AOT_have 𝒜(α φ{α})  𝒜(¬α ¬φ{α})
1950    using "conventions:4"[THEN "df-rules-formulas[1]",
1951                          THEN act_closure, axiom_inst]
1952          "conventions:4"[THEN "df-rules-formulas[2]",
1953                          THEN act_closure, axiom_inst]
1954    "Act-Basic:4"[THEN "≡E"(1)] "&I" "Act-Basic:5"[THEN "≡E"(2)] by metis
1955  also AOT_have   ¬𝒜α ¬φ{α}
1956    by (simp add: "logic-actual-nec:1" "vdash-properties:1[2]")
1957  also AOT_have   ¬α 𝒜 ¬φ{α} using θ by blast
1958  also AOT_have   ¬α ¬𝒜 φ{α} using ξ by blast
1959  also AOT_have   α 𝒜 φ{α}
1960    using "conventions:4"[THEN "≡Df"] by (metis "≡E"(6) "oth-class-taut:3:a")
1961  finally AOT_show 𝒜α φ{α}  α 𝒜φ{α} .
1962qed
1963
1964
1965AOT_theorem "Act-Basic:11":
1966  𝒜α(φ{α}  ψ{α})  α(𝒜φ{α}  𝒜ψ{α})
1967proof(rule "≡I"; rule "→I")
1968  AOT_assume 𝒜α(φ{α}  ψ{α})
1969  AOT_hence α𝒜(φ{α}  ψ{α})
1970    using "logic-actual-nec:3"[axiom_inst, THEN "≡E"(1)] by blast
1971  AOT_hence 𝒜(φ{α}  ψ{α}) for α using "∀E" by blast
1972  AOT_hence 𝒜φ{α}  𝒜ψ{α} for α by (metis "Act-Basic:5" "≡E"(1))
1973  AOT_thus α(𝒜φ{α}  𝒜ψ{α}) by (rule "∀I")
1974next
1975  AOT_assume α(𝒜φ{α}  𝒜ψ{α})
1976  AOT_hence 𝒜φ{α}  𝒜ψ{α} for α using "∀E" by blast
1977  AOT_hence 𝒜(φ{α}  ψ{α}) for α by (metis "Act-Basic:5" "≡E"(2))
1978  AOT_hence α 𝒜(φ{α}  ψ{α}) by (rule "∀I")
1979  AOT_thus 𝒜α(φ{α}  ψ{α})
1980    using "logic-actual-nec:3"[axiom_inst, THEN "≡E"(2)] by fast
1981qed
1982
1983AOT_act_theorem "act-quant-uniq":
1984  β(𝒜φ{β}  β = α)  β(φ{β}  β = α)
1985proof(rule "≡I"; rule "→I")
1986  AOT_assume β(𝒜φ{β}  β = α)
1987  AOT_hence 𝒜φ{β}  β = α for β using "∀E" by blast
1988  AOT_hence φ{β}  β = α for β
1989    using "≡I" "→I" "RA[1]" "≡E"(1,2) "logic-actual"[act_axiom_inst] "→E"
1990    by metis
1991  AOT_thus β(φ{β}  β = α) by (rule "∀I")
1992next
1993  AOT_assume β(φ{β}  β = α)
1994  AOT_hence φ{β}  β = α for β using "∀E" by blast
1995  AOT_hence 𝒜φ{β}  β = α for β
1996    using "≡I" "→I" "RA[1]" "≡E"(1,2) "logic-actual"[act_axiom_inst] "→E"
1997    by metis
1998  AOT_thus β(𝒜φ{β}  β = α) by (rule "∀I")
1999qed
2000
2001AOT_act_theorem "fund-cont-desc": x = ιx(φ{x})  z(φ{z}  z = x)
2002  using descriptions[axiom_inst] "act-quant-uniq" "≡E"(5) by fast
2003
2004AOT_act_theorem hintikka: x = ιx(φ{x})  (φ{x} & z (φ{z}  z = x))
2005  using "Commutativity of ≡"[THEN "≡E"(1)] "term-out:3"
2006        "fund-cont-desc" "≡E"(5) by blast
2007
2008
2009locale russell_axiom =
2010  fixes ψ
2011  assumes ψ_denotes_asm: "[v  ψ{κ}]  [v  κ]"
2012begin
2013AOT_act_theorem "russell-axiom":
2014  ψ{ιx φ{x}}  x(φ{x} & z(φ{z}  z = x) & ψ{x})
2015proof -
2016  AOT_have b: x (x = ιx φ{x}  (φ{x} & z(φ{z}  z = x)))
2017    using hintikka "∀I" by fast
2018  show ?thesis
2019  proof(rule "≡I"; rule "→I")
2020    AOT_assume c: ψ{ιx φ{x}}
2021    AOT_hence d: ιx φ{x}
2022      using ψ_denotes_asm by blast
2023    AOT_hence y (y = ιx φ{x})
2024      by (metis "rule=I:1" "existential:1")
2025    then AOT_obtain a where a_def: a = ιx φ{x}
2026      using "instantiation"[rotated] by blast
2027    moreover AOT_have a = ιx φ{x}  (φ{a} & z(φ{z}  z = a))
2028      using b "∀E" by blast
2029    ultimately AOT_have φ{a} & z(φ{z}  z = a)
2030      using "≡E" by blast
2031    moreover AOT_have ψ{a}
2032    proof - 
2033      AOT_have 1: xy(x = y  y = x)
2034        by (simp add: "id-eq:2" "universal-cor")
2035      AOT_have a = ιx φ{x}   ιx φ{x} = a
2036        by (rule "∀E"(1)[where τ="«ιx φ{x}»"]; rule "∀E"(2)[where β=a])
2037           (auto simp: 1 d "universal-cor")
2038      AOT_thus ψ{a}
2039        using a_def c "rule=E" "→E" by blast
2040    qed
2041    ultimately AOT_have φ{a} & z(φ{z}  z = a) & ψ{a} by (rule "&I")
2042    AOT_thus x(φ{x} & z(φ{z}  z = x) & ψ{x}) by (rule "∃I")
2043  next
2044    AOT_assume x(φ{x} & z(φ{z}  z = x) & ψ{x})
2045    then AOT_obtain b where g: φ{b} & z(φ{z}  z = b) & ψ{b}
2046      using "instantiation"[rotated] by blast
2047    AOT_hence h: b = ιx φ{x}  (φ{b} & z(φ{z}  z = b))
2048      using b "∀E" by blast
2049    AOT_have φ{b} & z(φ{z}  z = b) and j: ψ{b}
2050      using g "&E" by blast+
2051    AOT_hence b = ιx φ{x} using h "≡E" by blast
2052    AOT_thus ψ{ιx φ{x}} using j "rule=E" by blast
2053  qed
2054qed
2055end
2056
2057interpretation "russell-axiom[exe,1]": russell_axiom λ κ . «[Π]κ»
2058  by standard (metis "cqt:5:a[1]"[axiom_inst, THEN "→E"] "&E"(2))
2059interpretation "russell-axiom[exe,2,1,1]": russell_axiom λ κ . «[Π]κκ'»
2060  by standard (metis "cqt:5:a[2]"[axiom_inst, THEN "→E"] "&E")
2061interpretation "russell-axiom[exe,2,1,2]": russell_axiom λ κ . «[Π]κ'κ»
2062  by standard (metis "cqt:5:a[2]"[axiom_inst, THEN "→E"] "&E"(2))
2063interpretation "russell-axiom[exe,2,2]": russell_axiom λ κ . «[Π]κκ»
2064  by standard (metis "cqt:5:a[2]"[axiom_inst, THEN "→E"] "&E"(2))
2065interpretation "russell-axiom[exe,3,1,1]": russell_axiom λ κ . «[Π]κκ'κ''»
2066  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E")
2067interpretation "russell-axiom[exe,3,1,2]": russell_axiom λ κ . «[Π]κ'κκ''»
2068  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E")
2069interpretation "russell-axiom[exe,3,1,3]": russell_axiom λ κ . «[Π]κ'κ''κ»
2070  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E"(2))
2071interpretation "russell-axiom[exe,3,2,1]": russell_axiom λ κ . «[Π]κκκ'»
2072  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E")
2073interpretation "russell-axiom[exe,3,2,2]": russell_axiom λ κ . «[Π]κκ'κ»
2074  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E"(2))
2075interpretation "russell-axiom[exe,3,2,3]": russell_axiom λ κ . «[Π]κ'κκ»
2076  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E"(2))
2077interpretation "russell-axiom[exe,3,3]": russell_axiom λ κ . «[Π]κκκ»
2078  by standard (metis "cqt:5:a[3]"[axiom_inst, THEN "→E"] "&E"(2))
2079
2080interpretation "russell-axiom[enc,1]": russell_axiom λ κ . «κ[Π]»
2081  by standard (metis "cqt:5:b[1]"[axiom_inst, THEN "→E"] "&E"(2))
2082interpretation "russell-axiom[enc,2,1]": russell_axiom λ κ . «κκ'[Π]»
2083  by standard (metis "cqt:5:b[2]"[axiom_inst, THEN "→E"] "&E")
2084interpretation "russell-axiom[enc,2,2]": russell_axiom λ κ . «κ'κ[Π]»
2085  by standard (metis "cqt:5:b[2]"[axiom_inst, THEN "→E"] "&E"(2))
2086interpretation "russell-axiom[enc,2,3]": russell_axiom λ κ . «κκ[Π]»
2087  by standard (metis "cqt:5:b[2]"[axiom_inst, THEN "→E"] "&E"(2))
2088interpretation "russell-axiom[enc,3,1,1]": russell_axiom λ κ . «κκ'κ''[Π]»
2089  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E")
2090interpretation "russell-axiom[enc,3,1,2]": russell_axiom λ κ . «κ'κκ''[Π]»
2091  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E")
2092interpretation "russell-axiom[enc,3,1,3]": russell_axiom λ κ . «κ'κ''κ[Π]»
2093  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E"(2))
2094interpretation "russell-axiom[enc,3,2,1]": russell_axiom λ κ . «κκκ'[Π]»
2095  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E")
2096interpretation "russell-axiom[enc,3,2,2]": russell_axiom λ κ . «κκ'κ[Π]»
2097  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E"(2))
2098interpretation "russell-axiom[enc,3,2,3]": russell_axiom λ κ . «κ'κκ[Π]»
2099  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E"(2))
2100interpretation "russell-axiom[enc,3,3]": russell_axiom λ κ . «κκκ[Π]»
2101  by standard (metis "cqt:5:b[3]"[axiom_inst, THEN "→E"] "&E"(2))
2102
2103AOT_act_theorem "!-exists:1": ιx φ{x}  ∃!x φ{x}
2104proof(rule "≡I"; rule "→I")
2105  AOT_assume ιx φ{x}
2106  AOT_hence y (y = ιx φ{x}) by (metis "rule=I:1" "existential:1")
2107  then AOT_obtain a where a = ιx φ{x}
2108    using "instantiation"[rotated] by blast
2109  AOT_hence φ{a} & z (φ{z}  z = a)
2110    using hintikka "≡E" by blast
2111  AOT_hence x (φ{x} & z (φ{z}  z = x))
2112    by (rule "∃I")
2113  AOT_thus ∃!x φ{x}
2114    using "uniqueness:1"[THEN "dfI"] by blast
2115next
2116  AOT_assume ∃!x φ{x}
2117  AOT_hence x (φ{x} & z (φ{z}  z = x))
2118    using "uniqueness:1"[THEN "dfE"] by blast
2119  then AOT_obtain b where φ{b} & z (φ{z}  z = b)
2120    using "instantiation"[rotated] by blast
2121  AOT_hence b = ιx φ{x}
2122    using hintikka "≡E" by blast
2123  AOT_thus ιx φ{x}
2124    by (metis "t=t-proper:2" "vdash-properties:6")
2125qed
2126
2127AOT_act_theorem "!-exists:2": y(y=ιx φ{x})  ∃!x φ{x}
2128  using "!-exists:1" "free-thms:1" "≡E"(6) by blast
2129
2130AOT_act_theorem "y-in:1": x = ιx φ{x}  φ{x}
2131  using "&E"(1) "→I" hintikka "≡E"(1) by blast
2132
2133(* Note: generalized alphabetic variant of the last theorem *)
2134AOT_act_theorem "y-in:2": z = ιx φ{x}  φ{z} using "y-in:1".
2135
2136AOT_act_theorem "y-in:3": ιx φ{x}  φ{ιx φ{x}}
2137proof(rule "→I")
2138  AOT_assume ιx φ{x}
2139  AOT_hence y (y = ιx φ{x})
2140    by (metis "rule=I:1" "existential:1")
2141  then AOT_obtain a where a = ιx φ{x}
2142    using "instantiation"[rotated] by blast
2143  moreover AOT_have φ{a}
2144    using calculation hintikka "≡E"(1) "&E" by blast
2145  ultimately AOT_show φ{ιx φ{x}} using "rule=E" by blast
2146qed
2147
2148AOT_act_theorem "y-in:4": y (y = ιx φ{x})  φ{ιx φ{x}}
2149  using "y-in:3"[THEN "→E"] "free-thms:1"[THEN "≡E"(2)] "→I" by blast
2150
2151
2152AOT_theorem "act-quant-nec":
2153  β (𝒜φ{β}  β = α)  β(𝒜𝒜φ{β}  β = α)
2154proof(rule "≡I"; rule "→I")
2155  AOT_assume β (𝒜φ{β}  β = α)
2156  AOT_hence 𝒜φ{β}  β = α for β using "∀E" by blast
2157  AOT_hence 𝒜𝒜φ{β}  β = α for β 
2158    by (metis "Act-Basic:5" "act-conj-act:4" "≡E"(1) "≡E"(5))
2159  AOT_thus β(𝒜𝒜φ{β}  β = α)
2160    by (rule "∀I")
2161next
2162  AOT_assume β(𝒜𝒜φ{β}  β = α)
2163  AOT_hence 𝒜𝒜φ{β}  β = α for β using "∀E" by blast
2164  AOT_hence 𝒜φ{β}  β = α for β
2165    by (metis "Act-Basic:5" "act-conj-act:4" "≡E"(1) "≡E"(6))
2166  AOT_thus β (𝒜φ{β}  β = α)
2167    by (rule "∀I")
2168qed
2169
2170AOT_theorem "equi-desc-descA:1": x = ιx φ{x}  x = ιx(𝒜φ{x})
2171proof -
2172  AOT_have x = ιx φ{x}  z (𝒜φ{z}  z = x)
2173    using descriptions[axiom_inst] by blast
2174  also AOT_have ...  z (𝒜𝒜φ{z}  z = x)
2175  proof(rule "≡I"; rule "→I"; rule "∀I")
2176    AOT_assume z (𝒜φ{z}  z = x)
2177    AOT_hence 𝒜φ{a}  a = x for a
2178      using "∀E" by blast
2179    AOT_thus 𝒜𝒜φ{a}  a = x for a
2180      by (metis "Act-Basic:5" "act-conj-act:4" "≡E"(1) "≡E"(5))
2181  next
2182    AOT_assume z (𝒜𝒜φ{z}  z = x)
2183    AOT_hence 𝒜𝒜φ{a}  a = x for a
2184      using "∀E" by blast
2185    AOT_thus 𝒜φ{a}  a = x for a
2186      by (metis "Act-Basic:5" "act-conj-act:4" "≡E"(1) "≡E"(6))
2187  qed
2188  also AOT_have ...  x = ιx(𝒜φ{x})
2189    using "Commutativity of ≡"[THEN "≡E"(1)] descriptions[axiom_inst] by fast
2190  finally show ?thesis .
2191qed
2192
2193AOT_theorem "equi-desc-descA:2": ιx φ{x}  ιx φ{x} = ιx(𝒜φ{x})
2194proof(rule "→I")
2195  AOT_assume ιx φ{x}
2196  AOT_hence y (y = ιx φ{x})
2197    by (metis "rule=I:1" "existential:1")
2198  then AOT_obtain a where a = ιx φ{x}
2199    using "instantiation"[rotated] by blast
2200  moreover AOT_have a = ιx(𝒜φ{x})
2201    using calculation "equi-desc-descA:1"[THEN "≡E"(1)] by blast
2202  ultimately AOT_show ιx φ{x} = ιx(𝒜φ{x})
2203    using "rule=E" by fast
2204qed
2205
2206AOT_theorem "nec-hintikka-scheme":
2207  x = ιx φ{x}  𝒜φ{x} & z(𝒜φ{z}  z = x)
2208proof -
2209  AOT_have x = ιx φ{x}  z(𝒜φ{z}  z = x)
2210    using descriptions[axiom_inst] by blast
2211  also AOT_have   (𝒜φ{x} & z(𝒜φ{z}  z = x))
2212    using "Commutativity of ≡"[THEN "≡E"(1)] "term-out:3" by fast
2213  finally show ?thesis.
2214qed
2215
2216AOT_theorem "equiv-desc-eq:1":
2217  𝒜x(φ{x}  ψ{x})  x (x = ιx φ{x}  x = ιx ψ{x})
2218proof(rule "→I"; rule "∀I")
2219  fix β
2220  AOT_assume 𝒜x(φ{x}  ψ{x})
2221  AOT_hence 𝒜(φ{x}  ψ{x}) for x
2222    using "logic-actual-nec:3"[axiom_inst, THEN "≡E"(1)] "∀E"(2) by blast
2223  AOT_hence 0: 𝒜φ{x}  𝒜ψ{x} for x
2224    by (metis "Act-Basic:5" "≡E"(1))
2225  AOT_have β = ιx φ{x}  𝒜φ{β} & z(𝒜φ{z}  z = β)
2226    using "nec-hintikka-scheme" by blast
2227  also AOT_have ...  𝒜ψ{β} & z(𝒜ψ{z}  z = β)
2228  proof (rule "≡I"; rule "→I")
2229    AOT_assume 1: 𝒜φ{β} & z(𝒜φ{z}  z = β)
2230    AOT_hence 𝒜φ{z}  z = β for z
2231      using "&E" "∀E" by blast
2232    AOT_hence 𝒜ψ{z}  z = β for z
2233      using 0 "≡E" "→I" "→E" by metis
2234    AOT_hence z(𝒜ψ{z}  z = β)
2235      using "∀I" by fast
2236    moreover AOT_have 𝒜ψ{β}
2237      using "&E" 0[THEN "≡E"(1)] 1 by blast
2238    ultimately AOT_show 𝒜ψ{β} & z(𝒜ψ{z}  z = β)
2239      using "&I" by blast
2240  next
2241    AOT_assume 1: 𝒜ψ{β} & z(𝒜ψ{z}  z = β)
2242    AOT_hence 𝒜ψ{z}  z = β for z
2243      using "&E" "∀E" by blast
2244    AOT_hence 𝒜φ{z}  z = β for z
2245      using 0 "≡E" "→I" "→E" by metis
2246    AOT_hence z(𝒜φ{z}  z = β)
2247      using "∀I" by fast
2248    moreover AOT_have 𝒜φ{β}
2249      using "&E" 0[THEN "≡E"(2)] 1 by blast
2250    ultimately AOT_show 𝒜φ{β} & z(𝒜φ{z}  z = β)
2251      using "&I" by blast
2252  qed
2253  also AOT_have ...  β = ιx ψ{x}
2254    using "Commutativity of ≡"[THEN "≡E"(1)] "nec-hintikka-scheme" by blast
2255  finally AOT_show β = ιx φ{x}  β = ιx ψ{x} .
2256qed
2257
2258AOT_theorem "equiv-desc-eq:2":
2259  ιx φ{x} & 𝒜x(φ{x}  ψ{x})  ιx φ{x} = ιx ψ{x}
2260proof(rule "→I")
2261  AOT_assume ιx φ{x} & 𝒜x(φ{x}  ψ{x})
2262  AOT_hence 0: y (y = ιx φ{x}) and
2263            1: x (x = ιx φ{x}  x = ιx ψ{x})
2264    using "&E" "free-thms:1"[THEN "≡E"(1)] "equiv-desc-eq:1" "→E" by blast+
2265  then AOT_obtain a where a = ιx φ{x}
2266    using "instantiation"[rotated] by blast
2267  moreover AOT_have a = ιx ψ{x}
2268    using calculation 1 "∀E" "≡E"(1) by fast
2269  ultimately AOT_show ιx φ{x} = ιx ψ{x}
2270    using "rule=E" by fast
2271qed
2272
2273AOT_theorem "equiv-desc-eq:3":
2274  ιx φ{x} & x(φ{x}  ψ{x})  ιx φ{x} = ιx ψ{x}
2275  using "→I" "equiv-desc-eq:2"[THEN "→E", OF "&I"] "&E"
2276        "nec-imp-act"[THEN "→E"] by metis
2277
2278(* Note: this is a special case of "exist-nec" *)
2279AOT_theorem "equiv-desc-eq:4": ιx φ{x}  ιx φ{x}
2280proof(rule "→I")
2281  AOT_assume ιx φ{x}
2282  AOT_hence y (y = ιx φ{x})
2283    by (metis "rule=I:1" "existential:1")
2284  then AOT_obtain a where a = ιx φ{x}
2285    using "instantiation"[rotated] by blast
2286  AOT_thus ιx φ{x}
2287    using "ex:2:a" "rule=E" by fast
2288qed
2289
2290AOT_theorem "equiv-desc-eq:5": ιx φ{x}  y (y = ιx φ{x})
2291proof(rule "→I")
2292  AOT_assume ιx φ{x}
2293  AOT_hence y (y = ιx φ{x})
2294    by (metis "rule=I:1" "existential:1")
2295  then AOT_obtain a where a = ιx φ{x}
2296    using "instantiation"[rotated] by blast
2297  AOT_hence (a = ιx φ{x})
2298    by (metis "id-nec:2" "vdash-properties:10")
2299  AOT_thus y (y = ιx φ{x})
2300    by (rule "∃I")
2301qed
2302
2303AOT_act_theorem "equiv-desc-eq2:1":
2304  x (φ{x}  ψ{x})  x (x = ιx φ{x}  x = ιx ψ{x})
2305  using "→I" "logic-actual"[act_axiom_inst, THEN "→E"]
2306        "equiv-desc-eq:1"[THEN "→E"]
2307        "RA[1]" "deduction-theorem" by blast
2308
2309AOT_act_theorem "equiv-desc-eq2:2":
2310  ιx φ{x} & x (φ{x}  ψ{x})  ιx φ{x} = ιx ψ{x}
2311  using "→I" "logic-actual"[act_axiom_inst, THEN "→E"]
2312        "equiv-desc-eq:2"[THEN "→E", OF "&I"]
2313        "RA[1]" "deduction-theorem" "&E" by metis
2314
2315context russell_axiom
2316begin
2317AOT_theorem "nec-russell-axiom":
2318  ψ{ιx φ{x}}  x(𝒜φ{x} & z(𝒜φ{z}  z = x) & ψ{x})
2319proof -
2320  AOT_have b: x (x = ιx φ{x}  (𝒜φ{x} & z(𝒜φ{z}  z = x)))
2321    using "nec-hintikka-scheme" "∀I" by fast
2322  show ?thesis
2323  proof(rule "≡I"; rule "→I")
2324    AOT_assume c: ψ{ιx φ{x}}
2325    AOT_hence d: ιx φ{x}
2326      using ψ_denotes_asm by blast
2327    AOT_hence y (y = ιx φ{x})
2328      by (metis "rule=I:1" "existential:1")
2329    then AOT_obtain a where a_def: a = ιx φ{x}
2330      using "instantiation"[rotated] by blast
2331    moreover AOT_have a = ιx φ{x}  (𝒜φ{a} & z(𝒜φ{z}  z = a))
2332      using b "∀E" by blast
2333    ultimately AOT_have 𝒜φ{a} & z(𝒜φ{z}  z = a)
2334      using "≡E" by blast
2335    moreover AOT_have ψ{a}
2336    proof - 
2337      AOT_have 1: xy(x = y  y = x)
2338        by (simp add: "id-eq:2" "universal-cor")
2339      AOT_have a = ιx φ{x}   ιx φ{x} = a
2340        by (rule "∀E"(1)[where τ="«ιx φ{x}»"]; rule "∀E"(2)[where β=a])
2341           (auto simp: d "universal-cor" 1)
2342      AOT_thus ψ{a}
2343        using a_def c "rule=E" "→E" by metis
2344    qed
2345    ultimately AOT_have 𝒜φ{a} & z(𝒜φ{z}  z = a) & ψ{a}
2346      by (rule "&I")
2347    AOT_thus x(𝒜φ{x} & z(𝒜φ{z}  z = x) & ψ{x})
2348      by (rule "∃I")
2349  next
2350    AOT_assume x(𝒜φ{x} & z(𝒜φ{z}  z = x) & ψ{x})
2351    then AOT_obtain b where g: 𝒜φ{b} & z(𝒜φ{z}  z = b) & ψ{b}
2352      using "instantiation"[rotated] by blast
2353    AOT_hence h: b = ιx φ{x}  (𝒜φ{b} & z(𝒜φ{z}  z = b))
2354      using b "∀E" by blast
2355    AOT_have 𝒜φ{b} & z(𝒜φ{z}  z = b) and j: ψ{b}
2356      using g "&E" by blast+
2357    AOT_hence b = ιx φ{x}
2358      using h "≡E" by blast
2359    AOT_thus ψ{ιx φ{x}}
2360      using j "rule=E" by blast
2361  qed
2362qed
2363end
2364
2365AOT_theorem "actual-desc:1": ιx φ{x}  ∃!x 𝒜φ{x}
2366proof (rule "≡I"; rule "→I")
2367  AOT_assume ιx φ{x}
2368  AOT_hence y (y = ιx φ{x})
2369    by (metis "rule=I:1" "existential:1")
2370  then AOT_obtain a where a = ιx φ{x}
2371    using "instantiation"[rotated] by blast
2372  moreover AOT_have a = ιx φ{x}  z(𝒜φ{z}  z = a)
2373    using descriptions[axiom_inst] by blast
2374  ultimately AOT_have z(𝒜φ{z}  z = a)
2375    using "≡E" by blast
2376  AOT_hence xz(𝒜φ{z}  z = x) by (rule "∃I")
2377  AOT_thus ∃!x 𝒜φ{x}
2378    using "uniqueness:2"[THEN "≡E"(2)] by fast
2379next
2380  AOT_assume ∃!x 𝒜φ{x}
2381  AOT_hence xz(𝒜φ{z}  z = x)
2382    using "uniqueness:2"[THEN "≡E"(1)] by fast
2383  then AOT_obtain a where z(𝒜φ{z}  z = a)
2384    using "instantiation"[rotated] by blast
2385  moreover AOT_have a = ιx φ{x}  z(𝒜φ{z}  z = a)
2386    using descriptions[axiom_inst] by blast
2387  ultimately AOT_have a = ιx φ{x}
2388    using "≡E" by blast
2389  AOT_thus ιx φ{x}
2390    by (metis "t=t-proper:2" "vdash-properties:6")
2391qed
2392
2393AOT_theorem "actual-desc:2": x = ιx φ{x}  𝒜φ{x}
2394  using "&E"(1) "contraposition:1[2]" "≡E"(1) "nec-hintikka-scheme"
2395        "reductio-aa:2" "vdash-properties:9" by blast
2396
2397(* Note: generalized alphabetic variant of the last theorem *)
2398AOT_theorem "actual-desc:3": z = ιx φ{x}  𝒜φ{z}
2399  using "actual-desc:2".
2400
2401AOT_theorem "actual-desc:4": ιx φ{x}  𝒜φ{ιx φ{x}}
2402proof(rule "→I")
2403  AOT_assume ιx φ{x}
2404  AOT_hence y (y = ιx φ{x}) by (metis "rule=I:1" "existential:1")
2405  then AOT_obtain a where a = ιx φ{x} using "instantiation"[rotated] by blast
2406  AOT_thus 𝒜φ{ιx φ{x}}
2407    using "actual-desc:2" "rule=E" "→E" by fast
2408qed
2409
2410AOT_theorem "actual-desc:5": ιx φ{x} = ιx ψ{x}  𝒜x(φ{x}  ψ{x})
2411proof(rule "→I")
2412  AOT_assume 0: ιx φ{x} = ιx ψ{x}
2413  AOT_hence φ_down: ιx φ{x} and ψ_down: ιx ψ{x}
2414    using "t=t-proper:1" "t=t-proper:2" "vdash-properties:6" by blast+
2415  AOT_hence y (y = ιx φ{x}) and y (y = ιx ψ{x})
2416    by (metis "rule=I:1" "existential:1")+
2417  then AOT_obtain a and b where a_eq: a = ιx φ{x} and b_eq: b = ιx ψ{x}
2418    using "instantiation"[rotated] by metis
2419
2420  AOT_have αβ (α = β  β = α)
2421    by (rule "∀I"; rule "∀I"; rule "id-eq:2")
2422  AOT_hence β (ιx φ{x} = β  β = ιx φ{x})
2423    using "∀E" φ_down by blast
2424  AOT_hence ιx φ{x} = ιx ψ{x}  ιx ψ{x} = ιx φ{x}
2425    using "∀E" ψ_down by blast
2426  AOT_hence 1: ιx ψ{x} = ιx φ{x} using 0
2427    "→E" by blast
2428
2429  AOT_have 𝒜φ{x}  𝒜ψ{x} for x
2430  proof(rule "≡I"; rule "→I")
2431    AOT_assume 𝒜φ{x}
2432    moreover AOT_have 𝒜φ{x}  x = a for x
2433      using "nec-hintikka-scheme"[THEN "≡E"(1), OF a_eq, THEN "&E"(2)]
2434            "∀E" by blast
2435    ultimately AOT_have x = a
2436      using "→E" by blast
2437    AOT_hence x = ιx φ{x}
2438      using a_eq "rule=E" by blast
2439    AOT_hence x = ιx ψ{x}
2440      using 0 "rule=E" by blast
2441    AOT_thus 𝒜ψ{x}
2442      by (metis "actual-desc:3" "vdash-properties:6")
2443  next
2444    AOT_assume 𝒜ψ{x}
2445    moreover AOT_have 𝒜ψ{x}  x = b for x
2446      using "nec-hintikka-scheme"[THEN "≡E"(1), OF b_eq, THEN "&E"(2)]
2447            "∀E" by blast
2448    ultimately AOT_have x = b
2449      using "→E" by blast
2450    AOT_hence x = ιx ψ{x}
2451      using b_eq "rule=E" by blast
2452    AOT_hence x = ιx φ{x}
2453      using 1 "rule=E" by blast
2454    AOT_thus 𝒜φ{x}
2455      by (metis "actual-desc:3" "vdash-properties:6")
2456  qed
2457  AOT_hence 𝒜(φ{x}  ψ{x}) for x
2458    by (metis "Act-Basic:5" "≡E"(2))
2459  AOT_hence x 𝒜(φ{x}  ψ{x})
2460    by (rule "∀I")
2461  AOT_thus 𝒜x (φ{x}  ψ{x})
2462    using "logic-actual-nec:3"[axiom_inst, THEN "≡E"(2)] by fast
2463qed    
2464
2465AOT_theorem "!box-desc:1": ∃!x φ{x}  y (y = ιx φ{x}  φ{y})
2466proof(rule "→I")
2467  AOT_assume ∃!x φ{x}
2468  AOT_hence ζ: x (φ{x} & z (φ{z}  z = x))
2469    using "uniqueness:1"[THEN "dfE"] by blast
2470  then AOT_obtain b where θ: φ{b} & z (φ{z}  z = b)
2471    using "instantiation"[rotated] by blast
2472  AOT_show y (y = ιx φ{x}  φ{y})
2473  proof(rule GEN; rule "→I")
2474    fix y
2475    AOT_assume y = ιx φ{x}
2476    AOT_hence 𝒜φ{y} & z (𝒜φ{z}  z = y)
2477      using "nec-hintikka-scheme"[THEN "≡E"(1)] by blast
2478    AOT_hence 𝒜φ{b}  b = y
2479      using "&E" "∀E" by blast
2480    moreover AOT_have 𝒜φ{b}
2481      using θ[THEN "&E"(1)]  by (metis "nec-imp-act" "→E")
2482    ultimately AOT_have b = y
2483      using "→E" by blast
2484    moreover AOT_have φ{b}
2485      using θ[THEN "&E"(1)]  by (metis "qml:2"[axiom_inst] "→E") 
2486    ultimately AOT_show φ{y}
2487      using "rule=E" by blast
2488  qed
2489qed
2490
2491AOT_theorem "!box-desc:2":
2492  x (φ{x}  φ{x})  (∃!x φ{x}  y (y = ιx φ{x}  φ{y}))
2493proof(rule "→I"; rule "→I")
2494  AOT_assume x (φ{x}  φ{x})
2495  moreover AOT_assume ∃!x φ{x}
2496  ultimately AOT_have ∃!x φ{x}
2497    using "nec-exist-!"[THEN "→E", THEN "→E"] by blast
2498  AOT_thus y (y = ιx φ{x}  φ{y})
2499    using "!box-desc:1" "→E" by blast
2500qed
2501
2502(* Note: vacuous in the embedding. *)
2503AOT_theorem "dr-alphabetic-thm": ιν φ{ν}  ιν φ{ν} = ιμ φ{μ}
2504  by (simp add: "rule=I:1" "→I")
2505
2506subsection‹The Theory of Necessity›
2507text‹\label{PLM: 9.9}›
2508
2509AOT_theorem "RM:1[prem]":
2510  assumes Γ  φ  ψ
2511  shows Γ  φ  ψ
2512proof -
2513  AOT_have Γ  (φ  ψ)
2514    using "RN[prem]" assms by blast
2515  AOT_thus Γ  φ  ψ
2516    by (metis "qml:1"[axiom_inst] "→E")
2517qed
2518
2519AOT_theorem "RM:1":
2520  assumes  φ  ψ
2521  shows  φ  ψ
2522  using "RM:1[prem]" assms by blast
2523
2524lemmas RM = "RM:1"
2525
2526AOT_theorem "RM:2[prem]":
2527  assumes Γ  φ  ψ
2528  shows Γ  φ  ψ
2529proof -
2530  AOT_have Γ  ¬ψ  ¬φ
2531    using assms 
2532    by (simp add: "contraposition:1[1]")
2533  AOT_hence Γ  ¬ψ  ¬φ
2534    using "RM:1[prem]" by blast
2535  AOT_thus Γ  φ  ψ
2536    by (meson "dfE" "dfI" "conventions:5" "→I" "modus-tollens:1")
2537qed
2538
2539AOT_theorem "RM:2":
2540  assumes  φ  ψ
2541  shows  φ  ψ
2542  using "RM:2[prem]" assms by blast
2543
2544lemmas "RM◇" = "RM:2"
2545
2546AOT_theorem "RM:3[prem]":
2547  assumes Γ  φ  ψ
2548  shows Γ  φ  ψ
2549proof -
2550  AOT_have Γ  φ  ψ and Γ  ψ  φ
2551    using assms "≡E" "→I" by metis+
2552  AOT_hence Γ  φ  ψ and Γ  ψ  φ
2553    using "RM:1[prem]" by metis+
2554  AOT_thus Γ  φ  ψ
2555    by (simp add: "≡I")
2556qed
2557
2558AOT_theorem "RM:3":
2559  assumes  φ  ψ
2560  shows  φ  ψ
2561  using "RM:3[prem]" assms by blast
2562
2563lemmas RE = "RM:3"
2564
2565AOT_theorem "RM:4[prem]":
2566  assumes Γ  φ  ψ
2567  shows Γ  φ  ψ
2568proof -
2569  AOT_have Γ  φ  ψ and Γ  ψ  φ
2570    using assms "≡E" "→I" by metis+
2571  AOT_hence Γ  φ  ψ and Γ  ψ  φ
2572    using "RM:2[prem]" by metis+
2573  AOT_thus Γ  φ  ψ
2574    by (simp add: "≡I")
2575qed
2576
2577AOT_theorem "RM:4":
2578  assumes  φ  ψ
2579  shows  φ  ψ
2580  using "RM:4[prem]" assms by blast
2581
2582lemmas "RE◇" = "RM:4"
2583
2584AOT_theorem "KBasic:1": φ  (ψ  φ)
2585  by (simp add: RM "pl:1"[axiom_inst])
2586
2587AOT_theorem "KBasic:2": ¬φ  (φ  ψ)
2588  by (simp add: RM "useful-tautologies:3")
2589
2590AOT_theorem "KBasic:3": (φ & ψ)  (φ & ψ)
2591proof (rule "≡I"; rule "→I")
2592  AOT_assume (φ & ψ)
2593  AOT_thus φ & ψ
2594    by (meson RM "&I" "Conjunction Simplification"(1, 2) "→E")
2595next
2596  AOT_have φ  (ψ  (φ & ψ))
2597    by (simp add: "RM:1" Adjunction)
2598  AOT_hence φ  (ψ  (φ & ψ))
2599    by (metis "Hypothetical Syllogism" "qml:1"[axiom_inst])
2600  moreover AOT_assume φ & ψ
2601  ultimately AOT_show (φ & ψ)
2602    using "→E" "&E" by blast
2603qed
2604
2605AOT_theorem "KBasic:4": (φ  ψ)  ((φ  ψ) & (ψ  φ))
2606proof -
2607  AOT_have θ: ((φ  ψ) & (ψ  φ))  ((φ  ψ) & (ψ  φ))
2608    by (fact "KBasic:3")
2609  AOT_modally_strict {
2610    AOT_have (φ  ψ)  ((φ  ψ) & (ψ  φ))
2611      by (fact "conventions:3"[THEN "≡Df"])
2612  }
2613  AOT_hence ξ: (φ  ψ)  ((φ  ψ) & (ψ  φ))
2614    by (rule RE)
2615  with ξ and θ AOT_show (φ  ψ)  ((φ  ψ) & (ψ  φ))
2616    using "≡E"(5) by blast
2617qed
2618
2619AOT_theorem "KBasic:5": ((φ  ψ) & (ψ  φ))  (φ  ψ)
2620proof -
2621  AOT_have (φ  ψ)  (φ  ψ)
2622    by (fact "qml:1"[axiom_inst])
2623  moreover AOT_have (ψ  φ)  (ψ  φ)
2624    by (fact "qml:1"[axiom_inst])
2625  ultimately AOT_have ((φ  ψ) & (ψ  φ))  ((φ  ψ) & (ψ  φ))
2626    by (metis "&I" MP "Double Composition")
2627  moreover AOT_have ((φ  ψ) & (ψ  φ))  (φ  ψ)
2628    using "conventions:3"[THEN "dfI"] "→I" by blast
2629  ultimately AOT_show ((φ  ψ) & (ψ  φ))  (φ  ψ)
2630    by (metis "Hypothetical Syllogism")
2631qed
2632
2633AOT_theorem "KBasic:6": (φ  ψ)  (φ  ψ)
2634  using "KBasic:4" "KBasic:5" "deduction-theorem" "≡E"(1) "→E" by blast
2635AOT_theorem "KBasic:7": ((φ & ψ)  (¬φ & ¬ψ))  (φ  ψ)
2636proof (rule "→I"; drule "∨E"(1); (rule "→I")?)
2637  AOT_assume φ & ψ
2638  AOT_hence φ and ψ using "&E" by blast+
2639  AOT_hence (φ  ψ) and (ψ  φ) using "KBasic:1" "→E" by blast+
2640  AOT_hence (φ  ψ) & (ψ  φ) using "&I" by blast
2641  AOT_thus (φ  ψ)  by (metis "KBasic:4" "≡E"(2))
2642next
2643  AOT_assume ¬φ & ¬ψ
2644  AOT_hence 0: (¬φ & ¬ψ) using "KBasic:3"[THEN "≡E"(2)] by blast
2645  AOT_modally_strict {
2646    AOT_have (¬φ & ¬ψ)  (φ  ψ)
2647      by (metis "&E"(1) "&E"(2) "deduction-theorem" "≡I" "reductio-aa:1")
2648  }
2649  AOT_hence (¬φ & ¬ψ)  (φ  ψ)
2650    by (rule RM)
2651  AOT_thus (φ  ψ) using 0 "→E" by blast
2652qed(auto)
2653
2654AOT_theorem "KBasic:8": (φ & ψ)  (φ  ψ)
2655  by (meson "RM:1" "&E"(1) "&E"(2) "deduction-theorem" "≡I")
2656AOT_theorem "KBasic:9": (¬φ & ¬ψ)  (φ  ψ)
2657  by (metis "RM:1" "&E"(1) "&E"(2) "deduction-theorem" "≡I" "raa-cor:4")
2658AOT_theorem "KBasic:10": φ  ¬¬φ
2659  by (simp add: "RM:3" "oth-class-taut:3:b")
2660AOT_theorem "KBasic:11": ¬φ  ¬φ
2661proof (rule "≡I"; rule "→I")
2662  AOT_show ¬φ if ¬φ
2663    using that "dfI" "conventions:5" "KBasic:10" "≡E"(3) by blast
2664next
2665  AOT_show ¬φ if ¬φ
2666    using "dfE" "conventions:5" "KBasic:10" "≡E"(4) that by blast
2667qed
2668AOT_theorem "KBasic:12": φ  ¬¬φ
2669proof (rule "≡I"; rule "→I")
2670  AOT_show ¬¬φ if φ
2671    using "¬¬I" "KBasic:11" "≡E"(3) that by blast
2672next
2673  AOT_show φ if ¬¬φ
2674  using "KBasic:11" "≡E"(1) "reductio-aa:1" that by blast
2675qed
2676AOT_theorem "KBasic:13": (φ  ψ)  (φ  ψ)
2677proof -
2678  AOT_have φ  ψ  φ  ψ by blast
2679  AOT_hence (φ  ψ)  φ  ψ
2680    using "RM:2[prem]" by blast
2681  AOT_thus (φ  ψ)  (φ  ψ) using "→I" by blast
2682qed
2683lemmas "K◇" = "KBasic:13"
2684AOT_theorem "KBasic:14": φ  ¬¬φ
2685  by (meson "RE◇" "KBasic:11" "KBasic:12" "≡E"(6) "oth-class-taut:3:a")
2686AOT_theorem "KBasic:15": (φ  ψ)  (φ  ψ)
2687proof -
2688  AOT_modally_strict {
2689    AOT_have φ  (φ  ψ) and ψ  (φ  ψ)
2690      by (auto simp: "Disjunction Addition"(1) "Disjunction Addition"(2))
2691  }
2692  AOT_hence φ  (φ  ψ) and ψ  (φ  ψ)
2693    using RM by blast+
2694  AOT_thus (φ  ψ)  (φ  ψ)
2695    by (metis "∨E"(1) "deduction-theorem")
2696qed
2697
2698AOT_theorem "KBasic:16": (φ & ψ)  (φ & ψ)
2699  by (meson "KBasic:13" "RM:1" Adjunction "Hypothetical Syllogism"
2700            Importation "→E")
2701
2702AOT_theorem "rule-sub-lem:1:a":
2703  assumes  (ψ  χ)
2704  shows  ¬ψ  ¬χ
2705  using "qml:2"[axiom_inst, THEN "→E", OF assms]
2706        "≡E"(1) "oth-class-taut:4:b" by blast
2707
2708AOT_theorem "rule-sub-lem:1:b":
2709  assumes  (ψ  χ)
2710  shows  (ψ  Θ)  (χ  Θ)
2711  using "qml:2"[axiom_inst, THEN "→E", OF assms]
2712  using "oth-class-taut:4:c" "vdash-properties:6" by blast
2713
2714AOT_theorem "rule-sub-lem:1:c":
2715  assumes  (ψ  χ)
2716  shows  (Θ  ψ)  (Θ  χ)
2717  using "qml:2"[axiom_inst, THEN "→E", OF assms]
2718  using "oth-class-taut:4:d" "vdash-properties:6" by blast
2719
2720AOT_theorem "rule-sub-lem:1:d":
2721  assumes for arbitrary α:  (ψ{α}  χ{α})
2722  shows  α ψ{α}  α χ{α}
2723proof -
2724  AOT_modally_strict {
2725    AOT_have α (ψ{α}  χ{α})
2726      using "qml:2"[axiom_inst, THEN "→E", OF assms] "∀I" by fast
2727    AOT_hence 0: ψ{α}  χ{α} for α using "∀E" by blast
2728    AOT_show α ψ{α}  α χ{α}
2729    proof (rule "≡I"; rule "→I")
2730      AOT_assume α ψ{α}
2731      AOT_hence ψ{α} for α using "∀E" by blast
2732      AOT_hence χ{α} for α using 0 "≡E" by blast
2733      AOT_thus α χ{α} by (rule "∀I")
2734    next
2735      AOT_assume α χ{α}
2736      AOT_hence χ{α} for α using "∀E" by blast
2737      AOT_hence ψ{α} for α using 0 "≡E" by blast
2738      AOT_thus α ψ{α} by (rule "∀I")
2739    qed
2740  }
2741qed
2742
2743AOT_theorem "rule-sub-lem:1:e":
2744  assumes  (ψ  χ)
2745  shows   ψ]   χ]
2746  using "qml:2"[axiom_inst, THEN "→E", OF assms]
2747  using "≡E"(1) "propositions-lemma:6" by blast
2748
2749AOT_theorem "rule-sub-lem:1:f":
2750  assumes  (ψ  χ)
2751  shows  𝒜ψ  𝒜χ
2752  using "qml:2"[axiom_inst, THEN "→E", OF assms, THEN "RA[2]"]
2753  by (metis "Act-Basic:5" "≡E"(1))
2754
2755AOT_theorem "rule-sub-lem:1:g":
2756  assumes  (ψ  χ)
2757  shows  ψ  χ
2758  using "KBasic:6" assms "vdash-properties:6" by blast
2759
2760text‹Note that instead of deriving @{text "rule-sub-lem:2"},
2761     @{text "rule-sub-lem:3"}, @{text "rule-sub-lem:4"},
2762     and @{text "rule-sub-nec"}, we construct substitution methods instead.›
2763
2764class AOT_subst =
2765  fixes AOT_subst :: "('a  𝗈)  bool"
2766    and AOT_subst_cond :: "'a  'a  bool"
2767  assumes AOT_subst:
2768    "AOT_subst φ  AOT_subst_cond ψ χ  [v  «φ ψ»  «φ χ»]"
2769
2770named_theorems AOT_substI
2771
2772instantiation 𝗈 :: AOT_subst
2773begin
2774
2775inductive AOT_subst_𝗈 where
2776  AOT_subst_𝗈_id[AOT_substI]:
2777    AOT_subst_𝗈 (λφ. φ)
2778  | AOT_subst_𝗈_const[AOT_substI]:
2779    AOT_subst_𝗈 (λφ. ψ)
2780  | AOT_subst_𝗈_not[AOT_substI]:
2781    AOT_subst_𝗈 Θ  AOT_subst_𝗈 (λ φ. «¬Θ{φ}»)
2782  | AOT_subst_𝗈_imp[AOT_substI]:
2783    AOT_subst_𝗈 Θ  AOT_subst_𝗈 Ξ  AOT_subst_𝗈 (λ φ. «Θ{φ}  Ξ{φ}»)
2784  | AOT_subst_𝗈_lambda0[AOT_substI]:
2785    AOT_subst_𝗈 Θ  AOT_subst_𝗈 (λ φ. (AOT_lambda0 (Θ φ)))
2786  | AOT_subst_𝗈_act[AOT_substI]:
2787    AOT_subst_𝗈 Θ  AOT_subst_𝗈 (λ φ. «𝒜Θ{φ}»)
2788  | AOT_subst_𝗈_box[AOT_substI]:
2789    AOT_subst_𝗈 Θ  AOT_subst_𝗈 (λ φ. «Θ{φ}»)
2790  | AOT_subst_𝗈_by_def[AOT_substI]:
2791    ( ψ . AOT_model_equiv_def (Θ ψ) (Ξ ψ)) 
2792      AOT_subst_𝗈 Ξ  AOT_subst_𝗈 Θ
2793
2794
2795definition AOT_subst_cond_𝗈 where
2796  AOT_subst_cond_𝗈  λ ψ χ .  v . [v  ψ  χ]
2797
2798instance
2799proof
2800  fix ψ χ :: 𝗈 and φ :: 𝗈  𝗈
2801  assume cond: AOT_subst_cond ψ χ
2802  assume AOT_subst φ
2803  moreover AOT_have  ψ  χ
2804    using cond unfolding AOT_subst_cond_𝗈_def by blast
2805  ultimately AOT_show  φ{ψ}  φ{χ}
2806  proof (induct arbitrary: ψ χ)
2807    case AOT_subst_𝗈_id
2808    thus ?case
2809      using "≡E"(2) "oth-class-taut:4:b" "rule-sub-lem:1:a" by blast
2810  next
2811    case (AOT_subst_𝗈_const ψ)
2812    thus ?case
2813      by (simp add: "oth-class-taut:3:a")
2814  next
2815    case (AOT_subst_𝗈_not Θ)
2816    thus ?case
2817      by (simp add: RN "rule-sub-lem:1:a")
2818  next
2819    case (AOT_subst_𝗈_imp Θ Ξ)
2820    thus ?case
2821      by (meson RN "≡E"(5) "rule-sub-lem:1:b" "rule-sub-lem:1:c")
2822  next
2823    case (AOT_subst_𝗈_lambda0 Θ)
2824    thus ?case
2825      by (simp add: RN "rule-sub-lem:1:e")
2826  next
2827    case (AOT_subst_𝗈_act Θ)
2828    thus ?case
2829      by (simp add: RN "rule-sub-lem:1:f")
2830  next
2831    case (AOT_subst_𝗈_box Θ)
2832    thus ?case
2833      by (simp add: RN "rule-sub-lem:1:g")
2834  next
2835    case (AOT_subst_𝗈_by_def Θ Ξ)
2836    AOT_modally_strict {
2837      AOT_have Ξ{ψ}  Ξ{χ}
2838        using AOT_subst_𝗈_by_def by simp
2839      AOT_thus Θ{ψ}  Θ{χ}
2840        using "≡Df"[OF AOT_subst_𝗈_by_def(1), of _ ψ]
2841              "≡Df"[OF AOT_subst_𝗈_by_def(1), of _ χ]
2842        by (metis "≡E"(6) "oth-class-taut:3:a")
2843    }
2844  qed
2845qed
2846end
2847
2848instantiation "fun" :: (AOT_Term_id_2, AOT_subst) AOT_subst
2849begin
2850
2851definition AOT_subst_cond_fun :: ('a  'b)  ('a  'b)  bool where
2852  AOT_subst_cond_fun  λ φ ψ .  α . AOT_subst_cond (φ (AOT_term_of_var α))
2853                                                      (ψ (AOT_term_of_var α))
2854
2855inductive AOT_subst_fun :: (('a  'b)  𝗈)  bool where
2856  AOT_subst_fun_const[AOT_substI]:
2857    AOT_subst_fun (λφ. ψ)
2858  | AOT_subst_fun_id[AOT_substI]:
2859    AOT_subst Ψ  AOT_subst_fun (λφ. Ψ (φ (AOT_term_of_var α)))
2860  | AOT_subst_fun_all[AOT_substI]:
2861    AOT_subst Ψ  ( α . AOT_subst_fun (Θ (AOT_term_of_var α))) 
2862     AOT_subst_fun (λφ :: 'a  'b. Ψ «α «Θ (α::'a) φ»»)
2863  | AOT_subst_fun_not[AOT_substI]:
2864    AOT_subst Ψ  AOT_subst_fun (λφ. «¬«Ψ φ»»)
2865  | AOT_subst_fun_imp[AOT_substI]:
2866    AOT_subst Ψ  AOT_subst Θ  AOT_subst_fun (λφ. ««Ψ φ»  «Θ φ»»)
2867  | AOT_subst_fun_lambda0[AOT_substI]:
2868    AOT_subst Θ  AOT_subst_fun (λ φ. (AOT_lambda0 (Θ φ)))
2869  | AOT_subst_fun_act[AOT_substI]:
2870    AOT_subst Θ  AOT_subst_fun (λ φ. «𝒜«Θ φ»»)
2871  | AOT_subst_fun_box[AOT_substI]:
2872    AOT_subst Θ  AOT_subst_fun (λ φ. ««Θ φ»»)
2873  | AOT_subst_fun_def[AOT_substI]:
2874    ( φ . AOT_model_equiv_def (Θ φ) (Ψ φ)) 
2875     AOT_subst_fun Ψ  AOT_subst_fun Θ
2876
2877instance proof
2878  fix ψ χ :: 'a  'b and φ :: ('a  'b)  𝗈
2879  assume AOT_subst φ
2880  moreover assume cond: AOT_subst_cond ψ χ
2881  ultimately AOT_show  «φ ψ»  «φ χ»
2882  proof(induct)
2883    case (AOT_subst_fun_const ψ)
2884    then show ?case by (simp add: "oth-class-taut:3:a")
2885  next
2886  case (AOT_subst_fun_id Ψ x)
2887  then show ?case by (simp add: AOT_subst AOT_subst_cond_fun_def) 
2888  next
2889  next
2890  case (AOT_subst_fun_all Ψ Θ)
2891  AOT_have  (Θ{α, «ψ»}  Θ{α, «χ»}) for α
2892    using AOT_subst_fun_all.hyps(3) AOT_subst_fun_all.prems RN by presburger
2893  thus ?case using AOT_subst[OF AOT_subst_fun_all(1)]
2894    by (simp add: RN "rule-sub-lem:1:d"
2895                  AOT_subst_cond_fun_def AOT_subst_cond_𝗈_def)
2896  next
2897  case (AOT_subst_fun_not Ψ)
2898  then show ?case by (simp add: RN "rule-sub-lem:1:a")
2899  next
2900  case (AOT_subst_fun_imp Ψ Θ)
2901  then show ?case 
2902    unfolding AOT_subst_cond_fun_def AOT_subst_cond_𝗈_def
2903    by (meson "≡E"(5) "oth-class-taut:4:c" "oth-class-taut:4:d" "→E")
2904  next
2905  case (AOT_subst_fun_lambda0 Θ)
2906  then show ?case by (simp add: RN "rule-sub-lem:1:e")
2907  next
2908  case (AOT_subst_fun_act Θ)
2909  then show ?case by (simp add: RN "rule-sub-lem:1:f")
2910  next
2911  case (AOT_subst_fun_box Θ)
2912  then show ?case by (simp add: RN "rule-sub-lem:1:g")
2913  next
2914  case (AOT_subst_fun_def Θ Ψ)
2915  then show ?case
2916    by (meson "df-rules-formulas[3]" "df-rules-formulas[4]" "≡I" "≡E"(5))
2917  qed
2918qed
2919end
2920
2921ML2922fun prove_AOT_subst_tac ctxt = REPEAT (SUBGOAL (fn (trm,_) => let
2923  fun findHeadConst (Const x) = SOME x
2924    | findHeadConst (A $ _) = findHeadConst A
2925    | findHeadConst _ = NONE
2926  fun findDef (Const (const_nameAOT_model_equiv_def, _) $ lhs $ _)
2927      = findHeadConst lhs
2928    | findDef (A $ B) = (case findDef A of SOME x => SOME x | _ => findDef B)
2929    | findDef (Abs (_,_,c)) = findDef c
2930    | findDef _ = NONE
2931  val const_opt = (findDef trm)
2932  val defs = case const_opt of SOME const => List.filter (fn thm => let
2933      val concl = Thm.concl_of thm
2934      val thmconst = (findDef concl)
2935      in case thmconst of SOME (c,_) => fst const = c | _ => false end)
2936      (AOT_Definitions.get ctxt)
2937      | _ => []
2938  val tac = case defs of
2939            [] => safe_step_tac (ctxt addSIs @{thms AOT_substI}) 1
2940            | _ => resolve_tac ctxt defs 1
2941  in tac end) 1)
2942fun getSubstThm ctxt reversed phi p q = let
2943val p_ty = Term.type_of p
2944val abs = HOLogic.mk_Trueprop (@{const AOT_subst(_)} $ phi)
2945val abs = Syntax.check_term ctxt abs
2946val substThm = Goal.prove ctxt [] [] abs
2947  (fn {context=ctxt, prems=_} => prove_AOT_subst_tac ctxt)
2948val substThm = substThm RS @{thm AOT_subst}
2949in if reversed then let
2950  val substThm = Drule.instantiate_normalize
2951          (TVars.empty, Vars.make [((("χ", 0), p_ty), Thm.cterm_of ctxt p),
2952          ((("ψ", 0), p_ty), Thm.cterm_of ctxt q)]) substThm
2953  val substThm = substThm RS @{thm "≡E"(1)}
2954  in substThm end
2955else
2956  let
2957  val substThm = Drule.instantiate_normalize
2958          (TVars.empty, Vars.make [((("ψ", 0), p_ty), Thm.cterm_of ctxt p),
2959          ((("χ", 0), p_ty), Thm.cterm_of ctxt q)]) substThm
2960  val substThm = substThm RS @{thm "≡E"(2)}
2961  in substThm end end
2962
2963
2964method_setup AOT_subst = 2965Scan.option (Scan.lift (Args.parens (Args.$$$ "reverse"))) --
2966Scan.lift (Parse.embedded_inner_syntax -- Parse.embedded_inner_syntax) --
2967Scan.option (Scan.lift (Args.$$$ "for" -- Args.colon) |--
2968Scan.repeat1 (Scan.lift (Parse.embedded_inner_syntax) --
2969Scan.option (Scan.lift (Args.$$$ "::" |-- Parse.embedded_inner_syntax))))
2970>> (fn ((reversed,(raw_p,raw_q)),raw_bounds) => (fn ctxt =>
2971(Method.SIMPLE_METHOD (Subgoal.FOCUS (fn {context = ctxt, params = _,
2972  prems = prems, asms = asms, concl = concl, schematics = _} =>
2973let
2974val thms = prems
2975val ctxt' = ctxt
2976val ctxt = Context_Position.set_visible false ctxt
2977val raw_bounds = case raw_bounds of SOME bounds => bounds | _ => []
2978
2979val ctxt = (fold (fn (bound, ty) => fn ctxt =>
2980  let
2981    val bound = AOT_read_term @{nonterminal τ'} ctxt bound
2982    val ty = Option.map (Syntax.read_typ ctxt) ty
2983    val ctxt = case ty of SOME ty => let
2984        val bound = Const ("_type_constraint_", Type ("fun", [ty,ty])) $ bound
2985        val bound = Syntax.check_term ctxt bound
2986      in Variable.declare_term bound ctxt end | _ => ctxt
2987  in ctxt end)) raw_bounds ctxt
2988
2989val p = AOT_read_term @{nonterminal φ'} ctxt raw_p
2990val p = Syntax.check_term ctxt p
2991val ctxt = Variable.declare_term p ctxt
2992val q = AOT_read_term @{nonterminal φ'} ctxt raw_q
2993val q = Syntax.check_term ctxt q
2994val ctxt = Variable.declare_term q ctxt
2995
2996val bounds = (map (fn (bound, _) =>
2997  Syntax.check_term ctxt (AOT_read_term @{nonterminal τ'} ctxt bound)
2998)) raw_bounds
2999val p = fold (fn bound => fn p =>
3000  Term.abs ("α", Term.type_of bound) (Term.abstract_over (bound,p)))
3001  bounds p
3002val p = Syntax.check_term ctxt p
3003val p_ty = Term.type_of p
3004
3005val pat = @{const Trueprop} $
3006  (@{const AOT_model_valid_in} $ Var (("w",0), @{typ w}) $
3007   (Var (("φ",0), Type (type_namefun, [p_ty, @{typ 𝗈}])) $ p))
3008val univ = Unify.matchers (Context.Proof ctxt) [(pat, Thm.term_of concl)]
3009val univ = hd (Seq.list_of univ) (* TODO: consider all matches *)
3010val phi = the (Envir.lookup univ
3011  (("φ",0), Type (type_namefun, [p_ty, @{typ 𝗈}])))
3012
3013val q = fold (fn bound => fn q =>
3014  Term.abs ("α", Term.type_of bound) (Term.abstract_over (bound,q))) bounds q
3015val q = Syntax.check_term ctxt q
3016
3017(* Reparse to report bounds as fixes. *)
3018val ctxt = Context_Position.restore_visible ctxt' ctxt
3019val ctxt' = ctxt
3020fun unsource str = fst (Input.source_content (Syntax.read_input str))
3021val (_,ctxt') = Proof_Context.add_fixes (map (fn (str,_) =>
3022  (Binding.make (unsource str, Position.none), NONE, Mixfix.NoSyn)) raw_bounds)
3023  ctxt'
3024val _ = (map (fn (x,_) =>
3025  Syntax.check_term ctxt (AOT_read_term @{nonterminal τ'} ctxt' x)))
3026  raw_bounds
3027val _ = AOT_read_term @{nonterminal φ'} ctxt' raw_p
3028val _ = AOT_read_term @{nonterminal φ'} ctxt' raw_q
3029val reversed = case reversed of SOME _ => true | _ => false
3030val simpThms = [@{thm AOT_subst_cond_𝗈_def}, @{thm AOT_subst_cond_fun_def}]
3031in
3032resolve_tac ctxt [getSubstThm ctxt reversed phi p q] 1
3033THEN simp_tac (ctxt addsimps simpThms) 1
3034THEN (REPEAT (resolve_tac ctxt [@{thm allI}] 1))
3035THEN (TRY (resolve_tac ctxt thms 1))
3036end
3037) ctxt 1))))
3038
3039
3040method_setup AOT_subst_def = 3041Scan.option (Scan.lift (Args.parens (Args.$$$ "reverse"))) --
3042Attrib.thm
3043>> (fn (reversed,fact) => (fn ctxt =>
3044(Method.SIMPLE_METHOD (Subgoal.FOCUS (fn {context = ctxt, params = _,
3045  prems = prems, asms = asms, concl = concl, schematics = _} =>
3046let
3047val c = Thm.concl_of fact
3048val (lhs, rhs) = case c of (constTrueprop $
3049    (constAOT_model_equiv_def $ lhs $ rhs)) => (lhs, rhs)
3050  | _ => raise Fail "Definition expected."
3051val substCond = HOLogic.mk_Trueprop
3052  (Const (const_nameAOT_subst_cond, dummyT) $ lhs $ rhs)
3053val substCond = Syntax.check_term
3054  (Proof_Context.set_mode Proof_Context.mode_schematic ctxt)
3055  substCond
3056val simpThms = [@{thm AOT_subst_cond_𝗈_def},
3057  @{thm AOT_subst_cond_fun_def},
3058  fact RS @{thm "≡Df"}]
3059val substCondThm = Goal.prove ctxt [] [] substCond
3060  (fn {context=ctxt, prems=prems} =>
3061      (SUBGOAL (fn (trm,int) =>
3062        auto_tac (ctxt addsimps simpThms)) 1))
3063val substThm = substCondThm RSN (2,@{thm AOT_subst})
3064in
3065resolve_tac ctxt [substThm RS
3066  (case reversed of NONE => @{thm "≡E"(2)} | _ => @{thm "≡E"(1)})] 1
3067THEN prove_AOT_subst_tac ctxt
3068THEN (TRY (resolve_tac ctxt prems 1))
3069end
3070) ctxt 1))))
3071
3072
3073method_setup AOT_subst_thm = 3074Scan.option (Scan.lift (Args.parens (Args.$$$ "reverse"))) --
3075Attrib.thm
3076>> (fn (reversed,fact) => (fn ctxt =>
3077(Method.SIMPLE_METHOD (Subgoal.FOCUS (fn {context = ctxt, params = _,
3078  prems = prems, asms = asms, concl = concl, schematics = _} =>
3079let
3080val c = Thm.concl_of fact
3081val (lhs, rhs) = case c of
3082  (constTrueprop $
3083   (constAOT_model_valid_in $ _ $
3084    (constAOT_equiv $ lhs $ rhs))) => (lhs, rhs)
3085  | _ => raise Fail "Equivalence expected."
3086
3087val substCond = HOLogic.mk_Trueprop
3088  (Const (const_nameAOT_subst_cond, dummyT) $ lhs $ rhs)
3089val substCond = Syntax.check_term
3090  (Proof_Context.set_mode Proof_Context.mode_schematic ctxt)
3091  substCond
3092val simpThms = [@{thm AOT_subst_cond_𝗈_def},
3093  @{thm AOT_subst_cond_fun_def},
3094  fact]
3095val substCondThm = Goal.prove ctxt [] [] substCond
3096  (fn {context=ctxt, prems=prems} =>
3097      (SUBGOAL (fn (trm,int) => auto_tac (ctxt addsimps simpThms)) 1))
3098val substThm = substCondThm RSN (2,@{thm AOT_subst})
3099in
3100resolve_tac ctxt [substThm RS
3101  (case reversed of NONE => @{thm "≡E"(2)} | _ => @{thm "≡E"(1)})] 1
3102THEN prove_AOT_subst_tac ctxt
3103THEN (TRY (resolve_tac ctxt prems 1))
3104end
3105) ctxt 1))))
3106
3107
3108AOT_theorem "rule-sub-remark:1[1]":
3109  assumes  A!x  ¬E!x and ¬A!x
3110  shows ¬¬E!x
3111  by (AOT_subst (reverse) ¬E!x A!x)
3112     (auto simp: assms) 
3113
3114AOT_theorem "rule-sub-remark:1[2]":
3115  assumes  A!x  ¬E!x and  ¬¬E!x
3116  shows ¬A!x
3117  by (AOT_subst A!x ¬E!x)
3118     (auto simp: assms)
3119
3120AOT_theorem "rule-sub-remark:2[1]":
3121  assumes  [R]xy  ([R]xy & ([Q]a  ¬[Q]a))
3122      and p  [R]xy
3123  shows p  [R]xy & ([Q]a  ¬[Q]a)
3124  by (AOT_subst_thm (reverse) assms(1)) (simp add: assms(2))
3125
3126AOT_theorem "rule-sub-remark:2[2]":
3127  assumes  [R]xy  ([R]xy & ([Q]a  ¬[Q]a))
3128      and p  [R]xy & ([Q]a  ¬[Q]a)
3129  shows p  [R]xy
3130  by (AOT_subst_thm assms(1)) (simp add: assms(2))
3131
3132AOT_theorem "rule-sub-remark:3[1]":
3133  assumes for arbitrary x:  A!x  ¬E!x
3134      and x A!x
3135    shows x ¬E!x
3136  by (AOT_subst (reverse) ¬E!x A!x for: x)
3137     (auto simp: assms)
3138
3139AOT_theorem "rule-sub-remark:3[2]":
3140  assumes for arbitrary x:  A!x  ¬E!x
3141      and x ¬E!x
3142    shows x A!x
3143  by (AOT_subst A!x ¬E!x for: x)
3144     (auto simp: assms)
3145
3146AOT_theorem "rule-sub-remark:4[1]":
3147  assumes  ¬¬[P]x  [P]x and 𝒜¬¬[P]x
3148  shows 𝒜[P]x
3149  by (AOT_subst_thm (reverse) assms(1)) (simp add: assms(2))
3150
3151AOT_theorem "rule-sub-remark:4[2]":
3152  assumes  ¬¬[P]x  [P]x and 𝒜[P]x
3153  shows 𝒜¬¬[P]x
3154  by (AOT_subst_thm assms(1)) (simp add: assms(2))
3155
3156AOT_theorem "rule-sub-remark:5[1]":
3157  assumes  (φ  ψ)  (¬ψ  ¬φ) and (φ  ψ)
3158  shows (¬ψ  ¬φ)
3159  by (AOT_subst_thm (reverse) assms(1)) (simp add: assms(2))
3160
3161AOT_theorem "rule-sub-remark:5[2]":
3162  assumes  (φ  ψ)  (¬ψ  ¬φ) and (¬ψ  ¬φ)
3163  shows (φ  ψ) 
3164  by (AOT_subst_thm assms(1)) (simp add: assms(2))
3165
3166AOT_theorem "rule-sub-remark:6[1]":
3167  assumes  ψ  χ and (φ  ψ)
3168  shows (φ  χ) 
3169  by (AOT_subst_thm (reverse) assms(1)) (simp add: assms(2))
3170
3171AOT_theorem "rule-sub-remark:6[2]":
3172  assumes  ψ  χ and (φ  χ)
3173  shows (φ  ψ)
3174  by (AOT_subst_thm assms(1)) (simp add: assms(2))
3175
3176AOT_theorem "rule-sub-remark:7[1]":
3177  assumes  φ  ¬¬φ and (φ  φ)
3178  shows (¬¬φ  φ) 
3179  by (AOT_subst_thm (reverse) assms(1)) (simp add: assms(2))
3180
3181AOT_theorem "rule-sub-remark:7[2]":
3182  assumes  φ  ¬¬φ and (¬¬φ  φ)
3183  shows (φ  φ)
3184  by (AOT_subst_thm assms(1)) (simp add: assms(2))
3185
3186AOT_theorem "KBasic2:1": ¬φ  ¬φ
3187  by (meson "conventions:5" "contraposition:2"
3188            "Hypothetical Syllogism" "df-rules-formulas[3]"
3189            "df-rules-formulas[4]" "≡I" "useful-tautologies:1")
3190
3191AOT_theorem "KBasic2:2": (φ  ψ)  (φ  ψ)
3192proof -
3193  AOT_have (φ  ψ)  ¬(¬φ & ¬ψ)
3194    by (simp add: "RE◇" "oth-class-taut:5:b")
3195  also AOT_have   ¬(¬φ & ¬ψ)
3196    using "KBasic:11" "≡E"(6) "oth-class-taut:3:a" by blast
3197  also AOT_have   ¬(¬φ & ¬ψ)
3198    using "KBasic:3" "≡E"(1) "oth-class-taut:4:b" by blast
3199  also AOT_have   ¬(¬φ & ¬ψ)
3200    using "KBasic2:1"
3201    by (AOT_subst ¬φ ¬φ; AOT_subst ¬ψ ¬ψ;
3202        auto simp: "oth-class-taut:3:a")
3203  also AOT_have   ¬¬(φ  ψ)
3204    using "≡E"(6) "oth-class-taut:3:b" "oth-class-taut:5:b" by blast
3205  also AOT_have   φ  ψ
3206    by (simp add: "≡I" "useful-tautologies:1" "useful-tautologies:2")
3207  finally show ?thesis .
3208qed
3209
3210AOT_theorem "KBasic2:3": (φ & ψ)  (φ & ψ)
3211  by (metis "RM◇" "&I" "Conjunction Simplification"(1,2)
3212            "→I" "modus-tollens:1" "reductio-aa:1")
3213
3214AOT_theorem "KBasic2:4": (φ  ψ)  (φ  ψ)
3215proof -
3216  AOT_have (φ  ψ)  (¬φ  ψ)
3217    by (AOT_subst φ  ψ ¬φ  ψ)
3218       (auto simp: "oth-class-taut:1:c" "oth-class-taut:3:a")
3219  also AOT_have ...  ¬φ  ψ
3220    by (simp add: "KBasic2:2")
3221  also AOT_have ...  ¬φ  ψ
3222    by (AOT_subst ¬φ ¬φ)
3223       (auto simp: "KBasic:11" "oth-class-taut:3:a")
3224  also AOT_have ...  φ  ψ
3225    using "≡E"(6) "oth-class-taut:1:c" "oth-class-taut:3:a" by blast
3226  finally show ?thesis .
3227qed
3228
3229AOT_theorem "KBasic2:5": φ  ¬¬φ
3230  using "conventions:5"[THEN "≡Df"]
3231  by (AOT_subst φ ¬¬φ;
3232      AOT_subst ¬¬φ ¬¬¬¬φ;
3233      AOT_subst (reverse) ¬¬¬φ ¬φ)
3234     (auto simp: "oth-class-taut:3:b" "oth-class-taut:3:a")
3235
3236
3237AOT_theorem "KBasic2:6": (φ  ψ)  (φ  ψ)
3238proof(rule "→I"; rule "raa-cor:1")
3239  AOT_assume (φ  ψ)
3240  AOT_hence (¬φ  ψ)
3241    using "conventions:2"[THEN "≡Df"]
3242    by (AOT_subst (reverse) ¬φ  ψ φ  ψ) simp
3243  AOT_hence 1: ¬φ  ψ
3244    using "KBasic:13" "vdash-properties:10" by blast
3245  AOT_assume ¬(φ  ψ)
3246  AOT_hence ¬φ and ¬ψ
3247    using "&E" "≡E"(1) "oth-class-taut:5:d" by blast+
3248  AOT_thus ψ & ¬ψ
3249    using "&I"(1) 1[THEN "→E"] "KBasic:11" "≡E"(4) "raa-cor:3" by blast
3250qed
3251
3252AOT_theorem "KBasic2:7": ((φ  ψ) & ¬φ)  ψ
3253proof(rule "→I"; frule "&E"(1); drule "&E"(2))
3254  AOT_assume (φ  ψ)
3255  AOT_hence 1: φ  ψ
3256    using "KBasic2:6" "∨I"(2) "∨E"(1) by blast
3257  AOT_assume ¬φ
3258  AOT_hence ¬φ using "KBasic:11" "≡E"(2) by blast
3259  AOT_thus ψ using 1 "∨E"(2) by blast
3260qed
3261
3262AOT_theorem "T-S5-fund:1": φ  φ
3263  by (meson "dfI" "conventions:5" "contraposition:2"
3264            "Hypothetical Syllogism" "→I" "qml:2"[axiom_inst])
3265lemmas "T◇" = "T-S5-fund:1"
3266
3267AOT_theorem "T-S5-fund:2": φ  φ
3268proof(rule "→I")
3269  AOT_assume φ
3270  AOT_hence ¬¬φ
3271    using "KBasic:14" "≡E"(4) "raa-cor:3" by blast
3272  moreover AOT_have ¬φ  ¬φ
3273    by (fact "qml:3"[axiom_inst])
3274  ultimately AOT_have ¬¬φ
3275    using "modus-tollens:1" by blast
3276  AOT_thus φ using "KBasic:12" "≡E"(2) by blast
3277qed
3278lemmas "5◇" = "T-S5-fund:2"
3279
3280AOT_theorem "Act-Sub:1": 𝒜φ  ¬𝒜¬φ
3281  by (AOT_subst 𝒜¬φ ¬𝒜φ)
3282     (auto simp: "logic-actual-nec:1"[axiom_inst] "oth-class-taut:3:b")
3283
3284AOT_theorem "Act-Sub:2": φ  𝒜φ
3285  using "conventions:5"[THEN "≡Df"]
3286  by (AOT_subst φ ¬¬φ)
3287     (metis "deduction-theorem" "≡I" "≡E"(1) "≡E"(2) "≡E"(3)
3288            "logic-actual-nec:1"[axiom_inst] "qml-act:2"[axiom_inst])
3289
3290AOT_theorem "Act-Sub:3": 𝒜φ  φ
3291  using "conventions:5"[THEN "≡Df"]
3292  by (AOT_subst φ ¬¬φ)
3293     (metis "Act-Sub:1" "→I" "≡E"(4) "nec-imp-act" "reductio-aa:2" "→E")
3294
3295AOT_theorem "Act-Sub:4": 𝒜φ  𝒜φ
3296proof (rule "≡I"; rule "→I")
3297  AOT_assume 𝒜φ
3298  AOT_thus 𝒜φ using "T◇" "vdash-properties:10" by blast
3299next
3300  AOT_assume 𝒜φ
3301  AOT_hence ¬¬𝒜φ
3302    using "dfE" "conventions:5" by blast
3303  AOT_hence ¬𝒜¬φ
3304    by (AOT_subst 𝒜¬φ ¬𝒜φ)
3305       (simp add: "logic-actual-nec:1"[axiom_inst])
3306  AOT_thus 𝒜φ
3307    using "Act-Basic:1" "Act-Basic:6" "∨E"(3) "≡E"(4)
3308          "reductio-aa:1" by blast
3309qed
3310
3311AOT_theorem "Act-Sub:5": 𝒜φ  𝒜φ
3312  by (metis "Act-Sub:2" "Act-Sub:3" "Act-Sub:4" "→I" "≡E"(1) "≡E"(2) "→E")
3313
3314AOT_theorem "S5Basic:1": φ  φ
3315  by (simp add: "≡I" "qml:2"[axiom_inst] "qml:3"[axiom_inst])
3316
3317AOT_theorem "S5Basic:2": φ  φ
3318  by (simp add: "T◇" "5◇" "≡I")
3319
3320AOT_theorem "S5Basic:3": φ  φ
3321  using "T◇" "Hypothetical Syllogism" "qml:3"[axiom_inst] by blast
3322lemmas "B" = "S5Basic:3"
3323
3324AOT_theorem "S5Basic:4": φ  φ
3325  using "5◇" "Hypothetical Syllogism" "qml:2"[axiom_inst] by blast
3326lemmas "B◇" = "S5Basic:4"
3327
3328AOT_theorem "S5Basic:5": φ  φ
3329  using "RM:1" "B" "5◇" "Hypothetical Syllogism" by blast
3330lemmas "4" = "S5Basic:5"
3331
3332AOT_theorem "S5Basic:6": φ  φ
3333  by (simp add: "4" "≡I" "qml:2"[axiom_inst])
3334
3335AOT_theorem "S5Basic:7": φ  φ
3336  using "conventions:5"[THEN "≡Df"] "oth-class-taut:3:b"
3337  by (AOT_subst φ ¬¬φ;
3338      AOT_subst φ ¬¬φ;
3339      AOT_subst (reverse) ¬¬¬φ ¬φ;
3340      AOT_subst (reverse) ¬φ ¬φ)
3341     (auto simp: "S5Basic:6" "if-p-then-p")
3342
3343lemmas "4◇" = "S5Basic:7"
3344
3345AOT_theorem "S5Basic:8": φ  φ
3346  by (simp add: "4◇" "T◇" "≡I")
3347
3348AOT_theorem "S5Basic:9": (φ  ψ)  (φ  ψ)
3349  apply (rule "≡I"; rule "→I")
3350  using "KBasic2:6" "5◇" "∨I"(3) "if-p-then-p" "vdash-properties:10"
3351   apply blast
3352  by (meson "KBasic:15" "4" "∨I"(3) "∨E"(1) "Disjunction Addition"(1)
3353            "con-dis-taut:7" "intro-elim:1" "Commutativity of ∨")
3354
3355AOT_theorem "S5Basic:10": (φ  ψ)  (φ  ψ)
3356proof(rule "≡I"; rule "→I")
3357  AOT_assume (φ  ψ)
3358  AOT_hence φ  ψ
3359    by (meson "KBasic2:6" "∨I"(2) "∨E"(1))
3360  AOT_thus φ  ψ
3361    by (meson "B◇" "4" "4◇" "T◇" "∨I"(3))
3362next
3363  AOT_assume φ  ψ
3364  AOT_hence φ  ψ
3365    by (meson "S5Basic:1" "B◇" "S5Basic:6" "T◇" "5◇" "∨I"(3) "intro-elim:1")
3366  AOT_thus (φ  ψ)
3367    by (meson "KBasic:15" "∨I"(3) "∨E"(1) "Disjunction Addition"(1,2))
3368qed
3369
3370AOT_theorem "S5Basic:11": (φ & ψ)  (φ & ψ)
3371proof -
3372  AOT_have (φ & ψ)  ¬(¬φ  ¬ψ)
3373    by (AOT_subst φ & ψ ¬(¬φ  ¬ψ))
3374       (auto simp: "oth-class-taut:5:a" "oth-class-taut:3:a")
3375  also AOT_have   ¬(¬φ  ¬ψ)
3376    by (AOT_subst ¬ψ ¬ψ)
3377       (auto simp: "KBasic2:1" "oth-class-taut:3:a")
3378  also AOT_have   ¬(¬φ  ¬ψ)
3379    using "KBasic:11" "≡E"(6) "oth-class-taut:3:a" by blast
3380  also AOT_have   ¬(¬φ  ¬ψ)
3381    using "S5Basic:9" "≡E"(1) "oth-class-taut:4:b" by blast
3382  also AOT_have   ¬(¬φ  ¬ψ)
3383    using "KBasic2:1"
3384    by (AOT_subst ¬φ ¬φ; AOT_subst ¬ψ ¬ψ)
3385       (auto simp:  "oth-class-taut:3:a")
3386  also AOT_have   φ & ψ
3387    using "≡E"(6) "oth-class-taut:3:a" "oth-class-taut:5:a" by blast
3388  finally show ?thesis .
3389qed
3390
3391AOT_theorem "S5Basic:12": (φ & ψ)  (φ & ψ)
3392proof (rule "≡I"; rule "→I")
3393  AOT_assume (φ & ψ)
3394  AOT_hence φ & ψ
3395    using "KBasic2:3" "vdash-properties:6" by blast
3396  AOT_thus φ & ψ
3397    using "5◇" "&I" "&E"(1) "&E"(2) "vdash-properties:6" by blast
3398next
3399  AOT_assume φ & ψ
3400  moreover AOT_have (ψ & φ)  (φ & ψ)
3401    by (AOT_subst φ & ψ ψ & φ)
3402       (auto simp: "Commutativity of &" "KBasic:16")
3403  ultimately AOT_show (φ & ψ)
3404    by (metis "4" "&I" "Conjunction Simplification"(1,2) "→E")
3405qed
3406
3407AOT_theorem "S5Basic:13": (φ  ψ)  (φ  ψ)
3408proof (rule "≡I")
3409  AOT_modally_strict {
3410    AOT_have (φ  ψ)  (φ  ψ)
3411      by (meson "KBasic:13" "B◇" "Hypothetical Syllogism" "→I")
3412  }
3413  AOT_hence (φ  ψ)  (φ  ψ)
3414    by (rule RM)
3415  AOT_thus  (φ  ψ)  (φ  ψ)
3416    using "4" "Hypothetical Syllogism" by blast
3417next
3418  AOT_modally_strict {
3419    AOT_have (φ  ψ)  (φ  ψ)
3420      by (meson "B" "Hypothetical Syllogism" "→I" "qml:1"[axiom_inst])
3421  }
3422  AOT_hence  (φ  ψ)  (φ  ψ)
3423    by (rule RM)
3424  AOT_thus (φ  ψ)  (φ  ψ)
3425    using "4" "Hypothetical Syllogism" by blast
3426qed
3427
3428AOT_theorem "derived-S5-rules:1":
3429  assumes Γ  φ  ψ
3430  shows Γ  φ  ψ
3431proof -
3432  AOT_have Γ  φ  ψ
3433    using assms by (rule "RM:1[prem]")
3434  AOT_thus Γ  φ  ψ
3435    using "B" "Hypothetical Syllogism" by blast
3436qed
3437
3438AOT_theorem "derived-S5-rules:2":
3439  assumes Γ  φ  ψ
3440  shows Γ  φ  ψ
3441proof -
3442  AOT_have Γ  φ  ψ
3443    using assms by (rule "RM:2[prem]")
3444  AOT_thus Γ  φ  ψ
3445    using "B◇" "Hypothetical Syllogism" by blast
3446qed
3447
3448AOT_theorem "BFs:1": α φ{α}  α φ{α}
3449proof -
3450  AOT_modally_strict {
3451    AOT_have α φ{α}  φ{α} for α
3452      using "cqt-orig:3" by (rule "RM◇")
3453    AOT_hence α φ{α}  α φ{α}
3454      using "B◇" "∀I" "→E" "→I" by metis
3455  }
3456  thus ?thesis
3457    using "derived-S5-rules:1" by blast
3458qed
3459lemmas "BF" = "BFs:1"
3460
3461AOT_theorem "BFs:2": α φ{α}  α φ{α}
3462proof -
3463  AOT_have α φ{α}  φ{α} for α
3464    using RM "cqt-orig:3" by metis
3465  thus ?thesis
3466    using "cqt-orig:2"[THEN "→E"] "∀I" by metis
3467qed
3468lemmas "CBF" = "BFs:2"
3469
3470AOT_theorem "BFs:3": α φ{α}  α φ{α}
3471proof(rule "→I")
3472  AOT_modally_strict {
3473    AOT_have α ¬φ{α}  α ¬φ{α}
3474      using BF CBF "≡I" by blast
3475  } note θ = this
3476
3477  AOT_assume α φ{α}
3478  AOT_hence ¬¬(α φ{α})
3479    using "dfE" "conventions:5" by blast
3480  AOT_hence ¬α ¬φ{α}
3481    apply (AOT_subst α ¬φ{α} ¬(α φ{α}))
3482    using "dfI" "conventions:3" "conventions:4" "&I"
3483          "contraposition:2" "cqt-further:4"
3484          "df-rules-formulas[3]" by blast
3485  AOT_hence ¬α ¬φ{α}
3486    apply (AOT_subst (reverse) α ¬φ{α} α ¬φ{α})
3487    using θ by blast
3488  AOT_hence ¬α ¬¬¬φ{α}
3489    by (AOT_subst (reverse) ¬¬¬φ{α} ¬φ{α} for: α)
3490       (simp add: "oth-class-taut:3:b")
3491  AOT_hence α ¬¬φ{α}
3492    by (rule "conventions:4"[THEN "dfI"])
3493  AOT_thus α φ{α}
3494    using "conventions:5"[THEN "≡Df"]
3495    by (AOT_subst φ{α} ¬¬φ{α} for: α)
3496qed
3497lemmas "BF◇" = "BFs:3"
3498
3499AOT_theorem "BFs:4": α φ{α}  α φ{α}
3500proof(rule "→I")
3501  AOT_assume α φ{α}
3502  AOT_hence ¬α ¬φ{α}
3503    using "conventions:4"[THEN "dfE"] by blast
3504  AOT_hence ¬α ¬φ{α}
3505    using "KBasic2:1"
3506    by (AOT_subst ¬φ{α} ¬φ{α} for: α)
3507  moreover AOT_have α ¬φ{α}  α ¬φ{α}
3508    using "≡I" "BF" "CBF" by metis
3509  ultimately AOT_have 1: ¬α ¬φ{α}
3510    using "≡E"(3) by blast
3511  AOT_show α φ{α}
3512    apply (rule "conventions:5"[THEN "dfI"])
3513    apply (AOT_subst α φ{α} ¬α ¬φ{α})
3514     apply (simp add: "conventions:4" "≡Df")
3515    apply (AOT_subst ¬¬α ¬φ{α} α ¬φ{α})
3516    by (auto simp: 1 "≡I" "useful-tautologies:1" "useful-tautologies:2")
3517qed
3518lemmas "CBF◇" = "BFs:4"
3519
3520AOT_theorem "sign-S5-thm:1": α φ{α}  α φ{α}
3521proof(rule "→I")
3522  AOT_assume α φ{α}
3523  then AOT_obtain α where φ{α} using "∃E" by metis
3524  moreover AOT_have α
3525    by (simp add: "ex:1:a" "rule-ui:2[const_var]" RN)
3526  moreover AOT_have φ{τ}, τ  α φ{α} for τ
3527  proof -
3528    AOT_have φ{τ}, τ  α φ{α} using "existential:1" by blast
3529    AOT_thus φ{τ}, τ  α φ{α}
3530      using "RN[prem]"[where Γ="{φ τ, «τ»}", simplified] by blast
3531  qed
3532  ultimately AOT_show α φ{α} by blast
3533qed
3534lemmas Buridan = "sign-S5-thm:1"
3535
3536AOT_theorem "sign-S5-thm:2": α φ{α}  α φ{α}
3537proof -
3538  AOT_have α (α φ{α}  φ{α})
3539    by (simp add: "RM◇" "cqt-orig:3" "∀I")
3540  AOT_thus α φ{α}  α φ{α}
3541    using "∀E"(4) "∀I" "→E" "→I" by metis
3542qed
3543lemmas "Buridan◇" = "sign-S5-thm:2"
3544
3545AOT_theorem "sign-S5-thm:3":
3546  α (φ{α} & ψ{α})  (α φ{α} & α ψ{α})
3547  apply (rule "RM:2")
3548  by (metis (no_types, lifting) "∃E" "&I" "&E"(1) "&E"(2) "→I" "∃I"(2))
3549
3550AOT_theorem "sign-S5-thm:4": α (φ{α} & ψ{α})  α φ{α}
3551  apply (rule "RM:2")
3552  by (meson "instantiation" "&E"(1) "→I" "∃I"(2))
3553
3554AOT_theorem "sign-S5-thm:5":
3555  (α (φ{α}  ψ{α}) & α (ψ{α}  χ{α}))  α (φ{α}  χ{α})
3556proof -
3557  {
3558    fix φ' ψ' χ'
3559    AOT_assume  φ' & ψ'  χ'
3560    AOT_hence φ' & ψ'  χ'
3561      using "RN[prem]"[where Γ="{φ', ψ'}"] apply simp
3562      using "&E" "&I" "→E" "→I" by metis
3563  } note R = this
3564  show ?thesis by (rule R; fact AOT)
3565qed
3566
3567AOT_theorem "sign-S5-thm:6":
3568  (α (φ{α}  ψ{α}) & α(ψ{α}  χ{α}))  α(φ{α}  χ{α})
3569proof -
3570  {
3571    fix φ' ψ' χ'
3572    AOT_assume  φ' & ψ'  χ'
3573    AOT_hence φ' & ψ'  χ'
3574      using "RN[prem]"[where Γ="{φ', ψ'}"] apply simp
3575      using "&E" "&I" "→E" "→I" by metis
3576  } note R = this
3577  show ?thesis by (rule R; fact AOT)
3578qed
3579
3580AOT_theorem "exist-nec2:1": τ  τ
3581  using "B◇" "RM◇" "Hypothetical Syllogism" "exist-nec" by blast
3582
3583AOT_theorem "exists-nec2:2": τ  τ
3584  by (meson "Act-Sub:3" "Hypothetical Syllogism" "exist-nec"
3585            "exist-nec2:1" "≡I" "nec-imp-act")
3586
3587AOT_theorem "exists-nec2:3": ¬τ  ¬τ
3588  using "KBasic2:1" "→I" "exist-nec2:1" "≡E"(2) "modus-tollens:1" by blast
3589
3590AOT_theorem "exists-nec2:4": ¬τ  ¬τ
3591  by (metis "Act-Sub:3" "KBasic:12" "→I" "exist-nec" "exists-nec2:3"
3592            "≡I" "≡E"(4) "nec-imp-act" "reductio-aa:1")
3593
3594AOT_theorem "id-nec2:1": α = β  α = β
3595  using "B◇" "RM◇" "Hypothetical Syllogism" "id-nec:1" by blast
3596
3597AOT_theorem "id-nec2:2": α  β  α  β
3598  apply (AOT_subst α  β ¬(α = β))
3599  using "=-infix"[THEN "≡Df"] apply blast
3600  using "KBasic2:1" "→I" "id-nec2:1" "≡E"(2) "modus-tollens:1" by blast
3601
3602AOT_theorem "id-nec2:3": α  β  α  β
3603  apply (AOT_subst α  β ¬(α = β))
3604  using "=-infix"[THEN "≡Df"] apply blast
3605  by (metis "KBasic:11" "→I" "id-nec:2" "≡E"(3) "reductio-aa:2" "→E")
3606
3607AOT_theorem "id-nec2:4": α = β  α = β
3608  using "Hypothetical Syllogism" "id-nec2:1" "id-nec:1" by blast
3609
3610AOT_theorem "id-nec2:5": α  β  α  β
3611  using "id-nec2:3" "id-nec2:2" "→I" "→E" by metis
3612
3613AOT_theorem "sc-eq-box-box:1": (φ  φ)  (φ  φ)
3614  apply (rule "≡I"; rule "→I")
3615  using "KBasic:13" "5◇" "Hypothetical Syllogism" "→E" apply blast
3616  by (metis "KBasic2:1" "KBasic:1" "KBasic:2" "S5Basic:13" "≡E"(2)
3617            "raa-cor:5" "→E")
3618
3619AOT_theorem "sc-eq-box-box:2": ((φ  φ)  (φ  φ))  (φ  φ)
3620  by (metis "Act-Sub:3" "KBasic:13" "5◇" "∨E"(2) "→I" "≡I"
3621            "nec-imp-act" "raa-cor:2" "→E")
3622
3623AOT_theorem "sc-eq-box-box:3": (φ  φ)  (¬φ  ¬φ)
3624proof (rule "→I"; rule "≡I"; rule "→I")
3625  AOT_assume (φ  φ)
3626  AOT_hence φ  φ using "sc-eq-box-box:1" "≡E" by blast
3627  moreover AOT_assume ¬φ
3628  ultimately AOT_have ¬φ
3629    using "modus-tollens:1" by blast
3630  AOT_thus ¬φ
3631    using "KBasic2:1" "≡E"(2) by blast
3632next
3633  AOT_assume (φ  φ)
3634  moreover AOT_assume ¬φ
3635  ultimately AOT_show ¬φ
3636    using "modus-tollens:1" "qml:2"[axiom_inst] "→E" by blast
3637qed
3638
3639AOT_theorem "sc-eq-box-box:4":
3640  ((φ  φ) & (ψ  ψ))  ((φ  ψ)  (φ  ψ))
3641proof(rule "→I"; rule "→I")
3642  AOT_assume θ: (φ  φ) & (ψ  ψ)
3643  AOT_assume ξ: φ  ψ
3644  AOT_hence (φ & ψ)  (¬φ & ¬ψ)
3645    using "≡E"(4) "oth-class-taut:4:g" "raa-cor:3" by blast
3646  moreover {
3647    AOT_assume φ & ψ
3648    AOT_hence (φ  ψ)
3649      using "KBasic:3" "KBasic:8" "≡E"(2) "vdash-properties:10" by blast
3650  }
3651  moreover {
3652    AOT_assume ¬φ & ¬ψ
3653    moreover AOT_have ¬φ  ¬φ and ¬ψ  ¬ψ
3654      using θ "Conjunction Simplification"(1,2)
3655            "sc-eq-box-box:3" "→E" by metis+
3656    ultimately AOT_have ¬φ & ¬ψ
3657      by (metis "&I" "Conjunction Simplification"(1,2)
3658                "≡E"(4) "modus-tollens:1" "raa-cor:3")
3659    AOT_hence (φ  ψ)
3660      using "KBasic:3" "KBasic:9" "≡E"(2) "→E" by blast
3661  }
3662  ultimately AOT_show (φ  ψ)
3663    using "∨E"(2) "reductio-aa:1" by blast
3664qed
3665
3666AOT_theorem "sc-eq-box-box:5":
3667  ((φ  φ) & (ψ  ψ))  ((φ  ψ)  (φ  ψ))
3668proof (rule "→I")
3669  AOT_assume ((φ  φ) & (ψ  ψ))
3670  AOT_hence ((φ  φ) & (ψ  ψ))
3671    using 4[THEN "→E"] "&E" "&I" "KBasic:3" "≡E"(2) by metis
3672  moreover AOT_have ((φ  φ) & (ψ  ψ))  ((φ  ψ)  (φ  ψ))
3673  proof (rule RM; rule "→I"; rule "→I")
3674    AOT_modally_strict {
3675      AOT_assume A: ((φ  φ) & (ψ  ψ))
3676      AOT_hence φ  φ and ψ  ψ
3677        using "&E" "qml:2"[axiom_inst] "→E" by blast+
3678      moreover AOT_assume φ  ψ
3679      ultimately AOT_have φ  ψ
3680        using "→E" "qml:2"[axiom_inst] "≡E" "≡I" by meson
3681      moreover AOT_have (φ  ψ)  (φ  ψ)
3682        using A "sc-eq-box-box:4" "→E" by blast
3683      ultimately AOT_show (φ  ψ) using "→E" by blast
3684    }
3685  qed
3686  ultimately AOT_show ((φ  ψ)  (φ  ψ)) using "→E" by blast
3687qed
3688
3689AOT_theorem "sc-eq-box-box:6": (φ  φ)  ((φ  ψ)  (φ  ψ))
3690proof (rule "→I"; rule "→I"; rule "raa-cor:1")
3691  AOT_assume ¬(φ  ψ)
3692  AOT_hence ¬(φ  ψ)
3693    by (metis "KBasic:11" "≡E"(1))
3694  AOT_hence (φ & ¬ψ)
3695    by (AOT_subst φ & ¬ψ ¬(φ  ψ))
3696       (meson "Commutativity of ≡" "≡E"(1) "oth-class-taut:1:b")
3697  AOT_hence φ and 2: ¬ψ
3698    using "KBasic2:3"[THEN "→E"] "&E" by blast+
3699  moreover AOT_assume (φ  φ)
3700  ultimately AOT_have φ
3701    by (metis "≡E"(1) "sc-eq-box-box:1" "→E")
3702  AOT_hence φ
3703    using "qml:2"[axiom_inst, THEN "→E"] by blast
3704  moreover AOT_assume φ  ψ
3705  ultimately AOT_have ψ
3706    using "→E" by blast
3707  moreover AOT_have ¬ψ
3708    using 2 "KBasic:12" "¬¬I" "intro-elim:3:d" by blast
3709  ultimately AOT_show ψ & ¬ψ
3710    using "&I" by blast
3711qed
3712
3713AOT_theorem "sc-eq-box-box:7": (φ  φ)  ((φ  𝒜ψ)  𝒜(φ  ψ))
3714proof (rule "→I"; rule "→I"; rule "raa-cor:1")
3715  AOT_assume ¬𝒜(φ  ψ)
3716  AOT_hence 𝒜¬(φ  ψ)
3717    by (metis "Act-Basic:1" "∨E"(2))
3718  AOT_hence 𝒜(φ & ¬ψ)
3719    by (AOT_subst φ & ¬ψ ¬(φ  ψ))
3720       (meson "Commutativity of ≡" "≡E"(1) "oth-class-taut:1:b")
3721  AOT_hence 𝒜φ and 2: 𝒜¬ψ
3722    using "Act-Basic:2"[THEN "≡E"(1)] "&E" by blast+
3723  AOT_hence φ
3724    by (metis "Act-Sub:3" "→E")
3725  moreover AOT_assume (φ  φ)
3726  ultimately AOT_have φ
3727    by (metis "≡E"(1) "sc-eq-box-box:1" "→E")
3728  AOT_hence φ
3729    using "qml:2"[axiom_inst, THEN "→E"] by blast
3730  moreover AOT_assume φ  𝒜ψ
3731  ultimately AOT_have 𝒜ψ
3732    using "→E" by blast
3733  moreover AOT_have ¬𝒜ψ
3734    using 2 by (meson "Act-Sub:1" "≡E"(4) "raa-cor:3")
3735  ultimately AOT_show 𝒜ψ & ¬𝒜ψ
3736    using "&I" by blast
3737qed
3738
3739AOT_theorem "sc-eq-fur:1": 𝒜φ  𝒜φ
3740  using "Act-Basic:6" "Act-Sub:4" "≡E"(6) by blast
3741
3742AOT_theorem "sc-eq-fur:2": (φ  φ)  (𝒜φ  φ)
3743  by (metis "B◇" "Act-Sub:3" "KBasic:13" "T◇" "Hypothetical Syllogism"
3744            "→I" "≡I" "nec-imp-act")
3745
3746AOT_theorem "sc-eq-fur:3":
3747  x (φ{x}  φ{x})  (∃!x φ{x}  ιx φ{x})
3748proof (rule "→I"; rule "→I")
3749  AOT_assume x (φ{x}  φ{x})
3750  AOT_hence A: x (φ{x}  φ{x})
3751    using CBF "→E" by blast
3752  AOT_assume ∃!x φ{x}
3753  then AOT_obtain a where a_def: φ{a} & y (φ{y}  y = a)
3754    using "∃E"[rotated 1, OF "uniqueness:1"[THEN "dfE"]] by blast
3755  moreover AOT_have φ{a}
3756    using calculation A "∀E"(2) "qml:2"[axiom_inst] "→E" "&E"(1) by blast
3757  AOT_hence 𝒜φ{a}
3758    using "nec-imp-act" "→E" by blast
3759  moreover AOT_have y (𝒜φ{y}  y = a)
3760  proof (rule "∀I"; rule "→I")
3761    fix b
3762    AOT_assume 𝒜φ{b}
3763    AOT_hence φ{b}
3764      using "Act-Sub:3" "→E" by blast
3765    moreover {
3766      AOT_have (φ{b}  φ{b})
3767        using A "∀E"(2) by blast
3768      AOT_hence φ{b}  φ{b}
3769        using "KBasic:13" "5◇" "Hypothetical Syllogism" "→E" by blast
3770    }
3771    ultimately AOT_have φ{b}
3772      using "→E" by blast
3773    AOT_hence φ{b}
3774      using "qml:2"[axiom_inst] "→E" by blast
3775    AOT_thus b = a
3776      using a_def[THEN "&E"(2)] "∀E"(2) "→E" by blast
3777  qed
3778  ultimately AOT_have 𝒜φ{a} & y (𝒜φ{y}  y = a)
3779    using "&I" by blast
3780  AOT_hence x (𝒜φ{x} & y (𝒜φ{y}  y = x))
3781    using "∃I" by fast
3782  AOT_hence ∃!x 𝒜φ{x}
3783    using "uniqueness:1"[THEN "dfI"] by fast
3784  AOT_thus ιx φ{x}
3785    using "actual-desc:1"[THEN "≡E"(2)] by blast
3786qed
3787
3788AOT_theorem "sc-eq-fur:4":
3789x (φ{x}  φ{x})  (x = ιx φ{x}  (φ{x} & z (φ{z}  z = x)))
3790proof (rule "→I")
3791  AOT_assume x (φ{x}  φ{x})
3792  AOT_hence x (φ{x}  φ{x})
3793    using CBF "→E" by blast
3794  AOT_hence A: 𝒜φ{α}  φ{α} for α
3795    using "sc-eq-fur:2" "∀E" "→E" by fast
3796  AOT_show x = ιx φ{x}  (φ{x} & z (φ{z}  z = x))
3797  proof (rule "≡I"; rule "→I")
3798    AOT_assume x = ιx φ{x}
3799    AOT_hence B: 𝒜φ{x} & z (𝒜φ{z}  z = x)
3800      using "nec-hintikka-scheme"[THEN "≡E"(1)] by blast
3801    AOT_show φ{x} & z (φ{z}  z = x)
3802    proof (rule "&I"; (rule "∀I"; rule "→I")?)
3803      AOT_show φ{x}
3804        using A B[THEN "&E"(1)] "≡E"(1) by blast
3805    next
3806      AOT_show z = x if φ{z} for z
3807        using that B[THEN "&E"(2)] "∀E"(2) "→E" A[THEN "≡E"(2)] by blast
3808    qed
3809  next
3810    AOT_assume B: φ{x} & z (φ{z}  z = x)
3811    AOT_have 𝒜φ{x} & z (𝒜φ{z}  z = x)
3812    proof(rule "&I"; (rule "∀I"; rule "→I")?)
3813      AOT_show 𝒜φ{x}
3814        using B[THEN "&E"(1)] A[THEN "≡E"(2)] by blast
3815    next
3816      AOT_show b = x if 𝒜φ{b} for b
3817        using A[THEN "≡E"(1)] that
3818              B[THEN "&E"(2), THEN "∀E"(2), THEN "→E"] by blast
3819    qed
3820    AOT_thus x = ιx φ{x}
3821      using "nec-hintikka-scheme"[THEN "≡E"(2)] by blast
3822  qed
3823qed
3824
3825AOT_theorem "id-act:1": α = β  𝒜α = β
3826  by (meson "Act-Sub:3" "Hypothetical Syllogism"
3827            "id-nec2:1" "id-nec:2" "≡I" "nec-imp-act")
3828
3829AOT_theorem "id-act:2": α  β  𝒜α  β
3830proof (AOT_subst α  β ¬(α = β))
3831  AOT_modally_strict {
3832    AOT_show α  β  ¬(α = β)
3833      by (simp add: "=-infix" "≡Df")
3834  }
3835next
3836  AOT_show ¬(α = β)  𝒜¬(α = β)
3837  proof (safe intro!: "≡I" "→I")
3838    AOT_assume ¬α = β
3839    AOT_hence ¬𝒜α = β using "id-act:1" "≡E"(3) by blast
3840    AOT_thus 𝒜¬α = β
3841      using "¬¬E" "Act-Sub:1" "≡E"(3) by blast
3842  next
3843    AOT_assume 𝒜¬α = β
3844    AOT_hence ¬𝒜α = β
3845      using "¬¬I" "Act-Sub:1" "≡E"(4) by blast
3846    AOT_thus ¬α = β
3847      using "id-act:1" "≡E"(4) by blast
3848  qed
3849qed
3850
3851AOT_theorem "A-Exists:1": 𝒜∃!α φ{α}  ∃!α 𝒜φ{α}
3852proof -
3853  AOT_have 𝒜∃!α φ{α}  𝒜αβ (φ{β}  β = α)
3854    by (AOT_subst ∃!α φ{α} αβ (φ{β}  β = α))
3855       (auto simp add: "oth-class-taut:3:a" "uniqueness:2")
3856  also AOT_have   α 𝒜β (φ{β}  β = α)
3857    by (simp add: "Act-Basic:10")
3858  also AOT_have   αβ 𝒜(φ{β}  β = α)
3859    by (AOT_subst 𝒜β (φ{β}  β = α) β 𝒜(φ{β}  β = α) for: α)
3860       (auto simp: "logic-actual-nec:3"[axiom_inst] "oth-class-taut:3:a")
3861  also AOT_have   αβ (𝒜φ{β}  𝒜β = α)
3862    by (AOT_subst (reverse) 𝒜φ{β}  𝒜β = α
3863                            𝒜(φ{β}  β = α) for: α β :: 'a)
3864       (auto simp: "Act-Basic:5" "cqt-further:7")
3865  also AOT_have   αβ (𝒜φ{β}  β = α)
3866    by (AOT_subst (reverse) 𝒜β = α β = α for: α β :: 'a)
3867       (auto simp: "id-act:1" "cqt-further:7")
3868  also AOT_have ...  ∃!α 𝒜φ{α}
3869    using "uniqueness:2" "Commutativity of ≡"[THEN "≡E"(1)] by fast
3870  finally show ?thesis.
3871qed
3872
3873AOT_theorem "A-Exists:2": ιx φ{x}  𝒜∃!x φ{x}
3874  by (AOT_subst 𝒜∃!x φ{x} ∃!x 𝒜φ{x})
3875     (auto simp: "actual-desc:1" "A-Exists:1")
3876
3877AOT_theorem "id-act-desc:1": ιx (x = y)
3878proof(rule "existence:1"[THEN "dfI"]; rule "∃I")
3879  AOT_show x E!x  E!x]ιx (x = y)
3880  proof (rule "russell-axiom[exe,1].nec-russell-axiom"[THEN "≡E"(2)];
3881         rule "∃I"; (rule "&I")+)
3882    AOT_show 𝒜y = y by (simp add: "RA[2]" "id-eq:1")
3883  next
3884    AOT_show z (𝒜z = y  z = y)
3885      apply (rule "∀I")
3886      using "id-act:1"[THEN "≡E"(2)] "→I" by blast
3887  next
3888    AOT_show x E!x  E!x]y
3889    proof (rule "lambda-predicates:2"[axiom_inst, THEN "→E", THEN "≡E"(2)])
3890      AOT_show x E!x  E!x]
3891        by "cqt:2[lambda]"
3892    next
3893      AOT_show E!y  E!y 
3894        by (simp add: "if-p-then-p")
3895    qed
3896  qed
3897next
3898  AOT_show x E!x  E!x]
3899    by "cqt:2[lambda]"
3900qed
3901
3902AOT_theorem "id-act-desc:2": y = ιx (x = y)
3903  by (rule descriptions[axiom_inst, THEN "≡E"(2)];
3904      rule "∀I"; rule "id-act:1"[symmetric])
3905
3906AOT_theorem "pre-en-eq:1[1]": x1[F]  x1[F]
3907  by (simp add: encoding "vdash-properties:1[2]")
3908
3909AOT_theorem "pre-en-eq:1[2]": x1x2[F]  x1x2[F]
3910proof (rule "→I")
3911  AOT_assume x1x2[F]
3912  AOT_hence x1y [F]yx2] and x2y [F]x1y]
3913    using "nary-encoding[2]"[axiom_inst, THEN "≡E"(1)] "&E" by blast+
3914  moreover AOT_have y [F]yx2] by "cqt:2"
3915  moreover AOT_have y [F]x1y] by "cqt:2"
3916  ultimately AOT_have x1y [F]yx2] and x2y [F]x1y]
3917    using encoding[axiom_inst, unvarify F] "→E" "&I" by blast+
3918  note A = this
3919  AOT_hence (x1y [F]yx2] & x2y [F]x1y])
3920    using "KBasic:3"[THEN "≡E"(2)] "&I" by blast
3921  AOT_thus x1x2[F]
3922    by (rule "nary-encoding[2]"[axiom_inst, THEN RN,
3923                                THEN "KBasic:6"[THEN "→E"],
3924                                THEN "≡E"(2)])
3925qed
3926
3927AOT_theorem "pre-en-eq:1[3]": x1x2x3[F]  x1x2x3[F]
3928proof (rule "→I")
3929  AOT_assume x1x2x3[F]
3930  AOT_hence x1y [F]yx2x3]
3931        and x2y [F]x1yx3]
3932        and x3y [F]x1x2y]
3933    using "nary-encoding[3]"[axiom_inst, THEN "≡E"(1)] "&E" by blast+
3934  moreover AOT_have y [F]yx2x3] by "cqt:2"
3935  moreover AOT_have y [F]x1yx3] by "cqt:2"
3936  moreover AOT_have y [F]x1x2y] by "cqt:2"
3937  ultimately AOT_have x1y [F]yx2x3]
3938                  and x2y [F]x1yx3]
3939                  and x3y [F]x1x2y]
3940    using encoding[axiom_inst, unvarify F] "→E" by blast+
3941  note A = this
3942  AOT_have B: (x1y [F]yx2x3] & x2y [F]x1yx3] & x3y [F]x1x2y])
3943    by (rule "KBasic:3"[THEN "≡E"(2)] "&I" A)+
3944  AOT_thus x1x2x3[F]
3945    by (rule "nary-encoding[3]"[axiom_inst, THEN RN,
3946                THEN "KBasic:6"[THEN "→E"], THEN "≡E"(2)])
3947qed
3948
3949AOT_theorem "pre-en-eq:1[4]": x1x2x3x4[F]  x1x2x3x4[F]
3950proof (rule "→I")
3951  AOT_assume x1x2x3x4[F]
3952  AOT_hence x1y [F]yx2x3x4]
3953        and x2y [F]x1yx3x4]
3954        and x3y [F]x1x2yx4]
3955        and x4y [F]x1x2x3y]
3956    using "nary-encoding[4]"[axiom_inst, THEN "≡E"(1)] "&E" by metis+
3957  moreover AOT_have y [F]yx2x3x4] by "cqt:2"
3958  moreover AOT_have y [F]x1yx3x4] by "cqt:2"
3959  moreover AOT_have y [F]x1x2yx4] by "cqt:2"
3960  moreover AOT_have y [F]x1x2x3y] by "cqt:2"
3961  ultimately AOT_have x1y [F]yx2x3x4]
3962                  and x2y [F]x1yx3x4]
3963                  and x3y [F]x1x2yx4]
3964                  and x4y [F]x1x2x3y]
3965    using "→E" encoding[axiom_inst, unvarify F] by blast+
3966  note A = this
3967  AOT_have B: (x1y [F]yx2x3x4] &
3968                  x2y [F]x1yx3x4] &
3969                  x3y [F]x1x2yx4] &
3970                  x4y [F]x1x2x3y])
3971    by (rule "KBasic:3"[THEN "≡E"(2)] "&I" A)+
3972  AOT_thus x1x2x3x4[F]
3973    by (rule "nary-encoding[4]"[axiom_inst, THEN RN,
3974              THEN "KBasic:6"[THEN "→E"], THEN "≡E"(2)])
3975qed
3976
3977AOT_theorem "pre-en-eq:2[1]": ¬x1[F]  ¬x1[F]
3978proof (rule "→I"; rule "raa-cor:1")
3979  AOT_assume ¬¬x1[F]
3980  AOT_hence x1[F]
3981    by (rule "conventions:5"[THEN "dfI"])
3982  AOT_hence x1[F]
3983    by(rule "S5Basic:13"[THEN "≡E"(1), OF  "pre-en-eq:1[1]"[THEN RN],
3984              THEN "qml:2"[axiom_inst, THEN "→E"], THEN "→E"])
3985  moreover AOT_assume ¬x1[F]
3986  ultimately AOT_show x1[F] & ¬x1[F] by (rule "&I")
3987qed
3988AOT_theorem "pre-en-eq:2[2]": ¬x1x2[F]  ¬x1x2[F]
3989proof (rule "→I"; rule "raa-cor:1")
3990  AOT_assume ¬¬x1x2[F]
3991  AOT_hence x1x2[F]
3992    by (rule "conventions:5"[THEN "dfI"])
3993  AOT_hence x1x2[F]
3994    by(rule "S5Basic:13"[THEN "≡E"(1), OF  "pre-en-eq:1[2]"[THEN RN],
3995              THEN "qml:2"[axiom_inst, THEN "→E"], THEN "→E"])
3996  moreover AOT_assume ¬x1x2[F]
3997  ultimately AOT_show x1x2[F] & ¬x1x2[F] by (rule "&I")
3998qed
3999
4000AOT_theorem "pre-en-eq:2[3]": ¬x1x2x3[F]  ¬x1x2x3[F]
4001proof (rule "→I"; rule "raa-cor:1")
4002  AOT_assume ¬¬x1x2x3[F]
4003  AOT_hence x1x2x3[F]
4004    by (rule "conventions:5"[THEN "dfI"])
4005  AOT_hence x1x2x3[F]
4006    by(rule "S5Basic:13"[THEN "≡E"(1), OF  "pre-en-eq:1[3]"[THEN RN],
4007              THEN "qml:2"[axiom_inst, THEN "→E"], THEN "→E"])
4008  moreover AOT_assume ¬x1x2x3[F]
4009  ultimately AOT_show x1x2x3[F] & ¬x1x2x3[F] by (rule "&I")
4010qed
4011
4012AOT_theorem "pre-en-eq:2[4]": ¬x1x2x3x4[F]  ¬x1x2x3x4[F]
4013proof (rule "→I"; rule "raa-cor:1")
4014  AOT_assume ¬¬x1x2x3x4[F]
4015  AOT_hence x1x2x3x4[F]
4016    by (rule "conventions:5"[THEN "dfI"])
4017  AOT_hence x1x2x3x4[F]
4018    by(rule "S5Basic:13"[THEN "≡E"(1), OF  "pre-en-eq:1[4]"[THEN RN],
4019                         THEN "qml:2"[axiom_inst, THEN "→E"], THEN "→E"])
4020  moreover AOT_assume ¬x1x2x3x4[F]
4021  ultimately AOT_show x1x2x3x4[F] & ¬x1x2x3x4[F] by (rule "&I")
4022qed
4023
4024AOT_theorem "en-eq:1[1]": x1[F]  x1[F]
4025  using "pre-en-eq:1[1]"[THEN RN] "sc-eq-box-box:2" "∨I" "→E" by metis
4026AOT_theorem "en-eq:1[2]": x1x2[F]  x1x2[F]
4027  using "pre-en-eq:1[2]"[THEN RN] "sc-eq-box-box:2" "∨I" "→E" by metis
4028AOT_theorem "en-eq:1[3]": x1x2x3[F]  x1x2x3[F]
4029  using "pre-en-eq:1[3]"[THEN RN] "sc-eq-box-box:2" "∨I" "→E" by fast
4030AOT_theorem "en-eq:1[4]": x1x2x3x4[F]  x1x2x3x4[F]
4031  using "pre-en-eq:1[4]"[THEN RN] "sc-eq-box-box:2" "∨I" "→E" by fast
4032
4033AOT_theorem "en-eq:2[1]": x1[F]  x1[F]
4034  by (simp add: "≡I" "pre-en-eq:1[1]" "qml:2"[axiom_inst])
4035AOT_theorem "en-eq:2[2]": x1x2[F]  x1x2[F]
4036  by (simp add: "≡I" "pre-en-eq:1[2]" "qml:2"[axiom_inst])
4037AOT_theorem "en-eq:2[3]": x1x2x3[F]  x1x2x3[F]
4038  by (simp add: "≡I" "pre-en-eq:1[3]" "qml:2"[axiom_inst])
4039AOT_theorem "en-eq:2[4]": x1x2x3x4[F]  x1x2x3x4[F]
4040  by (simp add: "≡I" "pre-en-eq:1[4]" "qml:2"[axiom_inst])
4041
4042AOT_theorem "en-eq:3[1]": x1[F]  x1[F]
4043  using "T◇" "derived-S5-rules:2"[OF "pre-en-eq:1[1]"] "≡I" by blast
4044AOT_theorem "en-eq:3[2]": x1x2[F]  x1x2[F]
4045  using "T◇" "derived-S5-rules:2"[OF "pre-en-eq:1[2]"] "≡I" by blast
4046AOT_theorem "en-eq:3[3]": x1x2x3[F]  x1x2x3[F]
4047  using "T◇" "derived-S5-rules:2"[OF "pre-en-eq:1[3]"] "≡I" by blast
4048AOT_theorem "en-eq:3[4]": x1x2x3x4[F]  x1x2x3x4[F]
4049  using "T◇" "derived-S5-rules:2"[OF "pre-en-eq:1[4]"] "≡I" by blast
4050
4051AOT_theorem "en-eq:4[1]":
4052  (x1[F]  y1[G])  (x1[F]  y1[G])
4053  apply (rule "≡I"; rule "→I"; rule "≡I"; rule "→I")
4054  using "qml:2"[axiom_inst, THEN "→E"] "≡E"(1,2) "en-eq:2[1]" by blast+
4055AOT_theorem "en-eq:4[2]":
4056  (x1x2[F]  y1y2[G])  (x1x2[F]  y1y2[G])
4057  apply (rule "≡I"; rule "→I"; rule "≡I"; rule "→I")
4058  using "qml:2"[axiom_inst, THEN "→E"] "≡E"(1,2) "en-eq:2[2]" by blast+
4059AOT_theorem "en-eq:4[3]":
4060  (x1x2x3[F]  y1y2y3[G])  (x1x2x3[F]  y1y2y3[G])
4061  apply (rule "≡I"; rule "→I"; rule "≡I"; rule "→I")
4062  using "qml:2"[axiom_inst, THEN "→E"] "≡E"(1,2) "en-eq:2[3]" by blast+
4063AOT_theorem "en-eq:4[4]":
4064  (x1x2x3x4[F]  y1y2y3y4[G])  (x1x2x3x4[F]  y1y2y3y4[G])
4065  apply (rule "≡I"; rule "→I"; rule "≡I"; rule "→I")
4066  using "qml:2"[axiom_inst, THEN "→E"] "≡E"(1,2) "en-eq:2[4]" by blast+
4067
4068AOT_theorem "en-eq:5[1]":
4069  (x1[F]  y1[G])  (x1[F]  y1[G])
4070  apply (rule "≡I"; rule "→I")
4071  using "en-eq:4[1]"[THEN "≡E"(1)] "qml:2"[axiom_inst, THEN "→E"]
4072   apply blast
4073  using "sc-eq-box-box:4"[THEN "→E", THEN "→E"]
4074        "&I"[OF "pre-en-eq:1[1]"[THEN RN], OF "pre-en-eq:1[1]"[THEN RN]]
4075  by blast
4076AOT_theorem "en-eq:5[2]":
4077  (x1x2[F]  y1y2[G])  (x1x2[F]  y1y2[G])
4078  apply (rule "≡I"; rule "→I")
4079  using "en-eq:4[2]"[THEN "≡E"(1)] "qml:2"[axiom_inst, THEN "→E"]
4080   apply blast
4081  using "sc-eq-box-box:4"[THEN "→E", THEN "→E"]
4082        "&I"[OF "pre-en-eq:1[2]"[THEN RN], OF "pre-en-eq:1[2]"[THEN RN]]
4083  by blast
4084AOT_theorem "en-eq:5[3]":
4085  (x1x2x3[F]  y1y2y3[G])  (x1x2x3[F]  y1y2y3[G])
4086  apply (rule "≡I"; rule "→I")
4087  using "en-eq:4[3]"[THEN "≡E"(1)] "qml:2"[axiom_inst, THEN "→E"]
4088   apply blast
4089  using "sc-eq-box-box:4"[THEN "→E", THEN "→E"]
4090        "&I"[OF "pre-en-eq:1[3]"[THEN RN], OF "pre-en-eq:1[3]"[THEN RN]]
4091  by blast
4092AOT_theorem "en-eq:5[4]":
4093  (x1x2x3x4[F]  y1y2y3y4[G])  (x1x2x3x4[F]  y1y2y3y4[G])
4094  apply (rule "≡I"; rule "→I")
4095  using "en-eq:4[4]"[THEN "≡E"(1)] "qml:2"[axiom_inst, THEN "→E"]
4096   apply blast
4097  using "sc-eq-box-box:4"[THEN "→E", THEN "→E"]
4098        "&I"[OF "pre-en-eq:1[4]"[THEN RN], OF "pre-en-eq:1[4]"[THEN RN]]
4099  by blast
4100
4101AOT_theorem "en-eq:6[1]":
4102  (x1[F]  y1[G])  (x1[F]  y1[G])
4103  using "en-eq:5[1]"[symmetric] "en-eq:4[1]" "≡E"(5) by fast
4104AOT_theorem "en-eq:6[2]":
4105  (x1x2[F]  y1y2[G])  (x1x2[F]  y1y2[G])
4106  using "en-eq:5[2]"[symmetric] "en-eq:4[2]" "≡E"(5) by fast
4107AOT_theorem "en-eq:6[3]":
4108  (x1x2x3[F]  y1y2y3[G])  (x1x2x3[F]  y1y2y3[G])
4109  using "en-eq:5[3]"[symmetric] "en-eq:4[3]" "≡E"(5) by fast
4110AOT_theorem "en-eq:6[4]":
4111  (x1x2x3x4[F]  y1y2y3y4[G])  (x1x2x3x4[F]  y1y2y3y4[G])
4112  using "en-eq:5[4]"[symmetric] "en-eq:4[4]" "≡E"(5) by fast
4113
4114AOT_theorem "en-eq:7[1]": ¬x1[F]  ¬x1[F]
4115  using "pre-en-eq:2[1]" "qml:2"[axiom_inst] "≡I" by blast
4116AOT_theorem "en-eq:7[2]": ¬x1x2[F]  ¬x1x2[F]
4117  using "pre-en-eq:2[2]" "qml:2"[axiom_inst] "≡I" by blast
4118AOT_theorem "en-eq:7[3]": ¬x1x2x3[F]  ¬x1x2x3[F]
4119  using "pre-en-eq:2[3]" "qml:2"[axiom_inst] "≡I" by blast
4120AOT_theorem "en-eq:7[4]": ¬x1x2x3x4[F]  ¬x1x2x3x4[F]
4121  using "pre-en-eq:2[4]" "qml:2"[axiom_inst] "≡I" by blast
4122
4123AOT_theorem "en-eq:8[1]": ¬x1[F]  ¬x1[F]
4124  using "en-eq:2[1]"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)]]
4125        "KBasic:11" "≡E"(5)[symmetric] by blast
4126AOT_theorem "en-eq:8[2]": ¬x1x2[F]  ¬x1x2[F]
4127  using "en-eq:2[2]"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)]]
4128        "KBasic:11" "≡E"(5)[symmetric] by blast
4129AOT_theorem "en-eq:8[3]": ¬x1x2x3[F]  ¬x1x2x3[F]
4130  using "en-eq:2[3]"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)]]
4131        "KBasic:11" "≡E"(5)[symmetric] by blast
4132AOT_theorem "en-eq:8[4]": ¬x1x2x3x4[F]  ¬x1x2x3x4[F]
4133  using "en-eq:2[4]"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)]]
4134        "KBasic:11" "≡E"(5)[symmetric] by blast
4135
4136AOT_theorem "en-eq:9[1]": ¬x1[F]  ¬x1[F]
4137  using "en-eq:7[1]" "en-eq:8[1]" "≡E"(5) by blast
4138AOT_theorem "en-eq:9[2]": ¬x1x2[F]  ¬x1x2[F]
4139  using "en-eq:7[2]" "en-eq:8[2]" "≡E"(5) by blast
4140AOT_theorem "en-eq:9[3]": ¬x1x2x3[F]  ¬x1x2x3[F]
4141  using "en-eq:7[3]" "en-eq:8[3]" "≡E"(5) by blast
4142AOT_theorem "en-eq:9[4]": ¬x1x2x3x4[F]  ¬x1x2x3x4[F]
4143  using "en-eq:7[4]" "en-eq:8[4]" "≡E"(5) by blast
4144
4145AOT_theorem "en-eq:10[1]": 𝒜x1[F]  x1[F]
4146  by (metis "Act-Sub:3" "deduction-theorem" "≡I" "≡E"(1)
4147            "nec-imp-act" "en-eq:3[1]" "pre-en-eq:1[1]")
4148AOT_theorem "en-eq:10[2]": 𝒜x1x2[F]  x1x2[F]
4149  by (metis "Act-Sub:3" "deduction-theorem" "≡I" "≡E"(1)
4150            "nec-imp-act" "en-eq:3[2]" "pre-en-eq:1[2]")
4151AOT_theorem "en-eq:10[3]": 𝒜x1x2x3[F]  x1x2x3[F]
4152  by (metis "Act-Sub:3" "deduction-theorem" "≡I" "≡E"(1)
4153            "nec-imp-act" "en-eq:3[3]" "pre-en-eq:1[3]")
4154AOT_theorem "en-eq:10[4]": 𝒜x1x2x3x4[F]  x1x2x3x4[F]
4155  by (metis "Act-Sub:3" "deduction-theorem" "≡I" "≡E"(1)
4156            "nec-imp-act" "en-eq:3[4]" "pre-en-eq:1[4]")
4157
4158AOT_theorem "oa-facts:1": O!x  O!x
4159proof(rule "→I")
4160  AOT_modally_strict {
4161    AOT_have x E!x]x  E!x
4162      by (rule "lambda-predicates:2"[axiom_inst, THEN "→E"]) "cqt:2"
4163  } note θ = this
4164  AOT_assume O!x
4165  AOT_hence x E!x]x
4166    by (rule "=dfE"(2)[OF AOT_ordinary, rotated 1]) "cqt:2"
4167  AOT_hence E!x using θ[THEN "≡E"(1)] by blast
4168  AOT_hence E!x using "qml:3"[axiom_inst, THEN "→E"] by blast
4169  AOT_hence x E!x]x
4170    by (AOT_subst x E!x]x E!x)
4171       (auto simp: θ)
4172  AOT_thus O!x
4173    by (rule "=dfI"(2)[OF AOT_ordinary, rotated 1]) "cqt:2"
4174qed
4175
4176AOT_theorem "oa-facts:2": A!x  A!x
4177proof(rule "→I")
4178  AOT_modally_strict {
4179    AOT_have x ¬E!x]x  ¬E!x
4180      by (rule "lambda-predicates:2"[axiom_inst, THEN "→E"]) "cqt:2"
4181  } note θ = this
4182  AOT_assume A!x
4183  AOT_hence x ¬E!x]x
4184    by (rule "=dfE"(2)[OF AOT_abstract, rotated 1]) "cqt:2"
4185  AOT_hence ¬E!x using θ[THEN "≡E"(1)] by blast
4186  AOT_hence ¬E!x using "KBasic2:1"[THEN "≡E"(2)] by blast
4187  AOT_hence ¬E!x using "4"[THEN "→E"] by blast
4188  AOT_hence ¬E!x
4189    using "KBasic2:1"
4190    by (AOT_subst (reverse) ¬E!x ¬E!x) blast
4191  AOT_hence x ¬E!x]x
4192    by (AOT_subst x ¬E!x]x ¬E!x)
4193       (auto simp: θ)
4194  AOT_thus A!x
4195    by (rule "=dfI"(2)[OF AOT_abstract, rotated 1]) "cqt:2[lambda]"
4196qed
4197
4198AOT_theorem "oa-facts:3": O!x  O!x
4199  using "oa-facts:1" "B◇" "RM◇" "Hypothetical Syllogism" by blast
4200AOT_theorem "oa-facts:4": A!x  A!x
4201  using "oa-facts:2" "B◇" "RM◇" "Hypothetical Syllogism" by blast
4202
4203AOT_theorem "oa-facts:5": O!x  O!x
4204  by (meson "Act-Sub:3" "Hypothetical Syllogism" "≡I" "nec-imp-act"
4205            "oa-facts:1" "oa-facts:3")
4206
4207AOT_theorem "oa-facts:6": A!x  A!x
4208  by (meson "Act-Sub:3" "Hypothetical Syllogism" "≡I" "nec-imp-act"
4209            "oa-facts:2" "oa-facts:4")
4210
4211AOT_theorem "oa-facts:7": O!x  𝒜O!x
4212  by (meson "Act-Sub:3" "Hypothetical Syllogism" "≡I" "nec-imp-act"
4213            "oa-facts:1" "oa-facts:3")
4214
4215AOT_theorem "oa-facts:8": A!x  𝒜A!x
4216  by (meson "Act-Sub:3" "Hypothetical Syllogism" "≡I" "nec-imp-act"
4217            "oa-facts:2" "oa-facts:4")
4218
4219subsection‹The Theory of Relations›
4220text‹\label{PLM: 9.10}›
4221
4222AOT_theorem "beta-C-meta":
4223  μ1...μn φ{μ1...μn, ν1...νn}] 
4224   (μ1...μn φ{μ1...μn, ν1...νn}]ν1...νn  φ{ν1...νn, ν1...νn})
4225  using "lambda-predicates:2"[axiom_inst] by blast
4226
4227AOT_theorem "beta-C-cor:1":
4228  (ν1...∀νn(μ1...μn φ{μ1...μn, ν1...νn}])) 
4229   ν1...∀νn (μ1...μn φ{μ1...μn, ν1...νn}]ν1...νn  φ{ν1...νn, ν1...νn})
4230  apply (rule "cqt-basic:14"[where 'a='a, THEN "→E"])
4231  using "beta-C-meta" "∀I" by fast
4232
4233AOT_theorem "beta-C-cor:2":
4234  μ1...μn φ{μ1...μn}] 
4235   ν1...∀νn (μ1...μn φ{μ1...μn}]ν1...νn  φ{ν1...νn})
4236  apply (rule "→I"; rule "∀I")
4237  using "beta-C-meta"[THEN "→E"] by fast
4238
4239(* TODO: add better syntax parsing for INSTANCE_OF_CQT_2 *)
4240theorem "beta-C-cor:3":
4241  assumes ν1νn. AOT_instance_of_cqt_2 (φ (AOT_term_of_var ν1νn))
4242  shows [v  ν1...∀νn (μ1...μn φ{ν1...νn, μ1...μn}]ν1...νn 
4243                         φ{ν1...νn, ν1...νn})]
4244  using "cqt:2[lambda]"[axiom_inst, OF assms]
4245        "beta-C-cor:1"[THEN "→E"] "∀I" by fast
4246
4247AOT_theorem "betaC:1:a": μ1...μn φ{μ1...μn}]κ1...κn  φ{κ1...κn}
4248proof -
4249  AOT_modally_strict {
4250    AOT_assume μ1...μn φ{μ1...μn}]κ1...κn
4251    moreover AOT_have μ1...μn φ{μ1...μn}] and κ1...κn
4252      using calculation "cqt:5:a"[axiom_inst, THEN "→E"] "&E" by blast+
4253    ultimately AOT_show φ{κ1...κn}
4254      using "beta-C-cor:2"[THEN "→E", THEN "∀E"(1), THEN "≡E"(1)] by blast
4255  }
4256qed
4257
4258AOT_theorem "betaC:1:b": ¬φ{κ1...κn}  ¬μ1...μn φ{μ1...μn}]κ1...κn
4259  using "betaC:1:a" "raa-cor:3" by blast
4260
4261lemmas "β→C" = "betaC:1:a" "betaC:1:b"
4262
4263AOT_theorem "betaC:2:a":
4264  μ1...μn φ{μ1...μn}], κ1...κn, φ{κ1...κn} 
4265   μ1...μn φ{μ1...μn}]κ1...κn
4266proof -
4267  AOT_modally_strict {
4268    AOT_assume 1: μ1...μn φ{μ1...μn}]
4269           and 2: κ1...κn
4270           and 3: φ{κ1...κn}
4271    AOT_hence μ1...μn φ{μ1...μn}]κ1...κn
4272      using "beta-C-cor:2"[THEN "→E", OF 1, THEN "∀E"(1), THEN "≡E"(2)]
4273      by blast
4274  }
4275  AOT_thus μ1...μn φ{μ1...μn}], κ1...κn, φ{κ1...κn} 
4276            μ1...μn φ{μ1...μn}]κ1...κn
4277    by blast
4278qed
4279
4280AOT_theorem "betaC:2:b":
4281  μ1...μn φ{μ1...μn}], κ1...κn, ¬μ1...μn φ{μ1...μn}]κ1...κn 
4282   ¬φ{κ1...κn}
4283  using "betaC:2:a" "raa-cor:3" by blast
4284
4285lemmas "β←C" = "betaC:2:a" "betaC:2:b"
4286
4287AOT_theorem "eta-conversion-lemma1:1": Π  x1...xn [Π]x1...xn] = Π
4288  using "lambda-predicates:3"[axiom_inst] "∀I" "∀E"(1) "→I" by fast
4289
4290(* Note: generalized alphabetic variant of the last theorem *)
4291AOT_theorem "eta-conversion-lemma1:2": Π  ν1...νn [Π]ν1...νn] = Π
4292  using "eta-conversion-lemma1:1".
4293
4294text‹Note: not explicitly part of PLM.›
4295AOT_theorem id_sym:
4296  assumes τ = τ'
4297  shows τ' = τ
4298  using "rule=E"[where φ="λ τ' . «τ' = τ»", rotated 1, OF assms]
4299        "=I"(1)[OF "t=t-proper:1"[THEN "→E", OF assms]] by auto
4300declare id_sym[sym]
4301
4302text‹Note: not explicitly part of PLM.›
4303AOT_theorem id_trans:
4304  assumes τ = τ' and τ' = τ''
4305  shows τ = τ''
4306  using "rule=E" assms by blast
4307declare id_trans[trans]
4308
4309method "ηC" for Π :: <'a::{AOT_Term_id_2,AOT_κs}> =
4310  (match conclusion in "[v  τ{Π} = τ'{Π}]" for v τ τ'  4311   rule "rule=E"[rotated 1, OF "eta-conversion-lemma1:2"
4312    [THEN "→E", of v "«[Π]»", symmetric]])
4313
4314AOT_theorem "sub-des-lam:1":
4315  z1...zn  χ{z1...zn, ιx φ{x}}] & ιx φ{x} = ιx ψ{x} 
4316   z1...zn χ{z1...zn, ιx φ{x}}] = z1...zn χ{z1...zn, ιx ψ{x}}]
4317proof(rule "→I")
4318  AOT_assume A: z1...zn  χ{z1...zn, ιx φ{x}}] & ιx φ{x} = ιx ψ{x}
4319  AOT_show z1...zn χ{z1...zn, ιx φ{x}}] = z1...zn χ{z1...zn, ιx ψ{x}}]
4320    using "rule=E"[where φ="λ τ . «z1...zn χ{z1...zn, ιx φ{x}}] =
4321                                   z1...zn χ{z1...zn, τ}]»",
4322               OF "=I"(1)[OF A[THEN "&E"(1)]], OF A[THEN "&E"(2)]]
4323    by blast
4324qed
4325
4326AOT_theorem "sub-des-lam:2":
4327  ιx φ{x} = ιx ψ{x}  χ{ιx φ{x}} = χ{ιx ψ{x}} for χ :: κ  𝗈
4328  using "rule=E"[where φ="λ τ . «χ{ιx φ{x}} = χ{τ}»",
4329                 OF "=I"(1)[OF "log-prop-prop:2"]] "→I" by blast
4330
4331AOT_theorem "prop-equiv": F = G  x (x[F]  x[G])
4332proof(rule "≡I"; rule "→I")
4333  AOT_assume F = G
4334  AOT_thus x (x[F]  x[G])
4335    by (rule "rule=E"[rotated]) (fact "oth-class-taut:3:a"[THEN GEN])
4336next
4337  AOT_assume x (x[F]  x[G])
4338  AOT_hence x[F]  x[G] for x
4339    using "∀E" by blast
4340  AOT_hence (x[F]  x[G]) for x
4341    using "en-eq:6[1]"[THEN "≡E"(1)] by blast
4342  AOT_hence x (x[F]  x[G])
4343    by (rule GEN)
4344  AOT_hence x (x[F]  x[G])
4345    using BF[THEN "→E"] by fast
4346  AOT_thus "F = G"
4347    using "p-identity-thm2:1"[THEN "≡E"(2)] by blast
4348qed
4349
4350AOT_theorem "relations:1":
4351  assumes INSTANCE_OF_CQT_2(φ)
4352  shows F x1...∀xn ([F]x1...xn  φ{x1...xn})
4353  apply (rule "∃I"(1)[where τ="«x1...xn φ{x1...xn}]»"])
4354  using "cqt:2[lambda]"[OF assms, axiom_inst]
4355        "beta-C-cor:2"[THEN "→E", THEN RN] by blast+
4356
4357AOT_theorem "relations:2":
4358  assumes INSTANCE_OF_CQT_2(φ)
4359  shows F x ([F]x  φ{x})
4360  using "relations:1" assms by blast
4361
4362AOT_theorem "block-paradox:1": ¬x G (x[G] & ¬[G]x)]
4363proof(rule "raa-cor:2")
4364  let ?K="«x G (x[G] & ¬[G]x)]»"
4365  AOT_assume A: «?K»
4366  AOT_have x (A!x & F (x[F]  F = «?K»))
4367    using "A-objects"[axiom_inst] by fast
4368  then AOT_obtain a where ξ: A!a & F (a[F]  F = «?K»)
4369    using "∃E"[rotated] by blast
4370  AOT_show p & ¬p for p
4371  proof (rule "∨E"(1)[OF "exc-mid"]; rule "→I")
4372    AOT_assume B: [«?K»]a
4373    AOT_hence G (a[G] & ¬[G]a)
4374      using "β→C" A by blast
4375    then AOT_obtain P where a[P] & ¬[P]a
4376      using "∃E"[rotated] by blast
4377    moreover AOT_have P = [«?K»]
4378      using ξ[THEN "&E"(2), THEN "∀E"(2), THEN "≡E"(1)]
4379            calculation[THEN "&E"(1)] by blast
4380    ultimately AOT_have ¬[«?K»]a
4381      using "rule=E" "&E"(2) by fast
4382    AOT_thus p & ¬p
4383      using B RAA by blast
4384  next
4385    AOT_assume B: ¬[«?K»]a
4386    AOT_hence ¬G (a[G] & ¬[G]a)
4387      using "β←C" "cqt:2[const_var]"[of a, axiom_inst] A by blast
4388    AOT_hence C: G ¬(a[G] & ¬[G]a)
4389      using "cqt-further:4"[THEN "→E"] by blast
4390    AOT_have G (a[G]  [G]a)
4391      by (AOT_subst a[G]  [G]a ¬(a[G] & ¬[G]a) for: G)
4392         (auto simp: "oth-class-taut:1:a" C)
4393    AOT_hence a[«?K»]  [«?K»]a
4394      using "∀E" A by blast
4395    moreover AOT_have a[«?K»]
4396      using ξ[THEN "&E"(2), THEN "∀E"(1), OF A, THEN "≡E"(2)]
4397      using "=I"(1)[OF A] by blast
4398    ultimately AOT_show p & ¬p
4399      using B "→E" RAA by blast
4400  qed
4401qed
4402
4403AOT_theorem "block-paradox:2": ¬F x([F]x  G(x[G] & ¬[G]x))
4404proof(rule RAA(2))
4405  AOT_assume F x ([F]x  G (x[G] & ¬[G]x))
4406  then AOT_obtain F where F_prop: x ([F]x  G (x[G] & ¬[G]x))
4407    using "∃E"[rotated] by blast
4408  AOT_have x (A!x & G (x[G]  G = F))
4409    using "A-objects"[axiom_inst] by fast
4410  then AOT_obtain a where ξ: A!a & G (a[G]  G = F)
4411    using "∃E"[rotated] by blast
4412  AOT_show ¬F x([F]x  G(x[G] & ¬[G]x))
4413  proof (rule "∨E"(1)[OF "exc-mid"]; rule "→I")
4414    AOT_assume B: [F]a
4415    AOT_hence G (a[G] & ¬[G]a)
4416      using F_prop[THEN "∀E"(2), THEN "≡E"(1)] by blast
4417    then AOT_obtain P where a[P] & ¬[P]a
4418      using "∃E"[rotated] by blast
4419    moreover AOT_have P = F
4420      using ξ[THEN "&E"(2), THEN "∀E"(2), THEN "≡E"(1)]
4421            calculation[THEN "&E"(1)] by blast
4422    ultimately AOT_have ¬[F]a
4423      using "rule=E" "&E"(2) by fast
4424    AOT_thus ¬F x([F]x  G(x[G] & ¬[G]x))
4425      using B RAA by blast
4426  next
4427    AOT_assume B: ¬[F]a
4428    AOT_hence ¬G (a[G] & ¬[G]a)
4429      using "oth-class-taut:4:b"[THEN "≡E"(1),
4430              OF F_prop[THEN "∀E"(2)[of _ _ a]], THEN "≡E"(1)]
4431      by simp
4432    AOT_hence C: G ¬(a[G] & ¬[G]a)
4433      using "cqt-further:4"[THEN "→E"] by blast
4434    AOT_have G (a[G]  [G]a)
4435      by (AOT_subst a[G]  [G]a ¬(a[G] & ¬[G]a) for: G)
4436         (auto simp: "oth-class-taut:1:a" C)
4437    AOT_hence a[F]  [F]a
4438      using "∀E" by blast
4439    moreover AOT_have a[F]
4440      using ξ[THEN "&E"(2), THEN "∀E"(2), of F, THEN "≡E"(2)]
4441      using "=I"(2) by blast
4442    ultimately AOT_show ¬F x([F]x  G(x[G] & ¬[G]x))
4443      using B "→E" RAA by blast
4444  qed
4445qed(simp)
4446
4447AOT_theorem "block-paradox:3": ¬y z z = y]
4448proof(rule RAA(2))
4449  AOT_assume θ: y z z = y]
4450  AOT_have x (A!x & F (x[F]  y(F = z z = y] & ¬y[F])))
4451    using "A-objects"[axiom_inst] by force
4452  then AOT_obtain a where
4453    a_prop: A!a & F (a[F]  y (F = z z = y] & ¬y[F]))
4454    using "∃E"[rotated] by blast
4455  AOT_have ζ: az z = a]  y (z z = a] = z z = y] & ¬yz z = a])
4456    using θ[THEN "∀E"(2)] a_prop[THEN "&E"(2), THEN "∀E"(1)] by blast
4457  AOT_show ¬y z z = y]
4458  proof (rule "∨E"(1)[OF "exc-mid"]; rule "→I")
4459    AOT_assume A: az z = a]
4460    AOT_hence y (z z = a] = z z = y] & ¬yz z = a])
4461      using ζ[THEN "≡E"(1)] by blast
4462    then AOT_obtain b where b_prop: z z = a] = z z = b] & ¬bz z = a]
4463      using "∃E"[rotated] by blast
4464    moreover AOT_have a = a by (rule "=I")
4465    moreover AOT_have z z = a] using θ "∀E" by blast
4466    moreover AOT_have a using "cqt:2[const_var]"[axiom_inst] .
4467    ultimately AOT_have z z = a]a using "β←C" by blast
4468    AOT_hence z z = b]a using "rule=E" b_prop[THEN "&E"(1)] by fast
4469    AOT_hence a = b using "β→C" by blast
4470    AOT_hence bz z = a] using A "rule=E" by fast
4471    AOT_thus ¬y z z = y] using b_prop[THEN "&E"(2)] RAA by blast
4472  next
4473    AOT_assume A: ¬az z = a]
4474    AOT_hence ¬y (z z = a] = z z = y] & ¬yz z = a])
4475      using ζ "oth-class-taut:4:b"[THEN "≡E"(1), THEN "≡E"(1)] by blast
4476    AOT_hence y ¬(z z = a] = z z = y] & ¬yz z = a])
4477      using "cqt-further:4"[THEN "→E"] by blast
4478    AOT_hence ¬(z z = a] = z z = a] & ¬az z = a])
4479      using "∀E" by blast
4480    AOT_hence z z = a] = z z = a]  az z = a]
4481      by (metis "&I" "deduction-theorem" "raa-cor:4")
4482    AOT_hence az z = a] using "=I"(1) θ[THEN "∀E"(2)] "→E" by blast
4483    AOT_thus ¬y z z = y] using A RAA by blast
4484  qed
4485qed(simp)
4486
4487AOT_theorem "block-paradox:4": ¬y F x([F]x  x = y)
4488proof(rule RAA(2))
4489  AOT_assume θ: y F x([F]x  x = y)
4490  AOT_have x (A!x & F (x[F]  z (y([F]y  y = z) & ¬z[F])))
4491    using "A-objects"[axiom_inst] by force
4492  then AOT_obtain a where
4493    a_prop: A!a & F (a[F]  z (y([F]y  y = z) & ¬z[F]))
4494    using "∃E"[rotated] by blast
4495  AOT_obtain F where F_prop: x ([F]x  x = a)
4496    using θ[THEN "∀E"(2)] "∃E"[rotated] by blast
4497  AOT_have ζ: a[F]  z (y ([F]y  y = z) & ¬z[F])
4498    using a_prop[THEN "&E"(2), THEN "∀E"(2)] by blast
4499  AOT_show ¬y F x([F]x  x = y)
4500  proof (rule "∨E"(1)[OF "exc-mid"]; rule "→I")
4501    AOT_assume A: a[F]
4502    AOT_hence z (y ([F]y  y = z) & ¬z[F])
4503      using ζ[THEN "≡E"(1)] by blast
4504    then AOT_obtain b where b_prop: y ([F]y  y = b) & ¬b[F]
4505      using "∃E"[rotated] by blast
4506    moreover AOT_have [F]a
4507      using F_prop[THEN "∀E"(2), THEN "≡E"(2)] "=I"(2) by blast
4508    ultimately AOT_have a = b
4509      using "∀E"(2) "≡E"(1) "&E" by fast
4510    AOT_hence a = b
4511      using "β→C" by blast
4512    AOT_hence b[F]
4513      using A "rule=E" by fast
4514    AOT_thus ¬y F x([F]x  x = y)
4515      using b_prop[THEN "&E"(2)] RAA by blast
4516  next
4517    AOT_assume A: ¬a[F]
4518    AOT_hence ¬z (y ([F]y  y = z) & ¬z[F])
4519      using ζ "oth-class-taut:4:b"[THEN "≡E"(1), THEN "≡E"(1)] by blast
4520    AOT_hence z ¬(y ([F]y  y = z) & ¬z[F])
4521      using "cqt-further:4"[THEN "→E"] by blast
4522    AOT_hence ¬(y ([F]y  y = a) & ¬a[F])
4523      using "∀E" by blast
4524    AOT_hence y ([F]y  y = a)  a[F]
4525      by (metis "&I" "deduction-theorem" "raa-cor:4")
4526    AOT_hence a[F] using F_prop "→E" by blast
4527    AOT_thus ¬y F x([F]x  x = y)
4528      using A RAA by blast
4529  qed
4530qed(simp)
4531
4532AOT_theorem "block-paradox:5": ¬Fxy([F]xy  y = x)
4533proof(rule "raa-cor:2")
4534  AOT_assume Fxy([F]xy  y = x)
4535  then AOT_obtain F where F_prop: xy([F]xy  y = x)
4536    using "∃E"[rotated] by blast
4537  {
4538    fix x
4539    AOT_have 1: y([F]xy  y = x)
4540      using F_prop "∀E" by blast
4541    AOT_have 2: z [F]xz] by "cqt:2"
4542    moreover AOT_have y(z [F]xz]y  y = x)
4543    proof(rule "∀I")
4544      fix y
4545      AOT_have z [F]xz]y  [F]xy
4546        using "beta-C-meta"[THEN "→E"] 2 by fast
4547      also AOT_have ...  y = x
4548        using 1 "∀E" by fast
4549      finally AOT_show z [F]xz]y  y = x.
4550    qed
4551    ultimately AOT_have Fy([F]y  y = x)
4552      using "∃I" by fast
4553  }
4554  AOT_hence xFy([F]y  y = x)
4555    by (rule GEN)
4556  AOT_thus xFy([F]y  y = x) & ¬xFy([F]y  y = x)
4557    using "&I" "block-paradox:4" by blast
4558qed
4559
4560AOT_act_theorem "block-paradox2:1":
4561  x [G]x  ¬x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4562proof(rule "→I"; rule "raa-cor:2")
4563  AOT_assume antecedant: x [G]x
4564  AOT_have Lemma: x ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x))
4565  proof(rule GEN)
4566    fix x
4567    AOT_have A: [G]ιy (y = x & H (x[H] & ¬[H]x)) 
4568                 ∃!y (y = x & H (x[H] & ¬[H]x))
4569    proof(rule "≡I"; rule "→I")
4570      AOT_assume [G]ιy (y = x & H (x[H] & ¬[H]x))
4571      AOT_hence ιy (y = x & H (x[H] & ¬[H]x))
4572        using "cqt:5:a"[axiom_inst, THEN "→E", THEN "&E"(2)] by blast
4573      AOT_thus ∃!y (y = x & H (x[H] & ¬[H]x))
4574        using "!-exists:1"[THEN "≡E"(1)] by blast
4575    next
4576      AOT_assume A: ∃!y (y = x & H (x[H] & ¬[H]x))
4577      AOT_obtain a where a_1: a = x & H (x[H] & ¬[H]x)
4578                     and a_2: z (z = x & H (x[H] & ¬[H]x)  z = a)
4579        using "uniqueness:1"[THEN "dfE", OF A] "&E" "∃E"[rotated] by blast
4580      AOT_have a_3: [G]a
4581        using antecedant "∀E" by blast
4582      AOT_show [G]ιy (y = x & H (x[H] & ¬[H]x))
4583        apply (rule "russell-axiom[exe,1].russell-axiom"[THEN "≡E"(2)])
4584        apply (rule "∃I"(2))
4585        using a_1 a_2 a_3 "&I" by blast
4586    qed
4587    also AOT_have B: ...  H (x[H] & ¬[H]x)
4588    proof (rule "≡I"; rule "→I")
4589      AOT_assume A: ∃!y (y = x & H (x[H] & ¬[H]x))
4590      AOT_obtain a where a = x & H (x[H] & ¬[H]x)
4591        using "uniqueness:1"[THEN "dfE", OF A] "&E" "∃E"[rotated] by blast
4592      AOT_thus H (x[H] & ¬[H]x) using "&E" by blast
4593    next
4594      AOT_assume H (x[H] & ¬[H]x)
4595      AOT_hence x = x & H (x[H] & ¬[H]x)
4596        using "id-eq:1" "&I" by blast
4597      moreover AOT_have z (z = x & H (x[H] & ¬[H]x)  z = x)
4598        by (simp add: "Conjunction Simplification"(1) "universal-cor")
4599      ultimately AOT_show ∃!y (y = x & H (x[H] & ¬[H]x))
4600        using "uniqueness:1"[THEN "dfI"] "&I" "∃I"(2) by fast
4601    qed
4602    finally AOT_show ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x)) .
4603  qed
4604
4605  AOT_assume A: x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4606  AOT_have θ: x (x [G]ιy (y = x & H (x[H] & ¬[H]x))]x 
4607                   [G]ιy(y = x & H (x[H] & ¬[H]x)))
4608    using "beta-C-meta"[THEN "→E", OF A] "∀I" by fast
4609  AOT_have x (x [G]ιy (y = x & H (x[H] & ¬[H]x))]x  H (x[H] & ¬[H]x))
4610    using θ Lemma "cqt-basic:10"[THEN "→E"] "&I" by fast
4611  AOT_hence F x ([F]x  H (x[H] & ¬[H]x))
4612    using "∃I"(1) A by fast
4613  AOT_thus (F x ([F]x  H (x[H] & ¬[H]x))) &
4614            (¬F x ([F]x  H (x[H] & ¬[H]x)))
4615    using "block-paradox:2" "&I" by blast
4616qed
4617
4618text‹Note: Strengthens the above to a modally-strict theorem.
4619           Not explicitly part of PLM.›
4620AOT_theorem "block-paradox2:1[strict]":
4621  x 𝒜[G]x  ¬x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4622proof(rule "→I"; rule "raa-cor:2")
4623  AOT_assume antecedant: x 𝒜[G]x
4624  AOT_have Lemma: 𝒜x ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x))
4625  proof(safe intro!: GEN "Act-Basic:5"[THEN "≡E"(2)]
4626                     "logic-actual-nec:3"[axiom_inst, THEN "≡E"(2)])
4627    fix x
4628    AOT_have A: 𝒜[G]ιy (y = x & H (x[H] & ¬[H]x)) 
4629                 ∃!y 𝒜(y = x & H (x[H] & ¬[H]x))
4630    proof(rule "≡I"; rule "→I")
4631      AOT_assume 𝒜[G]ιy (y = x & H (x[H] & ¬[H]x))
4632      moreover AOT_have ([G]ιy (y = x & H (x[H] & ¬[H]x)) 
4633                                  ιy (y = x & H (x[H] & ¬[H]x)))
4634      proof(rule RN; rule "→I")
4635        AOT_modally_strict {
4636          AOT_assume [G]ιy (y = x & H (x[H] & ¬[H]x))
4637          AOT_hence ιy (y = x & H (x[H] & ¬[H]x))
4638            using "cqt:5:a"[axiom_inst, THEN "→E", THEN "&E"(2)] by blast
4639          AOT_thus ιy (y = x & H (x[H] & ¬[H]x))
4640            using "exist-nec"[THEN "→E"] by blast
4641        }
4642      qed
4643      ultimately AOT_have 𝒜ιy (y = x & H (x[H] & ¬[H]x))
4644        using "act-cond"[THEN "→E", THEN "→E"] "nec-imp-act"[THEN "→E"] by blast
4645      AOT_hence ιy (y = x & H (x[H] & ¬[H]x))
4646        using "Act-Sub:3" "B◇" "vdash-properties:10" by blast
4647      AOT_thus ∃!y 𝒜(y = x & H (x[H] & ¬[H]x))
4648        using "actual-desc:1"[THEN "≡E"(1)] by blast
4649    next
4650      AOT_assume A: ∃!y 𝒜(y = x & H (x[H] & ¬[H]x))
4651      AOT_obtain a where a_1: 𝒜(a = x & H (x[H] & ¬[H]x))
4652                     and a_2: z (𝒜(z = x & H (x[H] & ¬[H]x))  z = a)
4653        using "uniqueness:1"[THEN "dfE", OF A] "&E" "∃E"[rotated] by blast
4654      AOT_have a_3: 𝒜[G]a
4655        using antecedant "∀E" by blast
4656      moreover AOT_have a = ιy(y = x & H (x[H] & ¬[H]x))
4657        using "nec-hintikka-scheme"[THEN "≡E"(2), OF "&I"] a_1 a_2 by auto
4658      ultimately AOT_show 𝒜[G]ιy (y = x & H (x[H] & ¬[H]x))
4659        using "rule=E" by fast
4660    qed
4661    also AOT_have B: ...  𝒜H (x[H] & ¬[H]x)
4662    proof (rule "≡I"; rule "→I")
4663      AOT_assume A: ∃!y 𝒜(y = x & H (x[H] & ¬[H]x))
4664      AOT_obtain a where 𝒜(a = x & H (x[H] & ¬[H]x))
4665        using "uniqueness:1"[THEN "dfE", OF A] "&E" "∃E"[rotated] by blast
4666      AOT_thus 𝒜H (x[H] & ¬[H]x)
4667        using "Act-Basic:2"[THEN "≡E"(1), THEN "&E"(2)] by blast
4668    next
4669      AOT_assume 𝒜H (x[H] & ¬[H]x)
4670      AOT_hence 𝒜x = x & 𝒜H (x[H] & ¬[H]x)
4671        using "id-eq:1" "&I" "RA[2]" by blast
4672      AOT_hence 𝒜(x = x & H (x[H] & ¬[H]x))
4673        using "act-conj-act:3" "Act-Basic:2" "≡E" by blast
4674      moreover AOT_have z (𝒜(z = x & H (x[H] & ¬[H]x))  z = x)
4675      proof(safe intro!: GEN "→I")
4676        fix z
4677        AOT_assume 𝒜(z = x & H (x[H] & ¬[H]x))
4678        AOT_hence 𝒜(z = x)
4679          using "Act-Basic:2"[THEN "≡E"(1), THEN "&E"(1)] by blast
4680        AOT_thus z = x
4681           by (metis "id-act:1" "intro-elim:3:b")
4682      qed
4683      ultimately AOT_show ∃!y 𝒜(y = x & H (x[H] & ¬[H]x))
4684        using "uniqueness:1"[THEN "dfI"] "&I" "∃I"(2) by fast
4685    qed
4686    finally AOT_show (𝒜[G]ιy(y = x & H (x[H] & ¬[H]x))  𝒜H (x[H] & ¬[H]x)).
4687  qed
4688
4689  AOT_assume A: x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4690  AOT_hence 𝒜x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4691    using "exist-nec" "→E" "nec-imp-act"[THEN "→E"] by blast
4692  AOT_hence 𝒜(x [G]ιy (y = x & H (x[H] & ¬[H]x))] &
4693                x ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x)))
4694    using Lemma "Act-Basic:2"[THEN "≡E"(2)] "&I" by blast
4695  moreover AOT_have 𝒜(x [G]ιy (y = x & H (x[H] & ¬[H]x))] &
4696                x ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x)))
4697       𝒜p (p & ¬p)
4698  proof (rule "logic-actual-nec:2"[axiom_inst, THEN "≡E"(1)];
4699         rule "RA[2]"; rule "→I")
4700    AOT_modally_strict {
4701      AOT_assume 0: x [G]ιy (y = x & H (x[H] & ¬[H]x))] &
4702                x ([G]ιy(y = x & H (x[H] & ¬[H]x))  H (x[H] & ¬[H]x))
4703      AOT_have F x ([F]x  G (x[G] & ¬[G]x))
4704      proof(rule "∃I"(1))
4705        AOT_show x (x [G]ιy (y = x & H (x[H] & ¬[H]x))]x  H (x[H] & ¬[H]x))
4706        proof(safe intro!: GEN "≡I" "→I" "β←C" dest!: "β→C")
4707          fix x
4708          AOT_assume [G]ιy(y = x & H (x[H] & ¬[H]x))
4709          AOT_thus H (x[H] & ¬[H]x)
4710            using 0 "&E" "∀E"(2) "≡E"(1) by blast
4711        next
4712          fix x
4713          AOT_assume H (x[H] & ¬[H]x)
4714          AOT_thus [G]ιy(y = x & H (x[H] & ¬[H]x))
4715            using 0 "&E" "∀E"(2) "≡E"(2) by blast
4716        qed(auto intro!: 0[THEN "&E"(1)] "cqt:2")
4717      next
4718        AOT_show x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4719          using 0 "&E"(1) by blast
4720      qed
4721      AOT_thus p (p & ¬p)
4722        using "block-paradox:2" "reductio-aa:1" by blast
4723    }
4724  qed
4725  ultimately AOT_have 𝒜p (p & ¬p)
4726    using "→E" by blast
4727  AOT_hence p 𝒜(p & ¬p)
4728    by (metis "Act-Basic:10" "intro-elim:3:a")
4729  then AOT_obtain p where 𝒜(p & ¬p)
4730    using "∃E"[rotated] by blast
4731  moreover AOT_have ¬𝒜(p & ¬p)
4732    using "non-contradiction"[THEN "RA[2]"]
4733    by (meson "Act-Sub:1" "¬¬I" "intro-elim:3:d")
4734  ultimately AOT_show p & ¬p for p
4735    by (metis "raa-cor:3")
4736qed
4737
4738AOT_act_theorem "block-paradox2:2":
4739  G ¬x [G]ιy (y = x & H (x[H] & ¬[H]x))]
4740proof(rule "∃I"(1))
4741  AOT_have 0: x p (p p)]
4742    by "cqt:2[lambda]"
4743  moreover AOT_have x x p (p p)]x
4744    apply (rule GEN)
4745    apply (rule "beta-C-cor:2"[THEN "→E", OF 0, THEN "∀E"(2), THEN "≡E"(2)])
4746    using "if-p-then-p" GEN by fast
4747  moreover AOT_have G (x [G]x  ¬x [G]ιy (y = x & H (x[H] & ¬[H]x))])
4748      using "block-paradox2:1" "∀I" by fast
4749  ultimately AOT_show ¬x x p (p p)]ιy (y = x & H (x[H] & ¬[H]x))]
4750    using "∀E"(1) "→E" by blast
4751qed("cqt:2[lambda]")
4752
4753AOT_theorem propositions: p (p  φ)
4754proof(rule "∃I"(1))
4755  AOT_show (φ  φ)
4756    by (simp add: RN "oth-class-taut:3:a")
4757next
4758  AOT_show φ
4759    by (simp add: "log-prop-prop:2")
4760qed
4761
4762AOT_theorem "pos-not-equiv-ne:1":
4763  (¬x1...∀xn ([F]x1...xn  [G]x1...xn))  F  G
4764proof (rule "→I")
4765  AOT_assume ¬x1...∀xn ([F]x1...xn  [G]x1...xn)
4766  AOT_hence ¬x1...∀xn ([F]x1...xn  [G]x1...xn)
4767    using "KBasic:11"[THEN "≡E"(2)] by blast
4768  AOT_hence ¬(F = G)
4769    using "id-rel-nec-equiv:1" "modus-tollens:1" by blast
4770  AOT_thus F  G
4771    using "=-infix"[THEN "dfI"] by blast
4772qed
4773
4774AOT_theorem "pos-not-equiv-ne:2": (¬(φ{F}  φ{G}))  F  G
4775proof (rule "→I")
4776  AOT_modally_strict {
4777    AOT_have ¬(φ{F}  φ{G})  ¬(F = G)
4778    proof (rule "→I"; rule "raa-cor:2")
4779      AOT_assume 1: F = G
4780      AOT_hence φ{F}  φ{G}
4781        using "l-identity"[axiom_inst, THEN "→E"] by blast
4782      moreover {
4783        AOT_have G = F
4784          using 1 id_sym by blast
4785        AOT_hence φ{G}  φ{F}
4786          using "l-identity"[axiom_inst, THEN "→E"] by blast
4787      }
4788      ultimately AOT_have φ{F}  φ{G}
4789        using "≡I" by blast
4790      moreover AOT_assume ¬(φ{F}  φ{G})
4791      ultimately AOT_show (φ{F}  φ{G}) & ¬(φ{F}  φ{G})
4792        using "&I" by blast
4793    qed
4794  }
4795  AOT_hence ¬(φ{F}  φ{G})  ¬(F = G)
4796    using "RM:2[prem]" by blast
4797  moreover AOT_assume ¬(φ{F}  φ{G})
4798  ultimately AOT_have 0: ¬(F = G) using "→E" by blast
4799  AOT_have (F  G)
4800    by (AOT_subst F  G ¬(F = G))
4801       (auto simp: "=-infix" "≡Df" 0)
4802  AOT_thus F  G
4803    using "id-nec2:3"[THEN "→E"] by blast
4804qed
4805
4806AOT_theorem "pos-not-equiv-ne:2[zero]": (¬(φ{p}  φ{q}))  p  q
4807proof (rule "→I")
4808  AOT_modally_strict {
4809    AOT_have ¬(φ{p}  φ{q})  ¬(p = q)
4810    proof (rule "→I"; rule "raa-cor:2")
4811      AOT_assume 1: p = q
4812      AOT_hence φ{p}  φ{q}
4813        using "l-identity"[axiom_inst, THEN "→E"] by blast
4814      moreover {
4815        AOT_have q = p
4816          using 1 id_sym by blast
4817        AOT_hence φ{q}  φ{p}
4818          using "l-identity"[axiom_inst, THEN "→E"] by blast
4819      }
4820      ultimately AOT_have φ{p}  φ{q}
4821        using "≡I" by blast
4822      moreover AOT_assume ¬(φ{p}  φ{q})
4823      ultimately AOT_show (φ{p}  φ{q}) & ¬(φ{p}  φ{q})
4824        using "&I" by blast
4825    qed
4826  }
4827  AOT_hence ¬(φ{p}  φ{q})  ¬(p = q)
4828    using "RM:2[prem]" by blast
4829  moreover AOT_assume ¬(φ{p}  φ{q})
4830  ultimately AOT_have 0: ¬(p = q) using "→E" by blast
4831  AOT_have (p  q)
4832    by (AOT_subst p  q ¬(p = q))
4833       (auto simp: 0 "=-infix" "≡Df")
4834  AOT_thus p  q
4835    using "id-nec2:3"[THEN "→E"] by blast
4836qed
4837
4838AOT_theorem "pos-not-equiv-ne:3":
4839  (¬x1...∀xn ([F]x1...xn  [G]x1...xn))  F  G
4840  using "→I" "pos-not-equiv-ne:1"[THEN "→E"] "T◇"[THEN "→E"] by blast
4841
4842AOT_theorem "pos-not-equiv-ne:4": (¬(φ{F}  φ{G}))  F  G
4843  using "→I" "pos-not-equiv-ne:2"[THEN "→E"] "T◇"[THEN "→E"] by blast
4844
4845AOT_theorem "pos-not-equiv-ne:4[zero]": (¬(φ{p}  φ{q}))  p  q
4846  using "→I" "pos-not-equiv-ne:2[zero]"[THEN "→E"]
4847        "T◇"[THEN "→E"] by blast
4848
4849AOT_define relation_negation :: "Π  Π" ("_-")
4850  "df-relation-negation": "[F]- =df x1...xn ¬[F]x1...xn]"
4851
4852nonterminal φneg
4853syntax "" :: "φneg  τ" ("_")
4854syntax "" :: "φneg  φ" ("'(_')")
4855
4856AOT_define relation_negation_0 :: φ  φneg ("'(_')-")
4857  "df-relation-negation[zero]": "(p)- =df  ¬p]"
4858
4859AOT_theorem "rel-neg-T:1": x1...xn ¬[Π]x1...xn]
4860  by "cqt:2[lambda]"
4861
4862AOT_theorem "rel-neg-T:1[zero]":  ¬φ]
4863  using "cqt:2[lambda0]"[axiom_inst] by blast
4864
4865AOT_theorem "rel-neg-T:2": [Π]- = x1...xn ¬[Π]x1...xn]
4866  using "=I"(1)[OF "rel-neg-T:1"]
4867  by (rule "=dfI"(1)[OF "df-relation-negation", OF "rel-neg-T:1"])
4868
4869AOT_theorem "rel-neg-T:2[zero]": (φ)- =  ¬φ]
4870  using "=I"(1)[OF "rel-neg-T:1[zero]"]
4871  by (rule "=dfI"(1)[OF "df-relation-negation[zero]", OF "rel-neg-T:1[zero]"])
4872
4873AOT_theorem "rel-neg-T:3": [Π]-
4874  using "=dfI"(1)[OF "df-relation-negation", OF "rel-neg-T:1"]
4875        "rel-neg-T:1" by blast
4876
4877AOT_theorem "rel-neg-T:3[zero]": (φ)-
4878  using "log-prop-prop:2" by blast
4879
4880AOT_theorem "thm-relation-negation:1": [F]-x1...xn  ¬[F]x1...xn
4881proof -
4882  AOT_have [F]-x1...xn  x1...xn ¬[F]x1...xn]x1...xn
4883    using "rule=E"[rotated, OF "rel-neg-T:2"]
4884          "rule=E"[rotated, OF "rel-neg-T:2"[THEN id_sym]]
4885          "→I" "≡I" by fast
4886  also AOT_have ...  ¬[F]x1...xn
4887    using "beta-C-meta"[THEN "→E", OF "rel-neg-T:1"] by fast
4888  finally show ?thesis.
4889qed
4890
4891AOT_theorem "thm-relation-negation:2": ¬[F]-x1...xn  [F]x1...xn
4892  apply (AOT_subst [F]x1...xn ¬¬[F]x1...xn)
4893   apply (simp add: "oth-class-taut:3:b")
4894  apply (rule "oth-class-taut:4:b"[THEN "≡E"(1)])
4895  using "thm-relation-negation:1".
4896
4897AOT_theorem "thm-relation-negation:3": ((p)-)  ¬p
4898proof -
4899  AOT_have (p)- =  ¬p] using "rel-neg-T:2[zero]" by blast
4900  AOT_hence ((p)-)   ¬p]
4901    using "df-relation-negation[zero]" "log-prop-prop:2"
4902          "oth-class-taut:3:a" "rule-id-df:2:a" by blast
4903  also AOT_have  ¬p]  ¬p
4904    by (simp add: "propositions-lemma:2")
4905  finally show ?thesis.
4906qed
4907
4908AOT_theorem "thm-relation-negation:4": (¬((p)-))  p
4909  using "thm-relation-negation:3"[THEN "≡E"(1)]
4910        "thm-relation-negation:3"[THEN "≡E"(2)]
4911        "≡I" "→I" RAA by metis
4912
4913AOT_theorem "thm-relation-negation:5": [F]  [F]-
4914proof -
4915  AOT_have ¬([F] = [F]-)
4916  proof (rule RAA(2))
4917    AOT_show [F]x1...xn  [F]x1...xn for x1xn
4918      using "if-p-then-p".
4919  next
4920    AOT_assume [F] = [F]-
4921    AOT_hence [F]- = [F] using id_sym by blast
4922    AOT_hence [F]x1...xn  ¬[F]x1...xn for x1xn
4923      using "rule=E" "thm-relation-negation:1" by fast
4924    AOT_thus ¬([F]x1...xn  [F]x1...xn) for x1xn
4925      using "≡E" RAA by metis
4926  qed
4927  thus ?thesis
4928    using "dfI" "=-infix" by blast
4929qed
4930
4931AOT_theorem "thm-relation-negation:6": p  (p)-
4932proof -
4933  AOT_have ¬(p = (p)-)
4934  proof (rule RAA(2))
4935    AOT_show p  p
4936      using "if-p-then-p".
4937  next
4938    AOT_assume p = (p)-
4939    AOT_hence (p)- = p using id_sym by blast
4940    AOT_hence p  ¬p
4941      using "rule=E" "thm-relation-negation:3" by fast
4942    AOT_thus ¬(p  p)
4943      using "≡E" RAA by metis
4944  qed
4945  thus ?thesis
4946    using "dfI" "=-infix" by blast
4947qed
4948
4949AOT_theorem "thm-relation-negation:7": (p)- = (¬p)
4950  apply (rule "df-relation-negation[zero]"[THEN "=dfE"(1)])
4951  using "cqt:2[lambda0]"[axiom_inst] "rel-neg-T:2[zero]"
4952        "propositions-lemma:1" id_trans by blast+
4953
4954AOT_theorem "thm-relation-negation:8": p = q  (¬p) = (¬q)
4955proof(rule "→I")
4956  AOT_assume p = q
4957  moreover AOT_have (¬p) using "log-prop-prop:2".
4958  moreover AOT_have (¬p) = (¬p) using calculation(2) "=I" by blast
4959  ultimately AOT_show (¬p) = (¬q)
4960    using "rule=E" by fast
4961qed
4962
4963AOT_theorem "thm-relation-negation:9": p = q  (p)- = (q)-
4964proof(rule "→I")
4965  AOT_assume p = q
4966  AOT_hence (¬p) = (¬q) using "thm-relation-negation:8" "→E" by blast
4967  AOT_thus (p)- = (q)-
4968    using "thm-relation-negation:7" id_sym id_trans by metis
4969qed
4970
4971AOT_define Necessary :: Π  φ ("Necessary'(_')")
4972  "contingent-properties:1":
4973  Necessary([F]) df x1...∀xn [F]x1...xn
4974
4975AOT_define Necessary0 :: φ  φ ("Necessary0'(_')")
4976  "contingent-properties:1[zero]":
4977  Necessary0(p) df p
4978
4979AOT_define Impossible :: Π  φ ("Impossible'(_')")
4980  "contingent-properties:2":
4981  Impossible([F]) df F & x1...∀xn ¬[F]x1...xn
4982
4983AOT_define Impossible0 :: φ  φ ("Impossible0'(_')")
4984  "contingent-properties:2[zero]":
4985  Impossible0(p) df ¬p
4986
4987AOT_define NonContingent :: Π  φ ("NonContingent'(_')")
4988  "contingent-properties:3":
4989  NonContingent([F]) df Necessary([F])  Impossible([F])
4990
4991AOT_define NonContingent0 :: φ  φ ("NonContingent0'(_')")
4992  "contingent-properties:3[zero]":
4993  NonContingent0(p) df Necessary0(p)  Impossible0(p)
4994
4995AOT_define Contingent :: Π  φ ("Contingent'(_')")
4996  "contingent-properties:4":
4997  Contingent([F]) df F & ¬(Necessary([F])  Impossible([F]))
4998
4999AOT_define Contingent0 :: φ  φ ("Contingent0'(_')")
5000  "contingent-properties:4[zero]":
5001  Contingent0(p) df ¬(Necessary0(p)  Impossible0(p))
5002
5003
5004AOT_theorem "thm-cont-prop:1": NonContingent([F])  NonContingent([F]-)
5005proof (rule "≡I"; rule "→I")
5006  AOT_assume NonContingent([F])
5007  AOT_hence Necessary([F])  Impossible([F])
5008    using "dfE"[OF "contingent-properties:3"] by blast
5009  moreover {
5010    AOT_assume Necessary([F])
5011    AOT_hence (x1...∀xn [F]x1...xn)
5012      using "dfE"[OF "contingent-properties:1"] by blast
5013    moreover AOT_modally_strict {
5014      AOT_assume x1...∀xn [F]x1...xn
5015      AOT_hence [F]x1...xn for x1xn using "∀E" by blast
5016      AOT_hence ¬[F]-x1...xn for x1xn
5017        by (meson "≡E"(6) "oth-class-taut:3:a"
5018                  "thm-relation-negation:2" "≡E"(1))
5019      AOT_hence x1...∀xn ¬[F]-x1...xn using "∀I" by fast
5020    }
5021    ultimately AOT_have (x1...∀xn ¬[F]-x1...xn)
5022      using "RN[prem]"[where Γ="{«x1...∀xn [F]x1...xn»}", simplified] by blast
5023    AOT_hence Impossible([F]-)
5024      using "≡Df"[OF "contingent-properties:2", THEN "≡S"(1),
5025                  OF "rel-neg-T:3", THEN "≡E"(2)]
5026      by blast
5027  }
5028  moreover {
5029    AOT_assume Impossible([F])
5030    AOT_hence (x1...∀xn ¬[F]x1...xn)
5031      using "≡Df"[OF "contingent-properties:2", THEN "≡S"(1),
5032                  OF "cqt:2[const_var]"[axiom_inst], THEN "≡E"(1)]
5033      by blast
5034    moreover AOT_modally_strict {
5035      AOT_assume x1...∀xn ¬[F]x1...xn
5036      AOT_hence ¬[F]x1...xn for x1xn using "∀E" by blast
5037      AOT_hence [F]-x1...xn for x1xn
5038        by (meson "≡E"(6) "oth-class-taut:3:a"
5039                  "thm-relation-negation:1" "≡E"(1))
5040      AOT_hence x1...∀xn [F]-x1...xn using "∀I" by fast
5041    }
5042    ultimately AOT_have (x1...∀xn [F]-x1...xn)
5043      using "RN[prem]"[where Γ="{«x1...∀xn ¬[F]x1...xn»}"] by blast
5044    AOT_hence Necessary([F]-)
5045      using "dfI"[OF "contingent-properties:1"] by blast
5046  }
5047  ultimately AOT_have Necessary([F]-)  Impossible([F]-)
5048    using "∨E"(1) "∨I" "→I" by metis
5049  AOT_thus NonContingent([F]-)
5050    using "dfI"[OF "contingent-properties:3"] by blast
5051next
5052  AOT_assume NonContingent([F]-)
5053  AOT_hence Necessary([F]-)  Impossible([F]-)
5054    using "dfE"[OF "contingent-properties:3"] by blast
5055  moreover {
5056    AOT_assume Necessary([F]-)
5057    AOT_hence (x1...∀xn [F]-x1...xn)
5058      using "dfE"[OF "contingent-properties:1"] by blast
5059    moreover AOT_modally_strict {
5060      AOT_assume x1...∀xn [F]-x1...xn
5061      AOT_hence [F]-x1...xn for x1xn using "∀E" by blast
5062      AOT_hence ¬[F]x1...xn for x1xn
5063        by (meson "≡E"(6) "oth-class-taut:3:a"
5064                  "thm-relation-negation:1" "≡E"(2))
5065      AOT_hence x1...∀xn ¬[F]x1...xn using "∀I" by fast
5066    }
5067    ultimately AOT_have x1...∀xn ¬[F]x1...xn
5068      using "RN[prem]"[where Γ="{«x1...∀xn [F]-x1...xn»}"] by blast
5069    AOT_hence Impossible([F])
5070      using "≡Df"[OF "contingent-properties:2", THEN "≡S"(1),
5071                  OF "cqt:2[const_var]"[axiom_inst], THEN "≡E"(2)]
5072      by blast
5073  }
5074  moreover {
5075    AOT_assume Impossible([F]-)
5076    AOT_hence (x1...∀xn ¬[F]-x1...xn)
5077      using "≡Df"[OF "contingent-properties:2", THEN "≡S"(1),
5078                  OF "rel-neg-T:3", THEN "≡E"(1)]
5079      by blast
5080    moreover AOT_modally_strict {
5081      AOT_assume x1...∀xn ¬[F]-x1...xn
5082      AOT_hence ¬[F]-x1...xn for x1xn using "∀E" by blast
5083      AOT_hence [F]x1...xn for x1xn 
5084        using "thm-relation-negation:1"[THEN
5085                "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(1)]
5086              "useful-tautologies:1"[THEN "→E"] by blast
5087      AOT_hence x1...∀xn [F]x1...xn using "∀I" by fast
5088    }
5089    ultimately AOT_have (x1...∀xn [F]x1...xn)
5090      using "RN[prem]"[where Γ="{«x1...∀xn ¬[F]-x1...xn»}"] by blast
5091    AOT_hence Necessary([F])
5092      using "dfI"[OF "contingent-properties:1"] by blast
5093  }
5094  ultimately AOT_have Necessary([F])  Impossible([F])
5095    using "∨E"(1) "∨I" "→I" by metis
5096  AOT_thus NonContingent([F])
5097    using "dfI"[OF "contingent-properties:3"] by blast
5098qed
5099
5100AOT_theorem "thm-cont-prop:2": Contingent([F])  x [F]x & x ¬[F]x
5101proof -
5102  AOT_have Contingent([F])  ¬(Necessary([F])  Impossible([F]))
5103    using "contingent-properties:4"[THEN "≡Df", THEN "≡S"(1),
5104                                    OF "cqt:2[const_var]"[axiom_inst]]
5105    by blast
5106  also AOT_have ...  ¬Necessary([F]) & ¬Impossible([F])
5107    using "oth-class-taut:5:d" by fastforce
5108  also AOT_have ...  ¬Impossible([F]) & ¬Necessary([F])
5109    by (simp add: "Commutativity of &")
5110  also AOT_have ...  x [F]x & ¬Necessary([F])
5111  proof (rule "oth-class-taut:4:e"[THEN "→E"])
5112    AOT_have ¬Impossible([F])  ¬¬ x [F]x
5113      apply (rule "oth-class-taut:4:b"[THEN "≡E"(1)])
5114      apply (AOT_subst x [F]x ¬ x ¬[F]x)
5115       apply (simp add: "conventions:4" "≡Df")
5116      apply (AOT_subst (reverse) ¬¬x ¬[F]x x ¬[F]x)
5117       apply (simp add: "oth-class-taut:3:b")
5118      using "contingent-properties:2"[THEN "≡Df", THEN "≡S"(1),
5119                                      OF "cqt:2[const_var]"[axiom_inst]]
5120      by blast
5121    also AOT_have ...  x [F]x
5122      using "conventions:5"[THEN "≡Df", symmetric] by blast
5123    finally AOT_show ¬Impossible([F])  x [F]x .
5124  qed
5125  also AOT_have ...  x [F]x & x ¬[F]x
5126  proof (rule "oth-class-taut:4:f"[THEN "→E"])
5127    AOT_have ¬Necessary([F])  ¬¬x ¬[F]x
5128      apply (rule "oth-class-taut:4:b"[THEN "≡E"(1)])
5129      apply (AOT_subst x ¬[F]x ¬ x ¬¬[F]x)
5130       apply (simp add: "conventions:4" "≡Df")
5131      apply (AOT_subst (reverse) ¬¬[F]x [F]x for: x)
5132       apply (simp add: "oth-class-taut:3:b")
5133      apply (AOT_subst (reverse) ¬¬x [F]x x [F]x)
5134      by (auto simp: "oth-class-taut:3:b" "contingent-properties:1" "≡Df")
5135    also AOT_have ...  x ¬[F]x
5136      using "conventions:5"[THEN "≡Df", symmetric] by blast
5137    finally AOT_show ¬Necessary([F])  x ¬[F]x.
5138  qed
5139  finally show ?thesis.
5140qed
5141
5142AOT_theorem "thm-cont-prop:3":
5143  Contingent([F])  Contingent([F]-) for F::<κ> AOT_var
5144proof -
5145  {
5146    fix Π :: <κ>
5147    AOT_assume Π
5148    moreover AOT_have F (Contingent([F])  x [F]x & x ¬[F]x)
5149      using "thm-cont-prop:2" GEN by fast
5150    ultimately  AOT_have Contingent([Π])  x [Π]x & x ¬[Π]x
5151      using "thm-cont-prop:2" "∀E" by fast
5152  } note 1 = this
5153  AOT_have Contingent([F])  x [F]x & x ¬[F]x
5154    using "thm-cont-prop:2" by blast
5155  also AOT_have ...  x ¬[F]x & x [F]x
5156    by (simp add: "Commutativity of &")
5157  also AOT_have ...  x [F]-x & x [F]x
5158    by (AOT_subst [F]-x ¬[F]x for: x)
5159       (auto simp: "thm-relation-negation:1" "oth-class-taut:3:a")
5160  also AOT_have ...  x [F]-x & x ¬[F]-x
5161    by (AOT_subst (reverse) [F]x ¬[F]-x for: x)
5162       (auto simp: "thm-relation-negation:2" "oth-class-taut:3:a")
5163  also AOT_have ...  Contingent([F]-)
5164    using 1[OF "rel-neg-T:3", symmetric] by blast
5165  finally show ?thesis.
5166qed
5167
5168AOT_define concrete_if_concrete :: Π ("L")
5169  L_def: L =df x E!x  E!x]
5170
5171AOT_theorem "thm-noncont-e-e:1": Necessary(L)
5172proof -
5173  AOT_modally_strict {
5174    fix x
5175    AOT_have x E!x  E!x] by "cqt:2[lambda]"
5176    moreover AOT_have x using "cqt:2[const_var]"[axiom_inst] by blast
5177    moreover AOT_have E!x  E!x using "if-p-then-p" by blast
5178    ultimately AOT_have x E!x  E!x]x
5179      using "β←C" by blast
5180  }
5181  AOT_hence 0: x x E!x  E!x]x
5182    using RN GEN by blast
5183  show ?thesis
5184    apply (rule "=dfI"(2)[OF L_def])
5185     apply "cqt:2[lambda]"
5186    by (rule "contingent-properties:1"[THEN "dfI", OF 0])
5187qed
5188
5189AOT_theorem "thm-noncont-e-e:2": Impossible([L]-)
5190proof -
5191  AOT_modally_strict {
5192    fix x
5193
5194    AOT_have 0: F (¬[F]-x  [F]x)
5195      using "thm-relation-negation:2" GEN by fast
5196    AOT_have ¬x E!x  E!x]-x  x E!x  E!x]x
5197      by (rule 0[THEN "∀E"(1)]) "cqt:2[lambda]"
5198    moreover {
5199      AOT_have x E!x  E!x] by "cqt:2[lambda]"
5200      moreover AOT_have x using "cqt:2[const_var]"[axiom_inst] by blast
5201      moreover AOT_have E!x  E!x using "if-p-then-p" by blast
5202      ultimately AOT_have x E!x  E!x]x
5203        using "β←C" by blast
5204    }
5205    ultimately AOT_have ¬x E!x  E!x]-x
5206      using "≡E" by blast
5207  }
5208  AOT_hence 0: x ¬x E!x  E!x]-x
5209    using RN GEN by fast
5210  show ?thesis
5211    apply (rule "=dfI"(2)[OF L_def])
5212     apply "cqt:2[lambda]"
5213    apply (rule "contingent-properties:2"[THEN "dfI"]; rule "&I")
5214     using "rel-neg-T:3"
5215     apply blast
5216    using 0
5217    by blast
5218qed
5219
5220AOT_theorem "thm-noncont-e-e:3": NonContingent(L)
5221  using "thm-noncont-e-e:1"
5222  by (rule "contingent-properties:3"[THEN "dfI", OF "∨I"(1)])
5223
5224AOT_theorem "thm-noncont-e-e:4": NonContingent([L]-)
5225proof -
5226  AOT_have 0: F (NonContingent([F])  NonContingent([F]-))
5227    using "thm-cont-prop:1" "∀I" by fast
5228  moreover AOT_have 1: L
5229    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
5230  AOT_show NonContingent([L]-)
5231    using "∀E"(1)[OF 0, OF 1, THEN "≡E"(1), OF "thm-noncont-e-e:3"] by blast
5232qed
5233
5234AOT_theorem "thm-noncont-e-e:5":
5235  F G (F  «G::<κ>» & NonContingent([F]) & NonContingent([G]))
5236proof (rule "∃I")+
5237  {
5238    AOT_have F [F]  [F]-
5239      using "thm-relation-negation:5" GEN by fast
5240    moreover AOT_have L
5241      by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
5242    ultimately AOT_have L  [L]-
5243      using "∀E" by blast
5244  }
5245  AOT_thus L  [L]- & NonContingent(L) & NonContingent([L]-)
5246    using "thm-noncont-e-e:3" "thm-noncont-e-e:4" "&I" by metis
5247next
5248  AOT_show [L]-
5249    using "rel-neg-T:3" by blast
5250next
5251  AOT_show L
5252      by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
5253qed
5254
5255AOT_theorem "lem-cont-e:1": x ([F]x & ¬[F]x)  x (¬[F]x & [F]x)
5256proof -
5257  AOT_have x ([F]x & ¬[F]x)  x ([F]x & ¬[F]x)
5258    using "BF◇" "CBF◇" "≡I" by blast
5259  also AOT_have   x ([F]x &  ¬[F]x)
5260    by (AOT_subst ([F]x & ¬[F]x) [F]x &  ¬[F]x for: x)
5261       (auto simp: "S5Basic:11" "cqt-further:7")
5262  also AOT_have   x (¬[F]x & [F]x)
5263    by (AOT_subst ¬[F]x & [F]x  [F]x & ¬[F]x for: x)
5264       (auto simp: "Commutativity of &" "cqt-further:7")
5265  also AOT_have   x (¬[F]x & [F]x)
5266    by (AOT_subst (¬[F]x & [F]x) ¬[F]x & [F]x for: x)
5267       (auto simp: "S5Basic:11" "oth-class-taut:3:a")
5268  also AOT_have   x (¬[F]x & [F]x)
5269    using "BF◇" "CBF◇" "≡I" by fast
5270  finally show ?thesis.
5271qed
5272
5273AOT_theorem "lem-cont-e:2":
5274  x ([F]x & ¬[F]x)  x ([F]-x & ¬[F]-x)
5275proof -
5276  AOT_have x ([F]x & ¬[F]x)  x (¬[F]x & [F]x)
5277    using "lem-cont-e:1".
5278  also AOT_have   x ([F]-x & ¬[F]-x)
5279    apply (AOT_subst ¬[F]-x [F]x for: x)
5280     apply (simp add: "thm-relation-negation:2")
5281    apply (AOT_subst [F]-x ¬[F]x for: x)
5282     apply (simp add: "thm-relation-negation:1")
5283    by (simp add: "oth-class-taut:3:a")
5284  finally show ?thesis.
5285qed
5286
5287AOT_theorem "thm-cont-e:1": x (E!x & ¬E!x)
5288proof (rule "CBF◇"[THEN "→E"])
5289  AOT_have x (E!x & ¬𝒜E!x)
5290    using "qml:4"[axiom_inst] "BF◇"[THEN "→E"] by blast
5291  then AOT_obtain a where (E!a & ¬𝒜E!a)
5292    using "∃E"[rotated] by blast
5293  AOT_hence θ: E!a & ¬𝒜E!a
5294    using "KBasic2:3"[THEN "→E"] by blast
5295  AOT_have ξ: E!a & 𝒜¬E!a
5296    by (AOT_subst  𝒜¬E!a ¬𝒜E!a)
5297       (auto simp: "logic-actual-nec:1"[axiom_inst] θ)
5298  AOT_have ζ: E!a & 𝒜¬E!a
5299    by (AOT_subst 𝒜¬E!a 𝒜¬E!a)
5300       (auto simp add: "Act-Sub:4" ξ)
5301  AOT_hence E!a & ¬E!a
5302    using "&E" "&I" "Act-Sub:3"[THEN "→E"] by blast
5303  AOT_hence (E!a & ¬E!a)
5304    using "S5Basic:11"[THEN "≡E"(2)] by simp
5305  AOT_thus x (E!x & ¬E!x)
5306    using "∃I"(2) by fast
5307qed
5308
5309AOT_theorem "thm-cont-e:2": x (¬E!x & E!x)
5310proof -
5311  AOT_have F (x ([F]x & ¬[F]x)  x (¬[F]x & [F]x))
5312    using "lem-cont-e:1" GEN by fast
5313  AOT_hence (x (E!x & ¬E!x)  x (¬E!x & E!x))
5314    using "∀E"(2) by blast
5315  thus ?thesis using "thm-cont-e:1" "≡E" by blast
5316qed
5317
5318AOT_theorem "thm-cont-e:3": x E!x
5319proof (rule "CBF◇"[THEN "→E"])
5320  AOT_obtain a where (E!a & ¬E!a)
5321    using "∃E"[rotated, OF "thm-cont-e:1"[THEN "BF◇"[THEN "→E"]]] by blast
5322  AOT_hence E!a
5323    using "KBasic2:3"[THEN "→E", THEN "&E"(1)] by blast
5324  AOT_thus x E!x using "∃I" by fast
5325qed
5326
5327AOT_theorem "thm-cont-e:4": x ¬E!x
5328proof (rule "CBF◇"[THEN "→E"])
5329  AOT_obtain a where (E!a & ¬E!a)
5330    using "∃E"[rotated, OF "thm-cont-e:1"[THEN "BF◇"[THEN "→E"]]] by blast
5331  AOT_hence ¬E!a
5332    using "KBasic2:3"[THEN "→E", THEN "&E"(2)] by blast
5333  AOT_hence ¬E!a
5334    using "4◇"[THEN "→E"] by blast
5335  AOT_thus x ¬E!x using "∃I" by fast
5336qed
5337
5338AOT_theorem "thm-cont-e:5": Contingent([E!])
5339proof -
5340  AOT_have F (Contingent([F])  x [F]x & x ¬[F]x)
5341    using "thm-cont-prop:2" GEN by fast
5342  AOT_hence Contingent([E!])  x E!x & x ¬E!x
5343    using "∀E"(2) by blast
5344  thus ?thesis
5345    using "thm-cont-e:3" "thm-cont-e:4" "≡E"(2) "&I" by blast
5346qed
5347
5348AOT_theorem "thm-cont-e:6": Contingent([E!]-)
5349proof -
5350  AOT_have F (Contingent([«F::<κ>»])  Contingent([F]-))
5351    using "thm-cont-prop:3" GEN by fast
5352  AOT_hence Contingent([E!])  Contingent([E!]-)
5353    using "∀E"(2) by fast
5354  thus ?thesis using "thm-cont-e:5" "≡E" by blast
5355qed
5356
5357AOT_theorem "thm-cont-e:7":
5358  FG (Contingent([«F::<κ>»]) & Contingent([G]) & F  G)
5359proof (rule "∃I")+
5360  AOT_have F [«F::<κ>»]  [F]-
5361    using "thm-relation-negation:5" GEN by fast
5362  AOT_hence [E!]  [E!]-
5363    using "∀E" by fast
5364  AOT_thus Contingent([E!]) & Contingent([E!]-) & [E!]  [E!]-
5365    using "thm-cont-e:5" "thm-cont-e:6" "&I" by metis
5366next
5367  AOT_show E!-
5368    by (fact AOT)
5369qed("cqt:2")
5370
5371AOT_theorem "property-facts:1":
5372  NonContingent([F])  ¬G (Contingent([G]) & G = F)
5373proof (rule "→I"; rule "raa-cor:2")
5374  AOT_assume NonContingent([F])
5375  AOT_hence 1: Necessary([F])  Impossible([F])
5376    using "contingent-properties:3"[THEN "dfE"] by blast
5377  AOT_assume G (Contingent([G]) & G = F)
5378  then AOT_obtain G where Contingent([G]) & G = F
5379    using "∃E"[rotated] by blast
5380  AOT_hence Contingent([F]) using "rule=E" "&E" by blast
5381  AOT_hence ¬(Necessary([F])  Impossible([F]))
5382    using "contingent-properties:4"[THEN "≡Df", THEN "≡S"(1),
5383            OF "cqt:2[const_var]"[axiom_inst], THEN "≡E"(1)] by blast
5384  AOT_thus (Necessary([F])  Impossible([F])) &
5385            ¬(Necessary([F])  Impossible([F]))
5386    using 1 "&I" by blast
5387qed
5388
5389AOT_theorem "property-facts:2":
5390  Contingent([F])  ¬G (NonContingent([G]) & G = F)
5391proof (rule "→I"; rule "raa-cor:2")
5392  AOT_assume Contingent([F])
5393  AOT_hence 1: ¬(Necessary([F])  Impossible([F]))
5394    using "contingent-properties:4"[THEN "≡Df", THEN "≡S"(1),
5395            OF "cqt:2[const_var]"[axiom_inst], THEN "≡E"(1)] by blast
5396  AOT_assume G (NonContingent([G]) & G = F)
5397  then AOT_obtain G where NonContingent([G]) & G = F
5398    using "∃E"[rotated] by blast
5399  AOT_hence NonContingent([F])
5400    using "rule=E" "&E" by blast
5401  AOT_hence Necessary([F])  Impossible([F])
5402    using "contingent-properties:3"[THEN "dfE"] by blast
5403  AOT_thus (Necessary([F])  Impossible([F])) &
5404            ¬(Necessary([F])  Impossible([F]))
5405    using 1 "&I" by blast
5406qed
5407
5408AOT_theorem "property-facts:3":
5409  L  [L]- & L  E! & L  E!- & [L]-  [E!]- & E!  [E!]-
5410proof -
5411  AOT_have noneqI: Π  Π' if φ{Π} and ¬φ{Π'} for φ and Π Π' :: <κ>
5412    apply (rule "=-infix"[THEN "dfI"]; rule "raa-cor:2")
5413    using "rule=E"[where φ=φ and τ=Π and σ = Π'] that "&I" by blast
5414  AOT_have contingent_denotes: Π if Contingent([Π]) for Π :: <κ>
5415    using that "contingent-properties:4"[THEN "dfE", THEN "&E"(1)] by blast
5416  AOT_have not_noncontingent_if_contingent:
5417    ¬NonContingent([Π]) if Contingent([Π]) for Π :: <κ>
5418  proof(rule RAA(2))
5419    AOT_show ¬(Necessary([Π])  Impossible([Π]))
5420      using that "contingent-properties:4"[THEN "≡Df", THEN "≡S"(1),
5421                    OF contingent_denotes[OF that], THEN "≡E"(1)]
5422      by blast
5423  next
5424    AOT_assume NonContingent([Π])
5425    AOT_thus Necessary([Π])  Impossible([Π])
5426      using "contingent-properties:3"[THEN "dfE"] by blast
5427  qed
5428
5429  show ?thesis
5430  proof (safe intro!: "&I")
5431    AOT_show L  [L]-
5432      apply (rule "=dfI"(2)[OF L_def])
5433       apply "cqt:2[lambda]"
5434      apply (rule "∀E"(1)[where φ="λ Π . «Π  [Π]-»"])
5435       apply (rule GEN) apply (fact AOT)
5436      by "cqt:2[lambda]"
5437  next
5438    AOT_show L  E!
5439      apply (rule noneqI)
5440      using "thm-noncont-e-e:3"
5441            not_noncontingent_if_contingent[OF "thm-cont-e:5"]
5442      by auto
5443  next
5444    AOT_show L  E!-
5445      apply (rule noneqI)
5446      using "thm-noncont-e-e:3" apply fast
5447      apply (rule not_noncontingent_if_contingent)
5448      apply (rule "∀E"(1)[
5449            where φ="λ Π . «Contingent([Π])  Contingent([Π]-)»",
5450            rotated, OF contingent_denotes, THEN "≡E"(1), rotated])
5451      using "thm-cont-prop:3" GEN apply fast
5452      using "thm-cont-e:5" by fast+
5453  next
5454    AOT_show [L]-  E!-
5455      apply (rule noneqI)
5456      using "thm-noncont-e-e:4" apply fast
5457      apply (rule not_noncontingent_if_contingent)
5458      apply (rule "∀E"(1)[
5459            where φ="λ Π . «Contingent([Π])  Contingent([Π]-)»",
5460            rotated, OF contingent_denotes, THEN "≡E"(1), rotated])
5461      using "thm-cont-prop:3" GEN apply fast
5462      using "thm-cont-e:5" by fast+
5463  next
5464    AOT_show E!  E!-
5465      apply (rule "=dfI"(2)[OF L_def])
5466       apply "cqt:2[lambda]"
5467      apply (rule "∀E"(1)[where φ="λ Π . «Π  [Π]-»"])
5468       apply (rule GEN) apply (fact AOT)
5469      by "cqt:2"
5470  qed
5471qed
5472
5473AOT_theorem "thm-cont-propos:1":
5474  NonContingent0(p)  NonContingent0(((p)-))
5475proof(rule "≡I"; rule "→I")
5476  AOT_assume NonContingent0(p)
5477  AOT_hence Necessary0(p)  Impossible0(p)
5478    using "contingent-properties:3[zero]"[THEN "dfE"] by blast
5479  moreover {
5480    AOT_assume Necessary0(p)
5481    AOT_hence 1: p
5482      using "contingent-properties:1[zero]"[THEN "dfE"] by blast
5483    AOT_have ¬((p)-)
5484      by (AOT_subst ¬((p)-) p)
5485         (auto simp add: 1 "thm-relation-negation:4")
5486    AOT_hence Impossible0(((p)-))
5487      by (rule "contingent-properties:2[zero]"[THEN "dfI"])
5488  }
5489  moreover {
5490    AOT_assume Impossible0(p)
5491    AOT_hence 1: ¬p
5492      by (rule "contingent-properties:2[zero]"[THEN "dfE"])
5493    AOT_have ((p)-)
5494      by (AOT_subst ((p)-) ¬p) 
5495         (auto simp: 1 "thm-relation-negation:3")
5496    AOT_hence Necessary0(((p)-))
5497      by (rule "contingent-properties:1[zero]"[THEN "dfI"])
5498  }
5499  ultimately AOT_have Necessary0(((p)-))  Impossible0(((p)-))
5500    using "∨E"(1) "∨I" "→I" by metis
5501  AOT_thus NonContingent0(((p)-))
5502    using "contingent-properties:3[zero]"[THEN "dfI"] by blast
5503next
5504  AOT_assume NonContingent0(((p)-))
5505  AOT_hence Necessary0(((p)-))  Impossible0(((p)-))
5506    using "contingent-properties:3[zero]"[THEN "dfE"] by blast
5507  moreover {
5508    AOT_assume Impossible0(((p)-))
5509    AOT_hence 1: ¬((p)-)
5510      by (rule "contingent-properties:2[zero]"[THEN "dfE"])
5511    AOT_have p
5512      by (AOT_subst (reverse) p ¬((p)-))
5513         (auto simp: 1 "thm-relation-negation:4")
5514    AOT_hence Necessary0(p)
5515      using "contingent-properties:1[zero]"[THEN "dfI"] by blast
5516  }
5517  moreover {
5518    AOT_assume Necessary0(((p)-))
5519    AOT_hence 1: ((p)-)
5520      by (rule "contingent-properties:1[zero]"[THEN "dfE"])
5521    AOT_have ¬p
5522      by (AOT_subst (reverse) ¬p ((p)-))
5523         (auto simp: 1 "thm-relation-negation:3")
5524    AOT_hence Impossible0(p)
5525      by (rule "contingent-properties:2[zero]"[THEN "dfI"])
5526  }
5527  ultimately AOT_have Necessary0(p)  Impossible0(p)
5528    using "∨E"(1) "∨I" "→I" by metis
5529  AOT_thus NonContingent0(p)
5530    using "contingent-properties:3[zero]"[THEN "dfI"] by blast
5531qed
5532
5533AOT_theorem "thm-cont-propos:2": Contingent0(φ)  φ & ¬φ
5534proof -
5535  AOT_have Contingent0(φ)  ¬(Necessary0(φ)  Impossible0(φ))
5536    using "contingent-properties:4[zero]"[THEN "≡Df"] by simp
5537  also AOT_have   ¬Necessary0(φ) & ¬Impossible0(φ)
5538    by (fact AOT)
5539  also AOT_have   ¬Impossible0(φ) & ¬Necessary0(φ)
5540    by (fact AOT)
5541  also AOT_have   φ & ¬φ
5542    apply (AOT_subst φ ¬¬φ)
5543     apply (simp add: "conventions:5" "≡Df")
5544    apply (AOT_subst Impossible0(φ) ¬φ)
5545     apply (simp add: "contingent-properties:2[zero]" "≡Df")
5546    apply (AOT_subst (reverse) ¬φ ¬φ)
5547     apply (simp add: "KBasic:11")
5548    apply (AOT_subst Necessary0(φ) φ)
5549     apply (simp add: "contingent-properties:1[zero]" "≡Df")
5550    by (simp add: "oth-class-taut:3:a")
5551  finally show ?thesis.
5552qed
5553
5554AOT_theorem "thm-cont-propos:3": Contingent0(p)  Contingent0(((p)-))
5555proof -
5556  AOT_have Contingent0(p)  p & ¬p using "thm-cont-propos:2".
5557  also AOT_have   ¬p & p by (fact AOT)
5558  also AOT_have   ((p)-) & p
5559    by (AOT_subst ((p)-) ¬p)
5560       (auto simp: "thm-relation-negation:3" "oth-class-taut:3:a")
5561  also AOT_have   ((p)-) & ¬((p)-)
5562    by (AOT_subst ¬((p)-) p)
5563       (auto simp: "thm-relation-negation:4" "oth-class-taut:3:a")
5564  also AOT_have   Contingent0(((p)-))
5565    using "thm-cont-propos:2"[symmetric] by blast
5566  finally show ?thesis.
5567qed
5568
5569AOT_define noncontingent_prop :: φ ("p0")
5570  p0_def: "(p0) =df (x (E!x  E!x))"
5571
5572AOT_theorem "thm-noncont-propos:1":  Necessary0((p0))
5573proof(rule "contingent-properties:1[zero]"[THEN "dfI"])
5574  AOT_show (p0)
5575    apply (rule "=dfI"(2)[OF p0_def])
5576    using "log-prop-prop:2" apply simp
5577    using "if-p-then-p" RN GEN by fast
5578qed
5579
5580AOT_theorem "thm-noncont-propos:2": Impossible0(((p0)-))
5581proof(rule "contingent-properties:2[zero]"[THEN "dfI"])
5582  AOT_show ¬((p0)-)
5583    apply (AOT_subst ((p0)-) ¬p0)
5584    using "thm-relation-negation:3" GEN "∀E"(1)[rotated, OF "log-prop-prop:2"]
5585     apply fast
5586    apply (AOT_subst (reverse) ¬¬p0 p0)
5587     apply (simp add: "oth-class-taut:3:b")
5588    apply (rule "=dfI"(2)[OF p0_def])
5589    using "log-prop-prop:2" apply simp
5590    using "if-p-then-p" RN GEN by fast
5591qed
5592
5593AOT_theorem "thm-noncont-propos:3": NonContingent0((p0))
5594  apply(rule "contingent-properties:3[zero]"[THEN "dfI"])
5595  using "thm-noncont-propos:1" "∨I" by blast
5596
5597AOT_theorem "thm-noncont-propos:4": NonContingent0(((p0)-))
5598  apply(rule "contingent-properties:3[zero]"[THEN "dfI"])
5599  using "thm-noncont-propos:2" "∨I" by blast
5600
5601AOT_theorem "thm-noncont-propos:5":
5602  pq (NonContingent0((p)) & NonContingent0((q)) & p  q)
5603proof(rule "∃I")+
5604  AOT_have 0: φ  (φ)- for φ
5605    using "thm-relation-negation:6" "∀I"
5606          "∀E"(1)[rotated, OF "log-prop-prop:2"] by fast
5607  AOT_thus NonContingent0((p0)) & NonContingent0(((p0)-)) & (p0)  (p0)-
5608    using "thm-noncont-propos:3" "thm-noncont-propos:4" "&I" by auto
5609qed(auto simp: "log-prop-prop:2")
5610
5611AOT_act_theorem "no-cnac": ¬x(E!x & ¬𝒜E!x)
5612proof(rule "raa-cor:2")
5613  AOT_assume x(E!x & ¬𝒜E!x)
5614  then AOT_obtain a where a: E!a & ¬𝒜E!a
5615    using "∃E"[rotated] by blast
5616  AOT_hence 𝒜¬E!a
5617    using "&E" "logic-actual-nec:1"[axiom_inst, THEN "≡E"(2)] by blast
5618  AOT_hence ¬E!a
5619    using "logic-actual"[act_axiom_inst, THEN "→E"] by blast
5620  AOT_hence E!a & ¬E!a
5621    using a "&E" "&I" by blast
5622  AOT_thus p & ¬p for p using "raa-cor:1" by blast
5623qed
5624
5625AOT_theorem "pos-not-pna:1": ¬𝒜x (E!x & ¬𝒜E!x)
5626proof(rule "raa-cor:2")
5627  AOT_assume 𝒜x (E!x & ¬𝒜E!x)
5628  AOT_hence x 𝒜(E!x & ¬𝒜E!x)
5629    using "Act-Basic:10"[THEN "≡E"(1)] by blast
5630  then AOT_obtain a where 𝒜(E!a & ¬𝒜E!a)
5631    using "∃E"[rotated] by blast
5632  AOT_hence 1: 𝒜E!a & 𝒜¬𝒜E!a
5633    using "Act-Basic:2"[THEN "≡E"(1)] by blast
5634  AOT_hence ¬𝒜𝒜E!a
5635    using "&E"(2) "logic-actual-nec:1"[axiom_inst, THEN "≡E"(1)] by blast
5636  AOT_hence ¬𝒜E!a
5637    using "logic-actual-nec:4"[axiom_inst, THEN "≡E"(1)] RAA by blast
5638  AOT_thus p & ¬p for p using 1[THEN "&E"(1)] "&I" "raa-cor:1" by blast
5639qed
5640
5641AOT_theorem "pos-not-pna:2": ¬x(E!x & ¬𝒜E!x)
5642proof (rule RAA(1))
5643  AOT_show ¬𝒜x (E!x & ¬𝒜E!x)
5644    using "pos-not-pna:1" by blast
5645next
5646  AOT_assume ¬¬x (E!x & ¬𝒜E!x)
5647  AOT_hence x (E!x & ¬𝒜E!x)
5648    using "KBasic:12"[THEN "≡E"(2)] by blast
5649  AOT_thus 𝒜x (E!x & ¬𝒜E!x)
5650    using "nec-imp-act"[THEN "→E"] by blast
5651qed
5652
5653AOT_theorem "pos-not-pna:3": x (E!x & ¬𝒜E!x)
5654proof -
5655  AOT_obtain a where (E!a & ¬𝒜E!a)
5656    using "qml:4"[axiom_inst] "BF◇"[THEN "→E"] "∃E"[rotated] by blast
5657  AOT_hence θ: E!a and ξ: ¬𝒜E!a
5658    using "KBasic2:3"[THEN "→E"] "&E" by blast+
5659  AOT_have ¬𝒜E!a
5660    using ξ "KBasic:11"[THEN "≡E"(2)] by blast
5661  AOT_hence ¬𝒜E!a
5662    using "Act-Basic:6"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
5663                        THEN "≡E"(2)] by blast
5664  AOT_hence E!a & ¬𝒜E!a using θ "&I" by blast
5665  thus ?thesis using "∃I" by fast
5666qed
5667
5668AOT_define contingent_prop :: φ ("q0")
5669  q0_def: (q0) =df (x (E!x & ¬𝒜E!x))
5670
5671AOT_theorem q0_prop: q0 & ¬q0
5672  apply (rule "=dfI"(2)[OF q0_def])
5673  apply (fact "log-prop-prop:2")
5674  apply (rule "&I")
5675   apply (fact "qml:4"[axiom_inst])
5676  by (fact "pos-not-pna:2")
5677
5678AOT_theorem "basic-prop:1": Contingent0((q0))
5679proof(rule "contingent-properties:4[zero]"[THEN "dfI"])
5680  AOT_have ¬Necessary0((q0)) & ¬Impossible0((q0))
5681  proof (rule "&I";
5682         rule "=dfI"(2)[OF q0_def];
5683         (rule "log-prop-prop:2" | rule "raa-cor:2"))
5684    AOT_assume Necessary0(x (E!x & ¬𝒜E!x))
5685    AOT_hence x (E!x & ¬𝒜E!x)
5686      using "contingent-properties:1[zero]"[THEN "dfE"] by blast
5687    AOT_hence 𝒜x (E!x & ¬𝒜E!x)
5688      using "Act-Basic:8"[THEN "→E"] "qml:2"[axiom_inst, THEN "→E"] by blast
5689    AOT_thus 𝒜x (E!x & ¬𝒜E!x) & ¬𝒜x (E!x & ¬𝒜E!x)
5690      using "pos-not-pna:1" "&I" by blast
5691  next
5692    AOT_assume Impossible0(x (E!x & ¬𝒜E!x))
5693    AOT_hence ¬(x (E!x & ¬𝒜E!x))
5694      using "contingent-properties:2[zero]"[THEN "dfE"] by blast
5695    AOT_hence ¬(x (E!x & ¬𝒜E!x))
5696      using "KBasic2:1"[THEN "≡E"(1)] by blast
5697    AOT_thus (x (E!x & ¬𝒜E!x)) & ¬(x (E!x & ¬𝒜E!x))
5698      using "qml:4"[axiom_inst] "&I" by blast
5699  qed
5700  AOT_thus ¬(Necessary0((q0))  Impossible0((q0)))
5701    using "oth-class-taut:5:d" "≡E"(2) by blast
5702qed
5703
5704AOT_theorem "basic-prop:2": p Contingent0((p))
5705  using "∃I"(1)[rotated, OF "log-prop-prop:2"] "basic-prop:1" by blast
5706
5707AOT_theorem "basic-prop:3": Contingent0(((q0)-))
5708  apply (AOT_subst ((q0)-) ¬q0)
5709   apply (insert "thm-relation-negation:3" "∀I"
5710                "∀E"(1)[rotated, OF "log-prop-prop:2"]; fast)
5711  apply (rule "contingent-properties:4[zero]"[THEN "dfI"])
5712  apply (rule "oth-class-taut:5:d"[THEN "≡E"(2)])
5713  apply (rule "&I")
5714   apply (rule "contingent-properties:1[zero]"[THEN "df-rules-formulas[3]",
5715                  THEN "useful-tautologies:5"[THEN "→E"], THEN "→E"])
5716   apply (rule "conventions:5"[THEN "dfE"])
5717   apply (rule "=dfE"(2)[OF q0_def])
5718    apply (rule "log-prop-prop:2")
5719   apply (rule q0_prop[THEN "&E"(1)])
5720  apply (rule "contingent-properties:2[zero]"[THEN "df-rules-formulas[3]",
5721                THEN "useful-tautologies:5"[THEN "→E"], THEN "→E"])
5722  apply (rule "conventions:5"[THEN "dfE"])
5723  by (rule q0_prop[THEN "&E"(2)])
5724
5725AOT_theorem "basic-prop:4":
5726  pq (p  q & Contingent0(p) & Contingent0(q))
5727proof(rule "∃I")+
5728  AOT_have 0: φ  (φ)- for φ
5729    using "thm-relation-negation:6" "∀I"
5730          "∀E"(1)[rotated, OF "log-prop-prop:2"] by fast
5731  AOT_show (q0)  (q0)- & Contingent0(q0) & Contingent0(((q0)-))
5732    using "basic-prop:1" "basic-prop:3" "&I" 0 by presburger
5733qed(auto simp: "log-prop-prop:2")
5734
5735AOT_theorem "proposition-facts:1":
5736  NonContingent0(p)  ¬q (Contingent0(q) & q = p)
5737proof(rule "→I"; rule "raa-cor:2")
5738  AOT_assume NonContingent0(p)
5739  AOT_hence 1: Necessary0(p)  Impossible0(p)
5740    using "contingent-properties:3[zero]"[THEN "dfE"] by blast
5741  AOT_assume q (Contingent0(q) & q = p)
5742  then AOT_obtain q where Contingent0(q) & q = p
5743    using "∃E"[rotated] by blast
5744  AOT_hence Contingent0(p)
5745    using "rule=E" "&E" by fast
5746  AOT_thus (Necessary0(p)  Impossible0(p)) &
5747            ¬(Necessary0(p)  Impossible0(p))
5748    using "contingent-properties:4[zero]"[THEN "dfE"] 1 "&I" by blast
5749qed
5750
5751AOT_theorem "proposition-facts:2":
5752  Contingent0(p)  ¬q (NonContingent0(q) & q = p)
5753proof(rule "→I"; rule "raa-cor:2")
5754  AOT_assume Contingent0(p)
5755  AOT_hence 1: ¬(Necessary0(p)  Impossible0(p))
5756    using "contingent-properties:4[zero]"[THEN "dfE"] by blast
5757  AOT_assume q (NonContingent0(q) & q = p)
5758  then AOT_obtain q where NonContingent0(q) & q = p
5759    using "∃E"[rotated] by blast
5760  AOT_hence NonContingent0(p)
5761    using "rule=E" "&E" by fast
5762  AOT_thus (Necessary0(p)  Impossible0(p)) &
5763            ¬(Necessary0(p)  Impossible0(p))
5764    using "contingent-properties:3[zero]"[THEN "dfE"] 1 "&I" by blast
5765qed
5766
5767AOT_theorem "proposition-facts:3":
5768  (p0)  (p0)- & (p0)  (q0) & (p0)  (q0)- & (p0)-  (q0)- & (q0)  (q0)-
5769proof -
5770  {
5771    fix χ φ ψ
5772    AOT_assume χ{φ}
5773    moreover AOT_assume ¬χ{ψ}
5774    ultimately AOT_have ¬(χ{φ}  χ{ψ})
5775      using RAA "≡E" by metis
5776    moreover {
5777      AOT_have pq ((¬(χ{p}  χ{q}))  p  q)
5778        by (rule "∀I"; rule "∀I"; rule "pos-not-equiv-ne:4[zero]")
5779      AOT_hence ((¬(χ{φ}  χ{ψ}))  φ  ψ)
5780        using "∀E" "log-prop-prop:2" by blast
5781    }
5782    ultimately AOT_have φ  ψ
5783      using "→E" by blast
5784  } note 0 = this
5785  AOT_have contingent_neg: Contingent0(φ)  Contingent0(((φ)-)) for φ
5786    using "thm-cont-propos:3" "∀I"
5787          "∀E"(1)[rotated, OF "log-prop-prop:2"] by fast
5788  AOT_have not_noncontingent_if_contingent:
5789    ¬NonContingent0(φ) if Contingent0(φ) for φ
5790    apply (rule "contingent-properties:3[zero]"[THEN "≡Df",
5791                  THEN "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(2)])
5792    using that "contingent-properties:4[zero]"[THEN "dfE"] by blast
5793  show ?thesis
5794    apply (rule "&I")+
5795    using "thm-relation-negation:6" "∀I"
5796          "∀E"(1)[rotated, OF "log-prop-prop:2"]
5797        apply fast
5798       apply (rule 0)
5799    using "thm-noncont-propos:3" apply fast
5800       apply (rule not_noncontingent_if_contingent)
5801       apply (fact AOT)
5802      apply (rule 0)
5803    apply (rule "thm-noncont-propos:3")
5804      apply (rule not_noncontingent_if_contingent)
5805      apply (rule contingent_neg[THEN "≡E"(1)])
5806      apply (fact AOT)
5807     apply (rule 0)
5808    apply (rule "thm-noncont-propos:4")
5809      apply (rule not_noncontingent_if_contingent)
5810      apply (rule contingent_neg[THEN "≡E"(1)])
5811     apply (fact AOT)
5812    using "thm-relation-negation:6" "∀I"
5813          "∀E"(1)[rotated, OF "log-prop-prop:2"] by fast
5814qed
5815
5816AOT_define ContingentlyTrue :: φ  φ ("ContingentlyTrue'(_')")
5817  "cont-tf:1": ContingentlyTrue(p) df p & ¬p
5818
5819AOT_define ContingentlyFalse :: φ  φ ("ContingentlyFalse'(_')")
5820  "cont-tf:2": ContingentlyFalse(p) df ¬p & p
5821
5822AOT_theorem "cont-true-cont:1":
5823  ContingentlyTrue((p))  Contingent0((p))
5824proof(rule "→I")
5825  AOT_assume ContingentlyTrue((p))
5826  AOT_hence 1: p and 2: ¬p using "cont-tf:1"[THEN "dfE"] "&E" by blast+
5827  AOT_have ¬Necessary0((p))
5828    apply (rule "contingent-properties:1[zero]"[THEN "≡Df",
5829                  THEN "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(2)])
5830    using 2 "KBasic:11"[THEN "≡E"(2)] by blast
5831  moreover AOT_have ¬Impossible0((p))
5832    apply (rule "contingent-properties:2[zero]"[THEN "≡Df",
5833                  THEN "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(2)])
5834    apply (rule "conventions:5"[THEN "dfE"])
5835    using "T◇"[THEN "→E", OF 1].
5836  ultimately AOT_have ¬(Necessary0((p))  Impossible0((p)))
5837    using DeMorgan(2)[THEN "≡E"(2)] "&I" by blast
5838  AOT_thus Contingent0((p))
5839    using "contingent-properties:4[zero]"[THEN "dfI"] by blast
5840qed
5841
5842AOT_theorem "cont-true-cont:2":
5843  ContingentlyFalse((p))  Contingent0((p))
5844proof(rule "→I")
5845  AOT_assume ContingentlyFalse((p))
5846  AOT_hence 1: ¬p and 2: p using "cont-tf:2"[THEN "dfE"] "&E" by blast+
5847  AOT_have ¬Necessary0((p))
5848    apply (rule "contingent-properties:1[zero]"[THEN "≡Df",
5849                  THEN "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(2)])
5850    using "KBasic:11"[THEN "≡E"(2)] "T◇"[THEN "→E", OF 1] by blast
5851  moreover AOT_have ¬Impossible0((p))
5852    apply (rule "contingent-properties:2[zero]"[THEN "≡Df",
5853                  THEN "oth-class-taut:4:b"[THEN "≡E"(1)], THEN "≡E"(2)])
5854    apply (rule "conventions:5"[THEN "dfE"])
5855    using 2.
5856  ultimately AOT_have ¬(Necessary0((p))  Impossible0((p)))
5857    using DeMorgan(2)[THEN "≡E"(2)] "&I" by blast
5858  AOT_thus Contingent0((p))
5859    using "contingent-properties:4[zero]"[THEN "dfI"] by blast
5860qed
5861
5862AOT_theorem "cont-true-cont:3":
5863  ContingentlyTrue((p))  ContingentlyFalse(((p)-))
5864proof(rule "≡I"; rule "→I")
5865  AOT_assume ContingentlyTrue((p))
5866  AOT_hence 0: p & ¬p using "cont-tf:1"[THEN "dfE"] by blast
5867  AOT_have 1: ContingentlyFalse(¬p)
5868    apply (rule "cont-tf:2"[THEN "dfI"])
5869    apply (AOT_subst (reverse) ¬¬p p)
5870    by (auto simp: "oth-class-taut:3:b" 0)
5871  AOT_show ContingentlyFalse(((p)-))
5872    apply (AOT_subst ((p)-) ¬p)
5873    by (auto simp: "thm-relation-negation:3" 1)
5874next
5875  AOT_assume 1: ContingentlyFalse(((p)-))
5876  AOT_have ContingentlyFalse(¬p)
5877    by (AOT_subst (reverse) ¬p ((p)-))
5878       (auto simp: "thm-relation-negation:3" 1)
5879  AOT_hence ¬¬p & ¬p using "cont-tf:2"[THEN "dfE"] by blast
5880  AOT_hence p & ¬p
5881    using "&I" "&E" "useful-tautologies:1"[THEN "→E"] by metis
5882  AOT_thus ContingentlyTrue((p))
5883    using "cont-tf:1"[THEN "dfI"] by blast
5884qed
5885
5886AOT_theorem "cont-true-cont:4":
5887  ContingentlyFalse((p))  ContingentlyTrue(((p)-))
5888proof(rule "≡I"; rule "→I")
5889  AOT_assume ContingentlyFalse(p)
5890  AOT_hence 0: ¬p & p
5891    using "cont-tf:2"[THEN "dfE"] by blast
5892  AOT_have ¬p & ¬¬p
5893    by (AOT_subst (reverse) ¬¬p p)
5894       (auto simp: "oth-class-taut:3:b" 0)
5895  AOT_hence 1: ContingentlyTrue(¬p)
5896    by (rule "cont-tf:1"[THEN "dfI"])
5897  AOT_show ContingentlyTrue(((p)-))
5898    by (AOT_subst ((p)-) ¬p)
5899       (auto simp: "thm-relation-negation:3" 1)
5900next
5901  AOT_assume 1: ContingentlyTrue(((p)-))
5902  AOT_have ContingentlyTrue(¬p)
5903    by (AOT_subst (reverse) ¬p ((p)-))
5904       (auto simp add: "thm-relation-negation:3" 1)
5905  AOT_hence 2: ¬p & ¬¬p using "cont-tf:1"[THEN "dfE"] by blast
5906  AOT_have p
5907    by (AOT_subst p ¬¬p)
5908       (auto simp add: "oth-class-taut:3:b" 2[THEN "&E"(2)])
5909  AOT_hence ¬p & p using 2[THEN "&E"(1)] "&I" by blast
5910  AOT_thus ContingentlyFalse(p)
5911    by (rule "cont-tf:2"[THEN "dfI"])
5912qed
5913
5914AOT_theorem "cont-true-cont:5":
5915  (ContingentlyTrue((p)) & Necessary0((q)))  p  q
5916proof (rule "→I"; frule "&E"(1); drule "&E"(2); rule "raa-cor:1")
5917  AOT_assume ContingentlyTrue((p))
5918  AOT_hence ¬p
5919    using "cont-tf:1"[THEN "dfE"] "&E" by blast
5920  AOT_hence 0: ¬p using "KBasic:11"[THEN "≡E"(2)] by blast
5921  AOT_assume Necessary0((q))
5922  moreover AOT_assume ¬(p  q)
5923  AOT_hence p = q
5924    using "=-infix"[THEN "≡Df",
5925                    THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
5926                    THEN "≡E"(1)]
5927          "useful-tautologies:1"[THEN "→E"] by blast
5928  ultimately AOT_have Necessary0((p)) using "rule=E" id_sym by blast
5929  AOT_hence p
5930    using "contingent-properties:1[zero]"[THEN "dfE"] by blast
5931  AOT_thus p & ¬p using 0 "&I" by blast
5932qed
5933
5934AOT_theorem "cont-true-cont:6":
5935  (ContingentlyFalse((p)) & Impossible0((q)))  p  q
5936proof (rule "→I"; frule "&E"(1); drule "&E"(2); rule "raa-cor:1")
5937  AOT_assume ContingentlyFalse((p))
5938  AOT_hence p
5939    using "cont-tf:2"[THEN "dfE"] "&E" by blast
5940  AOT_hence 1: ¬¬p
5941    using "conventions:5"[THEN "dfE"] by blast
5942  AOT_assume Impossible0((q))
5943  moreover AOT_assume ¬(p  q)
5944  AOT_hence p = q
5945    using "=-infix"[THEN "≡Df",
5946                    THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
5947                    THEN "≡E"(1)]
5948          "useful-tautologies:1"[THEN "→E"] by blast
5949  ultimately AOT_have Impossible0((p)) using "rule=E" id_sym by blast
5950  AOT_hence ¬p
5951    using "contingent-properties:2[zero]"[THEN "dfE"] by blast
5952  AOT_thus ¬p & ¬¬p using 1 "&I" by blast
5953qed
5954
5955AOT_act_theorem "q0cf:1": ContingentlyFalse(q0)
5956  apply (rule "cont-tf:2"[THEN "dfI"])
5957  apply (rule "=dfI"(2)[OF q0_def])
5958   apply (fact "log-prop-prop:2")
5959  apply (rule "&I")
5960   apply (fact "no-cnac")
5961  by (fact "qml:4"[axiom_inst])
5962
5963AOT_act_theorem "q0cf:2": ContingentlyTrue(((q0)-))
5964  apply (rule "cont-tf:1"[THEN "dfI"])
5965  apply (rule "=dfI"(2)[OF q0_def])
5966   apply (fact "log-prop-prop:2")
5967  apply (rule "&I")
5968   apply (rule "thm-relation-negation:3"
5969                [unvarify p, OF "log-prop-prop:2", THEN "≡E"(2)])
5970     apply (fact "no-cnac")
5971  apply (rule "rule=E"[rotated,
5972                OF "thm-relation-negation:7"
5973                   [unvarify p, OF "log-prop-prop:2", THEN id_sym]])
5974  apply (AOT_subst (reverse) ¬¬(x  (E!x & ¬𝒜E!x)) x (E!x & ¬𝒜E!x))
5975  by (auto simp: "oth-class-taut:3:b" "qml:4"[axiom_inst])
5976
5977AOT_theorem "cont-tf-thm:1": p ContingentlyTrue((p))
5978proof(rule "∨E"(1)[OF "exc-mid"]; rule "→I"; rule "∃I")
5979  AOT_assume q0
5980  AOT_hence q0 & ¬q0 using q0_prop[THEN "&E"(2)] "&I" by blast
5981  AOT_thus ContingentlyTrue(q0)
5982    by (rule "cont-tf:1"[THEN "dfI"])
5983next
5984  AOT_assume ¬q0
5985  AOT_hence ¬q0 & q0 using q0_prop[THEN "&E"(1)] "&I" by blast
5986  AOT_hence ContingentlyFalse(q0)
5987    by (rule "cont-tf:2"[THEN "dfI"])
5988  AOT_thus ContingentlyTrue(((q0)-))
5989    by (rule "cont-true-cont:4"[unvarify p,
5990                OF "log-prop-prop:2", THEN "≡E"(1)])
5991qed(auto simp: "log-prop-prop:2")
5992
5993
5994AOT_theorem "cont-tf-thm:2": p ContingentlyFalse((p))
5995proof(rule "∨E"(1)[OF "exc-mid"]; rule "→I"; rule "∃I")
5996  AOT_assume q0
5997  AOT_hence q0 & ¬q0 using q0_prop[THEN "&E"(2)] "&I" by blast
5998  AOT_hence ContingentlyTrue(q0)
5999    by (rule "cont-tf:1"[THEN "dfI"])
6000  AOT_thus ContingentlyFalse(((q0)-))
6001    by (rule "cont-true-cont:3"[unvarify p,
6002                OF "log-prop-prop:2", THEN "≡E"(1)])
6003next
6004  AOT_assume ¬q0
6005  AOT_hence ¬q0 & q0 using q0_prop[THEN "&E"(1)] "&I" by blast
6006  AOT_thus ContingentlyFalse(q0)
6007    by (rule "cont-tf:2"[THEN "dfI"])
6008qed(auto simp: "log-prop-prop:2")
6009
6010AOT_theorem "property-facts1:1": Fx ([F]x & ¬[F]x)
6011proof -
6012  fix x
6013  AOT_obtain p1 where ContingentlyTrue((p1))
6014    using "cont-tf-thm:1" "∃E"[rotated] by blast
6015  AOT_hence 1: p1 & ¬p1 using "cont-tf:1"[THEN "dfE"] by blast
6016  AOT_modally_strict {
6017    AOT_have for arbitrary p:  (z p]x  p)
6018      by (rule "beta-C-cor:3"[THEN "∀E"(2)]) cqt_2_lambda_inst_prover
6019    AOT_hence for arbitrary p:   (z p]x  p)
6020      by (rule RN)
6021    AOT_hence p (z p]x  p) using GEN by fast
6022    AOT_hence (z p1]x  p1) using "∀E" by fast
6023  } note 2 = this
6024  AOT_hence (z p1]x  p1) using "∀E" by blast
6025  AOT_hence z p1]x
6026    using 1[THEN "&E"(1)] "qml:2"[axiom_inst, THEN "→E"] "≡E"(2) by blast
6027  moreover AOT_have ¬z p1]x
6028    using 2[THEN "qml:2"[axiom_inst, THEN "→E"]]
6029    apply (AOT_subst z p1]x p1)
6030    using 1[THEN "&E"(2)] by blast
6031  ultimately AOT_have z p1]x & ¬z p1]x using "&I" by blast
6032  AOT_hence x (z p1]x & ¬z p1]x) using "∃I"(2) by fast
6033  moreover AOT_have z p1] by "cqt:2[lambda]"
6034  ultimately AOT_show Fx ([F]x & ¬[F]x) by (rule "∃I"(1))
6035qed
6036
6037AOT_theorem "property-facts1:2": Fx (¬[F]x & [F]x)
6038proof -
6039  fix x
6040  AOT_obtain p1 where ContingentlyFalse((p1))
6041    using "cont-tf-thm:2" "∃E"[rotated] by blast
6042  AOT_hence 1: ¬p1 & p1 using "cont-tf:2"[THEN "dfE"] by blast
6043  AOT_modally_strict {
6044    AOT_have for arbitrary p:  (z p]x  p)
6045      by (rule "beta-C-cor:3"[THEN "∀E"(2)]) cqt_2_lambda_inst_prover
6046    AOT_hence for arbitrary p:  (¬z p]x  ¬p)
6047      using "oth-class-taut:4:b" "≡E" by blast
6048    AOT_hence for arbitrary p:  (¬z p]x  ¬p)
6049      by (rule RN)
6050    AOT_hence p (¬z p]x  ¬p) using GEN by fast
6051    AOT_hence (¬z p1]x  ¬p1) using "∀E" by fast
6052  } note 2 = this
6053  AOT_hence (¬z p1]x  ¬p1) using "∀E" by blast
6054  AOT_hence 3: ¬z p1]x
6055    using 1[THEN "&E"(1)] "qml:2"[axiom_inst, THEN "→E"] "≡E"(2) by blast
6056  AOT_modally_strict {
6057    AOT_have for arbitrary p:  (z p]x  p)
6058      by (rule "beta-C-cor:3"[THEN "∀E"(2)]) cqt_2_lambda_inst_prover
6059    AOT_hence for arbitrary p:  (z p]x  p)
6060      by (rule RN)
6061    AOT_hence p (z p]x  p) using GEN by fast
6062    AOT_hence (z p1]x  p1) using "∀E" by fast
6063  } note 4 = this
6064  AOT_have z p1]x
6065    using 4[THEN "qml:2"[axiom_inst, THEN "→E"]]
6066    apply (AOT_subst z p1]x p1)
6067    using 1[THEN "&E"(2)] by blast
6068  AOT_hence ¬z p1]x & z p1]x using 3 "&I" by blast
6069  AOT_hence x (¬z p1]x & z p1]x) using "∃I"(2) by fast
6070  moreover AOT_have z p1] by "cqt:2[lambda]"
6071  ultimately AOT_show Fx (¬[F]x & [F]x) by (rule "∃I"(1))
6072qed
6073
6074context
6075begin
6076
6077private AOT_lemma eqnotnec_123_Aux_ζ: [L]x  (E!x  E!x)
6078    apply (rule "=dfI"(2)[OF L_def])
6079     apply "cqt:2[lambda]"
6080    apply (rule "beta-C-meta"[THEN "→E"])
6081  by "cqt:2[lambda]"
6082
6083private AOT_lemma eqnotnec_123_Aux_ω: z φ]x  φ
6084    by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6085
6086private AOT_lemma eqnotnec_123_Aux_θ: φ  x([L]x  z φ]x)
6087proof(rule "≡I"; rule "→I"; (rule "∀I")?)
6088  fix x
6089  AOT_assume 1: φ
6090  AOT_have [L]x  (E!x  E!x) using eqnotnec_123_Aux_ζ.
6091  also AOT_have   φ
6092    using "if-p-then-p" 1 "≡I" "→I" by simp
6093  also AOT_have   z φ]x
6094    using "Commutativity of ≡"[THEN "≡E"(1)] eqnotnec_123_Aux_ω by blast
6095  finally AOT_show [L]x  z φ]x.
6096next
6097  fix x
6098  AOT_assume x([L]x  z φ]x)
6099  AOT_hence [L]x  z φ]x using "∀E" by blast
6100  also AOT_have   φ using eqnotnec_123_Aux_ω.
6101  finally AOT_have φ  [L]x
6102    using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6103  also AOT_have   E!x  E!x using eqnotnec_123_Aux_ζ.
6104  finally AOT_show φ using "≡E" "if-p-then-p" by fast
6105qed
6106private lemmas eqnotnec_123_Aux_ξ =
6107  eqnotnec_123_Aux_θ[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6108    THEN "conventions:3"[THEN "≡Df", THEN "≡E"(1), THEN "&E"(1)],
6109    THEN "RM◇"]
6110private lemmas eqnotnec_123_Aux_ξ' =
6111  eqnotnec_123_Aux_θ[
6112    THEN "conventions:3"[THEN "≡Df", THEN "≡E"(1), THEN "&E"(1)],
6113    THEN "RM◇"]
6114
6115AOT_theorem "eqnotnec:1": FG(x([F]x  [G]x) & ¬x([F]x  [G]x))
6116proof-
6117  AOT_obtain p1 where ContingentlyTrue(p1)
6118    using "cont-tf-thm:1" "∃E"[rotated] by blast
6119  AOT_hence p1 & ¬p1 using "cont-tf:1"[THEN "dfE"] by blast
6120  AOT_hence x ([L]x  z p1]x) & ¬x([L]x  z p1]x)
6121    apply - apply (rule "&I")
6122    using "&E" eqnotnec_123_Aux_θ[THEN "≡E"(1)]
6123          eqnotnec_123_Aux_ξ "→E" by fast+
6124  AOT_hence G (x([L]x  [G]x) & ¬x([L]x  [G]x))
6125    by (rule "∃I") "cqt:2[lambda]"
6126  AOT_thus FG (x([F]x  [G]x) & ¬x([F]x  [G]x))
6127    apply (rule "∃I")
6128    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
6129qed
6130
6131AOT_theorem "eqnotnec:2": FG(¬x([F]x  [G]x) & x([F]x  [G]x))
6132proof-
6133  AOT_obtain p1 where ContingentlyFalse(p1)
6134    using "cont-tf-thm:2" "∃E"[rotated] by blast
6135  AOT_hence ¬p1 & p1 using "cont-tf:2"[THEN "dfE"] by blast
6136  AOT_hence ¬x ([L]x  z p1]x) & x([L]x  z p1]x)
6137    apply - apply (rule "&I")
6138    using eqnotnec_123_Aux_θ[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6139                             THEN "≡E"(1)]
6140          "&E" eqnotnec_123_Aux_ξ' "→E" by fast+
6141  AOT_hence G (¬x([L]x  [G]x) & x([L]x  [G]x))
6142    by (rule "∃I") "cqt:2[lambda]"
6143  AOT_thus FG (¬x([F]x  [G]x) & x([F]x  [G]x))
6144    apply (rule "∃I")
6145    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
6146qed
6147
6148AOT_theorem "eqnotnec:3": FG(𝒜¬x([F]x  [G]x) & x([F]x  [G]x))
6149proof-
6150  AOT_have ¬𝒜q0
6151    apply (rule "=dfI"(2)[OF q0_def])
6152     apply (fact "log-prop-prop:2")
6153    by (fact AOT)
6154  AOT_hence 𝒜¬q0
6155    using "logic-actual-nec:1"[axiom_inst, THEN "≡E"(2)] by blast
6156  AOT_hence 𝒜¬x ([L]x  z q0]x)
6157    using eqnotnec_123_Aux_θ[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6158            THEN "conventions:3"[THEN "≡Df", THEN "≡E"(1), THEN "&E"(1)],
6159            THEN "RA[2]", THEN "act-cond"[THEN "→E"], THEN "→E"] by blast
6160  moreover AOT_have x ([L]x  z q0]x)
6161    using eqnotnec_123_Aux_ξ'[THEN "→E"] q0_prop[THEN "&E"(1)] by blast
6162  ultimately AOT_have 𝒜¬x ([L]x  z q0]x) & x ([L]x  z q0]x)
6163    using "&I" by blast
6164  AOT_hence G (𝒜¬x([L]x  [G]x) & x([L]x  [G]x))
6165    by (rule "∃I") "cqt:2[lambda]"
6166  AOT_thus FG (𝒜¬x([F]x  [G]x) & x([F]x  [G]x))
6167    apply (rule "∃I")
6168    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
6169qed
6170
6171end
6172
6173AOT_theorem "eqnotnec:4": FG(x([F]x  [G]x) & ¬x([F]x  [G]x))
6174proof(rule GEN)
6175  fix F
6176  AOT_have Aux_A:  ψ  x([F]x  z [F]z & ψ]x) for ψ
6177  proof(rule "→I"; rule GEN)
6178    AOT_modally_strict {
6179    fix x
6180    AOT_assume 0: ψ
6181    AOT_have z [F]z & ψ]x  [F]x & ψ
6182      by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6183    also AOT_have ...  [F]x
6184      apply (rule "≡I"; rule "→I")
6185      using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0] "&E"
6186      apply blast
6187      using 0 "&I" by blast
6188    finally AOT_show [F]x  z [F]z & ψ]x
6189      using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6190    }
6191  qed
6192
6193  AOT_have Aux_B:  ψ  x([F]x  z [F]z & ψ  ¬ψ]x) for ψ
6194  proof (rule "→I"; rule GEN)
6195    AOT_modally_strict {
6196      fix x
6197      AOT_assume 0: ψ
6198      AOT_have z ([F]z & ψ)  ¬ψ]x  (([F]x & ψ)  ¬ψ)
6199        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6200      also AOT_have ...  [F]x
6201        apply (rule "≡I"; rule "→I")
6202        using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0]
6203              "&E"
6204         apply blast
6205        apply (rule "∨I"(1)) using 0 "&I" by blast
6206      finally AOT_show [F]x  z ([F]z & ψ)  ¬ψ]x
6207        using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6208    }
6209  qed
6210
6211  AOT_have Aux_C:
6212     ¬ψ  ¬z(z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z) for ψ
6213  proof(rule "RM◇"; rule "→I"; rule "raa-cor:2")
6214  AOT_modally_strict {
6215      AOT_assume 0: ¬ψ
6216      AOT_assume z (z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z)
6217      AOT_hence z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6218        using "∀E" by blast
6219      moreover AOT_have z [F]z & ψ]z  [F]z & ψ for z
6220          by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6221      moreover AOT_have z ([F]z & ψ)  ¬ψ]z  (([F]z & ψ)  ¬ψ) for z
6222        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6223      ultimately AOT_have [F]z & ψ  (([F]z & ψ)  ¬ψ) for z
6224        using "Commutativity of ≡"[THEN "≡E"(1)] "≡E"(5) by meson
6225      moreover AOT_have (([F]z & ψ)  ¬ψ) for z using 0 "∨I" by blast
6226      ultimately AOT_have ψ using "≡E" "&E" by metis
6227      AOT_thus ψ & ¬ψ using 0 "&I" by blast
6228    }
6229  qed
6230
6231  AOT_have Aux_D: z ([F]z  z [F]z & ψ]z) 
6232      (¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6233       ¬x ([F]x  z [F]z & ψ  ¬ψ]x)) for ψ
6234  proof (rule "→I")
6235    AOT_assume A: z([F]z  z [F]z & ψ]z)
6236    AOT_show ¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6237              ¬x ([F]x  z [F]z & ψ  ¬ψ]x)
6238    proof(rule "≡I"; rule "KBasic:13"[THEN "→E"];
6239          rule "RN[prem]"[where Γ="{«z([F]z  z [F]z & ψ]z)»}", simplified];
6240          (rule "useful-tautologies:5"[THEN "→E"]; rule "→I")?)
6241      AOT_modally_strict {
6242        AOT_assume z ([F]z  z [F]z & ψ]z)
6243        AOT_hence 1: [F]z  z [F]z & ψ]z for z
6244          using "∀E" by blast
6245        AOT_assume x ([F]x  z [F]z & ψ  ¬ψ]x)
6246        AOT_hence 2: [F]z  z [F]z & ψ  ¬ψ]z for z
6247          using "∀E" by blast
6248        AOT_have z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6249          using "≡E" 1 2 by meson
6250        AOT_thus x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6251          by (rule GEN)
6252      }
6253    next
6254      AOT_modally_strict {
6255        AOT_assume z ([F]z  z [F]z & ψ]z)
6256        AOT_hence 1: [F]z  z [F]z & ψ]z for z
6257          using "∀E" by blast
6258        AOT_assume x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6259        AOT_hence 2: z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6260          using "∀E" by blast
6261        AOT_have [F]z  z [F]z & ψ  ¬ψ]z for z
6262          using 1 2 "≡E" by meson
6263        AOT_thus x ([F]x  z [F]z & ψ  ¬ψ]x)
6264          by (rule GEN)
6265      }
6266    qed(auto simp: A)
6267  qed
6268
6269  AOT_obtain p1 where p1_prop: p1 & ¬p1
6270    using "cont-tf-thm:1" "∃E"[rotated]
6271          "cont-tf:1"[THEN "dfE"] by blast
6272  {
6273    AOT_assume 1: x([F]x  z [F]z & p1]x)
6274    AOT_have 2: x([F]x  z [F]z & p1  ¬p1]x)
6275      using Aux_B[THEN "→E", OF p1_prop[THEN "&E"(1)]].
6276    AOT_have ¬x(z [F]z & p1]x  z [F]z & p1  ¬p1]x)
6277      using Aux_C[THEN "→E", OF p1_prop[THEN "&E"(2)]].
6278    AOT_hence 3: ¬x([F]x  z [F]z & p1  ¬p1]x)
6279      using Aux_D[THEN "→E", OF 1, THEN "≡E"(1)] by blast
6280    AOT_hence x([F]x  z [F]z & p1  ¬p1]x) &
6281               ¬x([F]x  z [F]z & p1  ¬p1]x)
6282      using 2 "&I" by blast
6283    AOT_hence G (x ([F]x  [G]x) & ¬x([F]x  [G]x))
6284      by (rule "∃I"(1)) "cqt:2[lambda]"
6285  }
6286  moreover {
6287    AOT_assume 2: ¬x([F]x  z [F]z & p1]x)
6288    AOT_hence ¬x([F]x  z [F]z & p1]x)
6289      using "KBasic:11"[THEN "≡E"(1)] by blast
6290    AOT_hence x ([F]x  z [F]z & p1]x) & ¬x([F]x  z [F]z & p1]x)
6291      using Aux_A[THEN "→E", OF p1_prop[THEN "&E"(1)]] "&I" by blast
6292    AOT_hence G (x ([F]x  [G]x) & ¬x([F]x  [G]x))
6293      by (rule "∃I"(1)) "cqt:2[lambda]"
6294  }
6295  ultimately AOT_show G (x ([F]x  [G]x) & ¬x([F]x  [G]x))
6296    using "∨E"(1)[OF "exc-mid"] "→I" by blast
6297qed
6298
6299AOT_theorem "eqnotnec:5": FG(¬x([F]x  [G]x) & x([F]x  [G]x))
6300proof(rule GEN)
6301  fix F
6302  AOT_have Aux_A:  ψ  x([F]x  z [F]z & ψ]x) for ψ
6303  proof(rule "RM◇"; rule "→I"; rule GEN)
6304    AOT_modally_strict {
6305    fix x
6306    AOT_assume 0: ψ
6307    AOT_have z [F]z & ψ]x  [F]x & ψ
6308      by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6309    also AOT_have ...  [F]x
6310      apply (rule "≡I"; rule "→I")
6311      using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0] "&E"
6312       apply blast
6313      using 0 "&I" by blast
6314    finally AOT_show [F]x  z [F]z & ψ]x
6315      using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6316    }
6317  qed
6318
6319  AOT_have Aux_B:  ψ  x([F]x  z [F]z & ψ  ¬ψ]x) for ψ
6320  proof (rule "RM◇"; rule "→I"; rule GEN)
6321    AOT_modally_strict {
6322      fix x
6323      AOT_assume 0: ψ
6324      AOT_have z ([F]z & ψ)  ¬ψ]x  (([F]x & ψ)  ¬ψ)
6325        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6326      also AOT_have ...  [F]x
6327        apply (rule "≡I"; rule "→I")
6328        using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0] "&E"
6329         apply blast
6330        apply (rule "∨I"(1)) using 0 "&I" by blast
6331      finally AOT_show [F]x  z ([F]z & ψ)  ¬ψ]x
6332        using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6333    }
6334  qed
6335
6336  AOT_have Aux_C:  ¬ψ  ¬z(z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z) for ψ
6337  proof(rule "→I"; rule "raa-cor:2")
6338  AOT_modally_strict {
6339      AOT_assume 0: ¬ψ
6340      AOT_assume z (z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z)
6341      AOT_hence z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6342        using "∀E" by blast
6343      moreover AOT_have z [F]z & ψ]z  [F]z & ψ for z
6344          by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6345      moreover AOT_have z ([F]z & ψ)  ¬ψ]z  (([F]z & ψ)  ¬ψ) for z
6346        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6347      ultimately AOT_have [F]z & ψ  (([F]z & ψ)  ¬ψ) for z
6348        using "Commutativity of ≡"[THEN "≡E"(1)] "≡E"(5) by meson
6349      moreover AOT_have (([F]z & ψ)  ¬ψ) for z
6350        using 0 "∨I" by blast
6351      ultimately AOT_have ψ using "≡E" "&E" by metis
6352      AOT_thus ψ & ¬ψ using 0 "&I" by blast
6353    }
6354  qed
6355
6356  AOT_have Aux_D: z ([F]z  z [F]z & ψ]z) 
6357    (¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6358     ¬x ([F]x  z [F]z & ψ  ¬ψ]x)) for ψ
6359  proof (rule "→I"; rule "≡I";
6360         (rule "useful-tautologies:5"[THEN "→E"]; rule "→I")?)
6361    AOT_modally_strict {
6362      AOT_assume z ([F]z  z [F]z & ψ]z)
6363      AOT_hence 1: [F]z  z [F]z & ψ]z for z
6364        using "∀E" by blast
6365      AOT_assume x ([F]x  z [F]z & ψ  ¬ψ]x)
6366      AOT_hence 2: [F]z  z [F]z & ψ  ¬ψ]z for z
6367        using "∀E" by blast
6368      AOT_have z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6369        using "≡E" 1 2 by meson
6370      AOT_thus x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6371        by (rule GEN)
6372    }
6373  next
6374    AOT_modally_strict {
6375      AOT_assume z ([F]z  z [F]z & ψ]z)
6376      AOT_hence 1: [F]z  z [F]z & ψ]z for z
6377        using "∀E" by blast
6378      AOT_assume x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6379      AOT_hence 2: z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6380        using "∀E" by blast
6381      AOT_have [F]z  z [F]z & ψ  ¬ψ]z for z
6382        using 1 2 "≡E" by meson
6383      AOT_thus x ([F]x  z [F]z & ψ  ¬ψ]x)
6384        by (rule GEN)
6385    }
6386  qed
6387
6388  AOT_obtain p1 where p1_prop: ¬p1 & p1
6389    using "cont-tf-thm:2" "∃E"[rotated] "cont-tf:2"[THEN "dfE"] by blast
6390  {
6391    AOT_assume 1: x([F]x  z [F]z & p1]x)
6392    AOT_have 2: x([F]x  z [F]z & p1  ¬p1]x)
6393      using Aux_B[THEN "→E", OF p1_prop[THEN "&E"(2)]].
6394    AOT_have ¬x(z [F]z & p1]x  z [F]z & p1  ¬p1]x)
6395      using Aux_C[THEN "→E", OF p1_prop[THEN "&E"(1)]].
6396    AOT_hence 3: ¬x([F]x  z [F]z & p1  ¬p1]x)
6397      using Aux_D[THEN "→E", OF 1, THEN "≡E"(1)] by blast
6398    AOT_hence ¬x([F]x  z [F]z & p1  ¬p1]x) &
6399               x([F]x  z [F]z & p1  ¬p1]x)
6400      using 2 "&I" by blast
6401    AOT_hence G (¬x ([F]x  [G]x) & x([F]x  [G]x))
6402      by (rule "∃I"(1)) "cqt:2[lambda]"
6403  }
6404  moreover {
6405    AOT_assume 2: ¬x([F]x  z [F]z & p1]x)
6406    AOT_hence ¬x([F]x  z [F]z & p1]x)
6407      using "KBasic:11"[THEN "≡E"(1)] by blast
6408    AOT_hence ¬x ([F]x  z [F]z & p1]x) &
6409               x([F]x  z [F]z & p1]x)
6410      using Aux_A[THEN "→E", OF p1_prop[THEN "&E"(2)]] "&I" by blast
6411    AOT_hence G (¬x ([F]x  [G]x) & x([F]x  [G]x))
6412      by (rule "∃I"(1)) "cqt:2[lambda]"
6413  }
6414  ultimately AOT_show G (¬x ([F]x  [G]x) & x([F]x  [G]x))
6415    using "∨E"(1)[OF "exc-mid"] "→I" by blast
6416qed
6417
6418AOT_theorem "eqnotnec:6": FG(𝒜¬x([F]x  [G]x) & x([F]x  [G]x))
6419proof(rule GEN)
6420  fix F
6421  AOT_have Aux_A:  ψ  x([F]x  z [F]z & ψ]x) for ψ
6422  proof(rule "RM◇"; rule "→I"; rule GEN)
6423    AOT_modally_strict {
6424    fix x
6425    AOT_assume 0: ψ
6426    AOT_have z [F]z & ψ]x  [F]x & ψ
6427      by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6428    also AOT_have ...  [F]x
6429      apply (rule "≡I"; rule "→I")
6430      using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0]
6431            "&E"
6432       apply blast
6433      using 0 "&I" by blast
6434    finally AOT_show [F]x  z [F]z & ψ]x
6435      using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6436    }
6437  qed
6438
6439  AOT_have Aux_B:  ψ  x([F]x  z [F]z & ψ  ¬ψ]x) for ψ
6440  proof (rule "RM◇"; rule "→I"; rule GEN)
6441    AOT_modally_strict {
6442      fix x
6443      AOT_assume 0: ψ
6444      AOT_have z ([F]z & ψ)  ¬ψ]x  (([F]x & ψ)  ¬ψ)
6445        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6446      also AOT_have ...  [F]x
6447        apply (rule "≡I"; rule "→I")
6448        using "∨E"(3)[rotated, OF "useful-tautologies:2"[THEN "→E"], OF 0] "&E"
6449         apply blast
6450        apply (rule "∨I"(1)) using 0 "&I" by blast
6451      finally AOT_show [F]x  z ([F]z & ψ)  ¬ψ]x
6452        using "Commutativity of ≡"[THEN "≡E"(1)] by blast
6453    }
6454  qed
6455
6456  AOT_have Aux_C:
6457     𝒜¬ψ  𝒜¬z(z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z) for ψ
6458  proof(rule "act-cond"[THEN "→E"]; rule "RA[2]"; rule "→I"; rule "raa-cor:2")
6459  AOT_modally_strict {
6460      AOT_assume 0: ¬ψ
6461      AOT_assume z (z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z)
6462      AOT_hence z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6463        using "∀E" by blast
6464      moreover AOT_have z [F]z & ψ]z  [F]z & ψ for z
6465          by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6466      moreover AOT_have z ([F]z & ψ)  ¬ψ]z  (([F]z & ψ)  ¬ψ) for z
6467        by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6468      ultimately AOT_have [F]z & ψ  (([F]z & ψ)  ¬ψ) for z
6469        using "Commutativity of ≡"[THEN "≡E"(1)] "≡E"(5) by meson
6470      moreover AOT_have (([F]z & ψ)  ¬ψ) for z
6471        using 0 "∨I" by blast
6472      ultimately AOT_have ψ using "≡E" "&E" by metis
6473      AOT_thus ψ & ¬ψ using 0 "&I" by blast
6474    }
6475  qed
6476
6477  AOT_have (z ([F]z  z [F]z & ψ]z) 
6478    (¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6479     ¬x ([F]x  z [F]z & ψ  ¬ψ]x))) for ψ
6480  proof (rule RN; rule "→I")
6481    AOT_modally_strict {
6482        AOT_assume z ([F]z  z [F]z & ψ]z)
6483        AOT_thus ¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6484                  ¬x ([F]x  z [F]z & ψ  ¬ψ]x)
6485          apply -
6486        proof(rule "≡I"; (rule "useful-tautologies:5"[THEN "→E"]; rule "→I")?)
6487          AOT_assume z ([F]z  z [F]z & ψ]z)
6488          AOT_hence 1: [F]z  z [F]z & ψ]z for z
6489            using "∀E" by blast
6490          AOT_assume x ([F]x  z [F]z & ψ  ¬ψ]x)
6491          AOT_hence 2: [F]z  z [F]z & ψ  ¬ψ]z for z
6492            using "∀E" by blast
6493          AOT_have z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6494            using "≡E" 1 2 by meson
6495          AOT_thus x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6496            by (rule GEN)
6497        next
6498            AOT_assume z ([F]z  z [F]z & ψ]z)
6499            AOT_hence 1: [F]z  z [F]z & ψ]z for z
6500              using "∀E" by blast
6501            AOT_assume x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x)
6502            AOT_hence 2: z [F]z & ψ]z  z [F]z & ψ  ¬ψ]z for z
6503              using "∀E" by blast
6504            AOT_have [F]z  z [F]z & ψ  ¬ψ]z for z
6505              using 1 2 "≡E" by meson
6506            AOT_thus x ([F]x  z [F]z & ψ  ¬ψ]x)
6507              by (rule GEN)
6508        qed
6509    }
6510  qed
6511  AOT_hence 𝒜(z ([F]z  z [F]z & ψ]z) 
6512    (¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6513     ¬x ([F]x  z [F]z & ψ  ¬ψ]x))) for ψ
6514    using "nec-imp-act"[THEN "→E"] by blast
6515  AOT_hence 𝒜z ([F]z  z [F]z & ψ]z) 
6516    𝒜(¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6517    ¬x ([F]x  z [F]z & ψ  ¬ψ]x)) for ψ
6518    using "act-cond"[THEN "→E"] by blast
6519  AOT_hence Aux_D: 𝒜z ([F]z  z [F]z & ψ]z) 
6520    (𝒜¬x (z [F]z & ψ]x  z [F]z & ψ  ¬ψ]x) 
6521     𝒜¬x ([F]x  z [F]z & ψ  ¬ψ]x)) for ψ
6522    by (auto intro!: "→I" "Act-Basic:5"[THEN "≡E"(1)] dest!: "→E")
6523
6524  AOT_have ¬𝒜q0
6525    apply (rule "=dfI"(2)[OF q0_def])
6526     apply (fact "log-prop-prop:2")
6527    by (fact AOT)
6528  AOT_hence q0_prop_1: 𝒜¬q0
6529    using "logic-actual-nec:1"[axiom_inst, THEN "≡E"(2)] by blast
6530  {
6531    AOT_assume 1: 𝒜x([F]x  z [F]z & q0]x)
6532    AOT_have 2: x([F]x  z [F]z & q0  ¬q0]x)
6533      using Aux_B[THEN "→E", OF q0_prop[THEN "&E"(1)]].
6534    AOT_have 𝒜¬x(z [F]z & q0]x  z [F]z & q0  ¬q0]x)
6535      using Aux_C[THEN "→E", OF q0_prop_1].
6536    AOT_hence 3: 𝒜¬x([F]x  z [F]z & q0  ¬q0]x)
6537      using Aux_D[THEN "→E", OF 1, THEN "≡E"(1)] by blast
6538    AOT_hence 𝒜¬x([F]x  z [F]z & q0  ¬q0]x) &
6539               x([F]x  z [F]z & q0  ¬q0]x)
6540      using 2 "&I" by blast
6541    AOT_hence G (𝒜¬x ([F]x  [G]x) & x([F]x  [G]x))
6542      by (rule "∃I"(1)) "cqt:2[lambda]"
6543  }
6544  moreover {
6545    AOT_assume 2: ¬𝒜x([F]x  z [F]z & q0]x)
6546    AOT_hence 𝒜¬x([F]x  z [F]z & q0]x)
6547      using "logic-actual-nec:1"[axiom_inst, THEN "≡E"(2)] by blast
6548    AOT_hence 𝒜¬x ([F]x  z [F]z & q0]x) & x([F]x  z [F]z & q0]x)
6549      using Aux_A[THEN "→E", OF q0_prop[THEN "&E"(1)]] "&I" by blast
6550    AOT_hence G (𝒜¬x ([F]x  [G]x) & x([F]x  [G]x))
6551      by (rule "∃I"(1)) "cqt:2[lambda]"
6552  }
6553  ultimately AOT_show G (𝒜¬x ([F]x  [G]x) & x([F]x  [G]x))
6554    using "∨E"(1)[OF "exc-mid"] "→I" by blast
6555qed
6556
6557AOT_theorem "oa-contingent:1": O!  A!
6558proof(rule "dfI"[OF "=-infix"]; rule "raa-cor:2")
6559  fix x
6560  AOT_assume 1: O! = A!
6561  AOT_hence x E!x] = A!
6562    by (rule "=dfE"(2)[OF AOT_ordinary, rotated]) "cqt:2[lambda]"
6563  AOT_hence x E!x] = x ¬E!x]
6564    by (rule "=dfE"(2)[OF AOT_abstract, rotated]) "cqt:2[lambda]"
6565  moreover AOT_have x E!x]x  E!x
6566    by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6567  ultimately AOT_have x ¬E!x]x  E!x
6568    using "rule=E" by fast
6569  moreover AOT_have x ¬E!x]x  ¬E!x
6570    by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6571  ultimately AOT_have E!x  ¬E!x
6572    using "≡E"(6) "Commutativity of ≡"[THEN "≡E"(1)] by blast
6573  AOT_thus "(E!x  ¬E!x) & ¬(E!x  ¬E!x)"
6574    using "oth-class-taut:3:c" "&I" by blast
6575qed
6576
6577AOT_theorem "oa-contingent:2": O!x  ¬A!x
6578proof -
6579  AOT_have O!x  x E!x]x
6580    apply (rule "≡I"; rule "→I")
6581     apply (rule "=dfE"(2)[OF AOT_ordinary])
6582      apply "cqt:2[lambda]"
6583     apply argo
6584    apply (rule  "=dfI"(2)[OF AOT_ordinary])
6585     apply "cqt:2[lambda]"
6586    by argo
6587  also AOT_have   E!x
6588    by (rule "beta-C-meta"[THEN "→E"]) "cqt:2[lambda]"
6589  also AOT_have   ¬¬E!x
6590    using "oth-class-taut:3:b".
6591  also AOT_have   ¬x ¬E!x]x
6592    by (rule "beta-C-meta"[THEN "→E",
6593              THEN "oth-class-taut:4:b"[THEN "≡E"(1)], symmetric])
6594       "cqt:2"
6595  also AOT_have   ¬A!x
6596    apply (rule "≡I"; rule "→I")
6597     apply (rule "=dfI"(2)[OF AOT_abstract])
6598      apply "cqt:2[lambda]"
6599     apply argo
6600    apply (rule "=dfE"(2)[OF AOT_abstract])
6601     apply "cqt:2[lambda]"
6602    by argo
6603  finally show ?thesis.
6604qed
6605
6606AOT_theorem "oa-contingent:3": A!x  ¬O!x
6607  by (AOT_subst A!x ¬¬A!x)
6608     (auto simp add: "oth-class-taut:3:b" "oa-contingent:2"[THEN
6609         "oth-class-taut:4:b"[THEN "≡E"(1)], symmetric])
6610
6611AOT_theorem "oa-contingent:4": Contingent(O!)
6612proof (rule "thm-cont-prop:2"[unvarify F, OF "oa-exist:1", THEN "≡E"(2)];
6613       rule "&I")
6614  AOT_have x E!x using "thm-cont-e:3" .
6615  AOT_hence x E!x using "BF◇"[THEN "→E"] by blast
6616  then AOT_obtain a where E!a using "∃E"[rotated] by blast
6617  AOT_hence x E!x]a
6618    by (rule "beta-C-meta"[THEN "→E", THEN "≡E"(2), rotated]) "cqt:2"
6619  AOT_hence O!a
6620    by (rule "=dfI"(2)[OF AOT_ordinary, rotated]) "cqt:2"
6621  AOT_hence x O!x using "∃I" by blast
6622  AOT_thus x O!x using "T◇"[THEN "→E"] by blast
6623next
6624  AOT_obtain a where A!a
6625    using "A-objects"[axiom_inst] "∃E"[rotated] "&E" by blast
6626  AOT_hence ¬O!a using "oa-contingent:3"[THEN "≡E"(1)] by blast
6627  AOT_hence x ¬O!x using "∃I" by fast
6628  AOT_thus x ¬O!x using "T◇"[THEN "→E"] by blast
6629qed
6630
6631AOT_theorem "oa-contingent:5": Contingent(A!)
6632proof (rule "thm-cont-prop:2"[unvarify F, OF "oa-exist:2", THEN "≡E"(2)];
6633       rule "&I")
6634  AOT_obtain a where A!a
6635    using "A-objects"[axiom_inst] "∃E"[rotated] "&E" by blast
6636  AOT_hence x A!x using "∃I" by fast
6637  AOT_thus x A!x using "T◇"[THEN "→E"] by blast
6638next
6639  AOT_have x E!x using "thm-cont-e:3" .
6640  AOT_hence x E!x using "BF◇"[THEN "→E"] by blast
6641  then AOT_obtain a where E!a using "∃E"[rotated] by blast
6642  AOT_hence x E!x]a
6643    by (rule "beta-C-meta"[THEN "→E", THEN "≡E"(2), rotated]) "cqt:2[lambda]"
6644  AOT_hence O!a
6645    by (rule "=dfI"(2)[OF AOT_ordinary, rotated]) "cqt:2[lambda]"
6646  AOT_hence ¬A!a using "oa-contingent:2"[THEN "≡E"(1)] by blast
6647  AOT_hence x ¬A!x using "∃I" by fast
6648  AOT_thus x ¬A!x using "T◇"[THEN "→E"] by blast
6649qed
6650
6651AOT_theorem "oa-contingent:7": O!-x  ¬A!-x
6652proof -
6653  AOT_have O!x  ¬A!x
6654    using "oa-contingent:2" by blast
6655  also AOT_have   A!-x
6656    using "thm-relation-negation:1"[symmetric, unvarify F, OF "oa-exist:2"].
6657  finally AOT_have 1: O!x  A!-x.
6658
6659  AOT_have A!x  ¬O!x
6660    using "oa-contingent:3" by blast
6661  also AOT_have   O!-x
6662    using "thm-relation-negation:1"[symmetric, unvarify F, OF "oa-exist:1"].
6663  finally AOT_have 2: A!x  O!-x.
6664
6665  AOT_show O!-x  ¬A!-x
6666    using 1[THEN "oth-class-taut:4:b"[THEN "≡E"(1)]]
6667          "oa-contingent:3"[of _ x] 2[symmetric]
6668          "≡E"(5) by blast
6669qed
6670
6671AOT_theorem "oa-contingent:6": O!-  A!-
6672proof (rule "=-infix"[THEN "dfI"]; rule "raa-cor:2")
6673  AOT_assume 1: O!- = A!-
6674  fix x
6675  AOT_have A!-x  O!-x
6676    apply (rule "rule=E"[rotated, OF 1])
6677    by (fact "oth-class-taut:3:a")
6678  AOT_hence A!-x  ¬A!-x
6679    using "oa-contingent:7" "≡E" by fast
6680  AOT_thus (A!-x  ¬A!-x) & ¬(A!-x  ¬A!-x)
6681    using "oth-class-taut:3:c" "&I" by blast
6682qed
6683
6684AOT_theorem "oa-contingent:8": Contingent(O!-)
6685  using "thm-cont-prop:3"[unvarify F, OF "oa-exist:1", THEN "≡E"(1),
6686          OF "oa-contingent:4"].
6687
6688AOT_theorem "oa-contingent:9": Contingent(A!-)
6689  using "thm-cont-prop:3"[unvarify F, OF "oa-exist:2", THEN "≡E"(1),
6690          OF "oa-contingent:5"].
6691
6692AOT_define WeaklyContingent :: Π  φ (WeaklyContingent'(_'))
6693  "df-cont-nec":
6694  WeaklyContingent([F]) df Contingent([F]) & x ([F]x  [F]x)
6695
6696AOT_theorem "cont-nec-fact1:1":
6697  WeaklyContingent([F])  WeaklyContingent([F]-)
6698proof -
6699  AOT_have WeaklyContingent([F])  Contingent([F]) & x ([F]x  [F]x)
6700    using "df-cont-nec"[THEN "≡Df"] by blast
6701  also AOT_have ...  Contingent([F]-) & x ([F]x  [F]x)
6702    apply (rule "oth-class-taut:8:f"[THEN "≡E"(2)]; rule "→I")
6703    using "thm-cont-prop:3".
6704  also AOT_have   Contingent([F]-) & x ([F]-x  [F]-x)
6705  proof (rule "oth-class-taut:8:e"[THEN "≡E"(2)];
6706         rule "→I"; rule "≡I"; rule "→I"; rule GEN; rule "→I")
6707    fix x
6708    AOT_assume 0: x ([F]x  [F]x)
6709    AOT_assume 1: [F]-x
6710    AOT_have ¬[F]x
6711      by (AOT_subst (reverse) ¬[F]x [F]-x)
6712         (auto simp add: "thm-relation-negation:1" 1)
6713    AOT_hence 2: ¬[F]x
6714      using "KBasic:11"[THEN "≡E"(2)] by blast
6715    AOT_show [F]-x
6716    proof (rule "raa-cor:1")
6717      AOT_assume 3: ¬[F]-x
6718      AOT_have ¬¬[F]x
6719        by (AOT_subst (reverse) ¬[F]x [F]-x)
6720           (auto simp add: "thm-relation-negation:1" 3)
6721      AOT_hence [F]x
6722        using "conventions:5"[THEN "dfI"] by simp
6723      AOT_hence [F]x using 0 "∀E" "→E" by fast
6724      AOT_thus [F]x & ¬[F]x using "&I" 2 by blast
6725    qed
6726  next
6727    fix x
6728    AOT_assume 0: x ([F]-x  [F]-x)
6729    AOT_assume 1: [F]x
6730    AOT_have ¬[F]-x
6731      by (AOT_subst ¬[F]-x [F]x)
6732         (auto simp: "thm-relation-negation:2" 1)
6733    AOT_hence 2: ¬[F]-x
6734      using "KBasic:11"[THEN "≡E"(2)] by blast
6735    AOT_show [F]x
6736    proof (rule "raa-cor:1")
6737      AOT_assume 3: ¬[F]x
6738      AOT_have ¬¬[F]-x
6739        by (AOT_subst ¬[F]-x [F]x)
6740           (auto simp add: "thm-relation-negation:2" 3)
6741      AOT_hence [F]-x
6742        using "conventions:5"[THEN "dfI"] by simp
6743      AOT_hence [F]-x using 0 "∀E" "→E" by fast
6744      AOT_thus [F]-x & ¬[F]-x using "&I" 2 by blast
6745    qed
6746  qed
6747  also AOT_have   WeaklyContingent([F]-)
6748    using "df-cont-nec"[THEN "≡Df", symmetric] by blast
6749  finally show ?thesis.
6750qed
6751
6752AOT_theorem "cont-nec-fact1:2":
6753  (WeaklyContingent([F]) & ¬WeaklyContingent([G]))  F  G
6754proof (rule "→I"; rule "=-infix"[THEN "dfI"]; rule "raa-cor:2")
6755  AOT_assume 1: WeaklyContingent([F]) & ¬WeaklyContingent([G])
6756  AOT_hence WeaklyContingent([F]) using "&E" by blast
6757  moreover AOT_assume F = G
6758  ultimately AOT_have WeaklyContingent([G])
6759    using "rule=E" by blast
6760  AOT_thus WeaklyContingent([G]) & ¬WeaklyContingent([G])
6761    using 1 "&I" "&E" by blast
6762qed
6763
6764AOT_theorem "cont-nec-fact2:1": WeaklyContingent(O!)
6765proof (rule "df-cont-nec"[THEN "dfI"]; rule "&I")
6766  AOT_show Contingent(O!)
6767    using "oa-contingent:4".
6768next
6769  AOT_show x ([O!]x  [O!]x)
6770    apply (rule GEN; rule "→I")
6771    using "oa-facts:5"[THEN "≡E"(1)] by blast
6772qed
6773
6774
6775AOT_theorem "cont-nec-fact2:2": WeaklyContingent(A!)
6776proof (rule "df-cont-nec"[THEN "dfI"]; rule "&I")
6777  AOT_show Contingent(A!)
6778    using "oa-contingent:5".
6779next
6780  AOT_show x ([A!]x  [A!]x)
6781    apply (rule GEN; rule "→I")
6782    using "oa-facts:6"[THEN "≡E"(1)] by blast
6783qed
6784
6785AOT_theorem "cont-nec-fact2:3": ¬WeaklyContingent(E!)
6786proof (rule "df-cont-nec"[THEN "≡Df",
6787                          THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6788                          THEN "≡E"(2)];
6789       rule DeMorgan(1)[THEN "≡E"(2)]; rule "∨I"(2); rule "raa-cor:2")
6790  AOT_have x (E!x & ¬𝒜E!x) using "qml:4"[axiom_inst].
6791  AOT_hence x (E!x & ¬𝒜E!x) using "BF◇"[THEN "→E"] by blast
6792  then AOT_obtain a where (E!a & ¬𝒜E!a) using "∃E"[rotated] by blast
6793  AOT_hence 1: E!a & ¬𝒜E!a using "KBasic2:3"[THEN "→E"] by simp
6794  moreover AOT_assume x ([E!]x  [E!]x)
6795  ultimately AOT_have E!a using "&E" "∀E" "→E" by fast
6796  AOT_hence 𝒜E!a using "nec-imp-act"[THEN "→E"] by blast
6797  AOT_hence 𝒜E!a using "qml-act:1"[axiom_inst, THEN "→E"] by blast
6798  moreover AOT_have ¬𝒜E!a
6799    using "KBasic:11"[THEN "≡E"(2)] 1[THEN "&E"(2)] by meson
6800  ultimately AOT_have 𝒜E!a & ¬𝒜E!a using "&I" by blast
6801  AOT_thus p & ¬p for p using "raa-cor:1" by blast
6802qed
6803
6804AOT_theorem "cont-nec-fact2:4": ¬WeaklyContingent(L)
6805  apply (rule "df-cont-nec"[THEN "≡Df",
6806                            THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6807                            THEN "≡E"(2)];
6808       rule DeMorgan(1)[THEN "≡E"(2)]; rule "∨I"(1))
6809  apply (rule "contingent-properties:4"
6810                [THEN "≡Df",
6811                 THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6812                 THEN "≡E"(2)])
6813  apply (rule DeMorgan(1)[THEN "≡E"(2)];
6814         rule "∨I"(2);
6815         rule "useful-tautologies:2"[THEN "→E"])
6816  using "thm-noncont-e-e:3"[THEN "contingent-properties:3"[THEN "dfE"]].
6817
6818AOT_theorem "cont-nec-fact2:5": O!  E! & O!  E!- & O!  L & O!  L-
6819proof -
6820  AOT_have 1: L
6821    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
6822  {
6823    fix φ and Π Π' :: <κ>
6824    AOT_have A: ¬(φ{Π'}  φ{Π}) if  φ{Π} and ¬φ{Π'}
6825    proof (rule "raa-cor:2")
6826      AOT_assume φ{Π'}  φ{Π}
6827      AOT_hence φ{Π'} using that(1) "≡E" by blast
6828      AOT_thus φ{Π'} & ¬φ{Π'} using that(2) "&I" by blast
6829    qed
6830    AOT_have Π'  Π if Π and Π' and φ{Π} and ¬φ{Π'}
6831      using "pos-not-equiv-ne:4"[unvarify F G, THEN "→E",
6832                                 OF that(1,2), OF A[OF that(3, 4)]].
6833  } note 0 = this
6834  show ?thesis
6835    apply(safe intro!: "&I"; rule 0)
6836    apply "cqt:2"
6837    using "oa-exist:1" apply blast
6838    using "cont-nec-fact2:3" apply fast
6839    apply (rule "useful-tautologies:2"[THEN "→E"])
6840    using "cont-nec-fact2:1" apply fast
6841    using "rel-neg-T:3" apply fast
6842    using "oa-exist:1" apply blast
6843    using "cont-nec-fact1:1"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6844            THEN "≡E"(1), rotated, OF "cont-nec-fact2:3"] apply fast
6845    apply (rule "useful-tautologies:2"[THEN "→E"])
6846    using "cont-nec-fact2:1" apply blast
6847    apply (rule "=dfI"(2)[OF L_def]; "cqt:2[lambda]")
6848    using "oa-exist:1" apply fast
6849    using "cont-nec-fact2:4" apply fast
6850    apply (rule "useful-tautologies:2"[THEN "→E"])
6851    using "cont-nec-fact2:1" apply fast
6852    using "rel-neg-T:3" apply fast
6853    using "oa-exist:1" apply fast
6854     apply (rule "cont-nec-fact1:1"[unvarify F,
6855                    THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6856                    THEN "≡E"(1), rotated, OF "cont-nec-fact2:4"])
6857    apply (rule "=dfI"(2)[OF L_def]; "cqt:2[lambda]")
6858    apply (rule "useful-tautologies:2"[THEN "→E"])
6859    using "cont-nec-fact2:1" by blast
6860qed
6861
6862AOT_theorem "cont-nec-fact2:6": A!  E! & A!  E!- & A!  L & A!  L-
6863proof -
6864  AOT_have 1: L
6865    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
6866  {
6867    fix φ and Π Π' :: <κ>
6868    AOT_have A: ¬(φ{Π'}  φ{Π}) if  φ{Π} and ¬φ{Π'}
6869    proof (rule "raa-cor:2")
6870      AOT_assume φ{Π'}  φ{Π}
6871      AOT_hence φ{Π'} using that(1) "≡E" by blast
6872      AOT_thus φ{Π'} & ¬φ{Π'} using that(2) "&I" by blast
6873    qed
6874    AOT_have Π'  Π if Π and Π' and φ{Π} and ¬φ{Π'}
6875      using "pos-not-equiv-ne:4"[unvarify F G, THEN "→E",
6876              OF that(1,2), OF A[OF that(3, 4)]].
6877  } note 0 = this
6878  show ?thesis
6879    apply(safe intro!: "&I"; rule 0)
6880    apply "cqt:2"
6881    using "oa-exist:2" apply blast
6882    using "cont-nec-fact2:3" apply fast
6883    apply (rule "useful-tautologies:2"[THEN "→E"])
6884    using "cont-nec-fact2:2" apply fast
6885    using "rel-neg-T:3" apply fast
6886    using "oa-exist:2" apply blast
6887    using "cont-nec-fact1:1"[THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6888            THEN "≡E"(1), rotated, OF "cont-nec-fact2:3"] apply fast
6889    apply (rule "useful-tautologies:2"[THEN "→E"])
6890    using "cont-nec-fact2:2" apply blast
6891    apply (rule "=dfI"(2)[OF L_def]; "cqt:2[lambda]")
6892    using "oa-exist:2" apply fast
6893    using "cont-nec-fact2:4" apply fast
6894    apply (rule "useful-tautologies:2"[THEN "→E"])
6895    using "cont-nec-fact2:2" apply fast
6896    using "rel-neg-T:3" apply fast
6897    using "oa-exist:2" apply fast
6898     apply (rule "cont-nec-fact1:1"[unvarify F,
6899              THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
6900              THEN "≡E"(1), rotated, OF "cont-nec-fact2:4"])
6901     apply (rule "=dfI"(2)[OF L_def]; "cqt:2[lambda]")
6902    apply (rule "useful-tautologies:2"[THEN "→E"])
6903    using "cont-nec-fact2:2" by blast
6904qed
6905
6906AOT_define necessary_or_contingently_false :: φ  φ ("Δ_" [49] 54)
6907  Δp df p  (¬𝒜p & p)
6908
6909AOT_theorem sixteen:
6910 shows F1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16 (
6911  «F1::<κ>»  F2 & F1  F3 & F1  F4 & F1  F5 & F1  F6 & F1  F7 &
6912    F1  F8 & F1  F9 & F1  F10 & F1  F11 & F1  F12 & F1  F13 &
6913    F1  F14 & F1  F15 & F1  F16 &
6914  F2  F3 & F2  F4 & F2  F5 & F2  F6 & F2  F7 & F2  F8 &
6915    F2  F9 & F2  F10 & F2  F11 & F2  F12 & F2  F13 & F2  F14 &
6916    F2  F15 & F2  F16 &
6917  F3  F4 & F3  F5 & F3  F6 & F3  F7 & F3  F8 & F3  F9 & F3  F10 &
6918    F3  F11 & F3  F12 & F3  F13 & F3  F14 & F3  F15 & F3  F16 &
6919  F4  F5 & F4  F6 & F4  F7 & F4  F8 & F4  F9 & F4  F10 & F4  F11 &
6920    F4  F12 & F4  F13 & F4  F14 & F4  F15 & F4  F16 &
6921  F5  F6 & F5  F7 & F5  F8 & F5  F9 & F5  F10 & F5  F11 & F5  F12 &
6922    F5  F13 & F5  F14 & F5  F15 & F5  F16 &
6923  F6  F7 & F6  F8 & F6  F9 & F6  F10 & F6  F11 & F6  F12 & F6  F13 &
6924    F6  F14 & F6  F15 & F6  F16 &
6925  F7  F8 & F7  F9 & F7  F10 & F7  F11 & F7  F12 & F7  F13 & F7  F14 &
6926    F7  F15 & F7  F16 &
6927  F8  F9 & F8  F10 & F8  F11 & F8  F12 & F8  F13 & F8  F14 & F8  F15 &
6928    F8  F16 &
6929  F9  F10 & F9  F11 & F9  F12 & F9  F13 & F9  F14 & F9  F15 & F9  F16 &
6930  F10  F11 & F10  F12 & F10  F13 & F10  F14 & F10  F15 & F10  F16 &
6931  F11  F12 & F11  F13 & F11  F14 & F11  F15 & F11  F16 &
6932  F12  F13 & F12  F14 & F12  F15 & F12  F16 &
6933  F13  F14 & F13  F15 & F13  F16 &
6934  F14  F15 & F14  F16 &
6935  F15  F16) 
6936proof -
6937  AOT_have Delta_pos: Δφ  φ for φ
6938  proof(rule "→I")
6939    AOT_assume Δφ
6940    AOT_hence φ  (¬𝒜φ & φ)
6941      using "dfE"[OF necessary_or_contingently_false] by blast
6942    moreover {
6943      AOT_assume φ
6944      AOT_hence φ
6945        by (metis "B◇" "T◇" "vdash-properties:10")
6946    }
6947    moreover {
6948      AOT_assume ¬𝒜φ & φ
6949      AOT_hence φ
6950        using "&E" by blast
6951    }
6952    ultimately AOT_show φ
6953      by (metis "∨E"(2) "raa-cor:1") 
6954  qed
6955
6956  AOT_have act_and_not_nec_not_delta: ¬Δφ if 𝒜φ and ¬φ for φ
6957    using "dfE" "&E"(1) "∨E"(2) necessary_or_contingently_false
6958          "raa-cor:3" that(1,2) by blast
6959  AOT_have act_and_pos_not_not_delta: ¬Δφ if 𝒜φ and ¬φ for φ
6960    using "KBasic:11" act_and_not_nec_not_delta "≡E"(2) that(1,2) by blast
6961  AOT_have impossible_delta: ¬Δφ if ¬φ for φ
6962    using Delta_pos "modus-tollens:1" that by blast
6963  AOT_have not_act_and_pos_delta: Δφ if ¬𝒜φ and φ for φ
6964    by (meson "dfI" "&I" "∨I"(2) necessary_or_contingently_false that(1,2))
6965  AOT_have nec_delta: Δφ if φ for φ
6966    using "dfI" "∨I"(1) necessary_or_contingently_false that by blast
6967
6968  AOT_obtain a where a_prop: A!a
6969    using "A-objects"[axiom_inst] "∃E"[rotated] "&E" by blast
6970  AOT_obtain b where b_prop: [E!]b & ¬𝒜[E!]b
6971    using "pos-not-pna:3" using "∃E"[rotated] by blast
6972
6973  AOT_have b_ord: [O!]b
6974  proof(rule "=dfI"(2)[OF AOT_ordinary])
6975    AOT_show x [E!]x] by "cqt:2[lambda]"
6976  next
6977    AOT_show x [E!]x]b
6978    proof (rule "β←C"(1); ("cqt:2[lambda]")?)
6979      AOT_show b by (rule "cqt:2[const_var]"[axiom_inst])
6980      AOT_show [E!]b by (fact b_prop[THEN "&E"(1)])
6981    qed
6982  qed
6983
6984  AOT_have nec_not_L_neg: ¬[L-]x for x
6985    using "thm-noncont-e-e:2" "contingent-properties:2"[THEN "dfE"] "&E"
6986          CBF[THEN "→E"] "∀E" by blast
6987  AOT_have nec_L: [L]x for x
6988    using "thm-noncont-e-e:1" "contingent-properties:1"[THEN "dfE"]
6989      CBF[THEN "→E"] "∀E" by blast
6990
6991  AOT_have act_ord_b: 𝒜[O!]b
6992    using b_ord "≡E"(1) "oa-facts:7" by blast
6993  AOT_have delta_ord_b: Δ[O!]b
6994    by (meson "dfI" b_ord "∨I"(1) necessary_or_contingently_false
6995              "oa-facts:1" "→E")
6996  AOT_have not_act_ord_a: ¬𝒜[O!]a
6997    by (meson a_prop "≡E"(1) "≡E"(3) "oa-contingent:3" "oa-facts:7")
6998  AOT_have not_delta_ord_a: ¬Δ[O!]a
6999    by (metis Delta_pos "≡E"(4) not_act_ord_a "oa-facts:3" "oa-facts:7"
7000              "reductio-aa:1" "→E")
7001
7002  AOT_have not_act_abs_b: ¬𝒜[A!]b
7003    by (meson b_ord "≡E"(1) "≡E"(3) "oa-contingent:2" "oa-facts:8")
7004  AOT_have not_delta_abs_b: ¬Δ[A!]b
7005  proof(rule "raa-cor:2")
7006    AOT_assume Δ[A!]b
7007    AOT_hence [A!]b
7008      by (metis Delta_pos "vdash-properties:10")
7009    AOT_thus [A!]b & ¬[A!]b
7010      by (metis b_ord "&I" "≡E"(1) "oa-contingent:2"
7011                "oa-facts:4" "→E")
7012  qed
7013  AOT_have act_abs_a: 𝒜[A!]a
7014    using a_prop "≡E"(1) "oa-facts:8" by blast
7015  AOT_have delta_abs_a: Δ[A!]a
7016    by (metis "dfI" a_prop "oa-facts:2" "→E" "∨I"(1)
7017              necessary_or_contingently_false)
7018
7019  AOT_have not_act_concrete_b: ¬𝒜[E!]b
7020    using b_prop "&E"(2) by blast
7021  AOT_have delta_concrete_b: Δ[E!]b
7022  proof (rule "dfI"[OF necessary_or_contingently_false];
7023         rule "∨I"(2); rule "&I")
7024    AOT_show ¬𝒜[E!]b using b_prop "&E"(2) by blast
7025  next
7026    AOT_show [E!]b using b_prop "&E"(1) by blast
7027  qed
7028  AOT_have not_act_concrete_a: ¬𝒜[E!]a
7029  proof (rule "raa-cor:2")
7030    AOT_assume 𝒜[E!]a
7031    AOT_hence 1: [E!]a by (metis "Act-Sub:3" "→E")
7032    AOT_have [A!]a by (simp add: a_prop)
7033    AOT_hence x ¬[E!]x]a
7034      by (rule "=dfE"(2)[OF AOT_abstract, rotated]) "cqt:2"
7035    AOT_hence ¬[E!]a using "β→C"(1) by blast
7036    AOT_thus [E!]a & ¬[E!]a using 1 "&I" by blast
7037  qed
7038  AOT_have not_delta_concrete_a: ¬Δ[E!]a
7039  proof (rule "raa-cor:2")
7040    AOT_assume Δ[E!]a
7041    AOT_hence 1: [E!]a by (metis Delta_pos "vdash-properties:10")
7042    AOT_have [A!]a by (simp add: a_prop)
7043    AOT_hence x ¬[E!]x]a
7044      by (rule "=dfE"(2)[OF AOT_abstract, rotated]) "cqt:2[lambda]"
7045    AOT_hence ¬[E!]a using "β→C"(1) by blast
7046    AOT_thus [E!]a & ¬[E!]a using 1 "&I" by blast
7047  qed
7048
7049  AOT_have not_act_q_zero: ¬𝒜q0
7050    by (meson "log-prop-prop:2" "pos-not-pna:1"
7051              q0_def "reductio-aa:1" "rule-id-df:2:a[zero]")
7052  AOT_have delta_q_zero: Δq0
7053  proof(rule "dfI"[OF necessary_or_contingently_false];
7054        rule "∨I"(2); rule "&I")
7055    AOT_show ¬𝒜q0 using not_act_q_zero.
7056    AOT_show q0 by (meson "&E"(1) q0_prop)
7057  qed
7058  AOT_have act_not_q_zero: 𝒜¬q0
7059    using "Act-Basic:1" "∨E"(2) not_act_q_zero by blast
7060  AOT_have not_delta_not_q_zero: ¬Δ¬q0
7061    using "dfE" "conventions:5" "Act-Basic:1" act_and_not_nec_not_delta
7062          "&E"(1) "∨E"(2) not_act_q_zero q0_prop by blast
7063
7064  AOT_have [L-] by (simp add: "rel-neg-T:3")
7065  moreover AOT_have ¬𝒜[L-]b & ¬Δ[L-]b & ¬𝒜[L-]a & ¬Δ[L-]a
7066  proof (safe intro!: "&I")
7067    AOT_show ¬𝒜[L-]b
7068      by (meson "≡E"(1) "logic-actual-nec:1"[axiom_inst] "nec-imp-act"
7069                nec_not_L_neg "→E")
7070    AOT_show ¬Δ[L-]b
7071      by (meson Delta_pos "KBasic2:1" "≡E"(1)
7072                "modus-tollens:1" nec_not_L_neg)
7073    AOT_show ¬𝒜[L-]a
7074      by (meson "≡E"(1) "logic-actual-nec:1"[axiom_inst]
7075                "nec-imp-act" nec_not_L_neg "→E")
7076    AOT_show ¬Δ[L-]a
7077      using Delta_pos "KBasic2:1" "≡E"(1) "modus-tollens:1"
7078            nec_not_L_neg by blast
7079  qed
7080  ultimately AOT_obtain F0 where ¬𝒜[F0]b & ¬Δ[F0]b & ¬𝒜[F0]a & ¬Δ[F0]a
7081    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7082  AOT_hence ¬𝒜[F0]b and ¬Δ[F0]b and ¬𝒜[F0]a and ¬Δ[F0]a
7083    using "&E" by blast+
7084  note props = this
7085
7086  let  = "«y [A!]y & q0]»"
7087  AOT_modally_strict {
7088    AOT_have [«»] by "cqt:2[lambda]"
7089  } note 1 = this
7090  moreover AOT_have ¬𝒜[«»]b & ¬Δ[«»]b & ¬𝒜[«»]a & Δ[«»]a
7091  proof (safe intro!: "&I"; AOT_subst y A!y & q0]x A!x & q0 for: x)
7092    AOT_show ¬𝒜([A!]b & q0)
7093      using "Act-Basic:2" "&E"(1) "≡E"(1) not_act_abs_b "raa-cor:3" by blast
7094  next AOT_show ¬Δ([A!]b & q0)
7095      by (metis Delta_pos "KBasic2:3" "&E"(1) "≡E"(4) not_act_abs_b
7096                "oa-facts:4" "oa-facts:8" "raa-cor:3" "→E")
7097  next AOT_show ¬𝒜([A!]a & q0)
7098      using "Act-Basic:2" "&E"(2) "≡E"(1) not_act_q_zero
7099            "raa-cor:3" by blast
7100  next AOT_show Δ([A!]a & q0)
7101    proof (rule not_act_and_pos_delta)
7102      AOT_show ¬𝒜([A!]a & q0)
7103        using "Act-Basic:2" "&E"(2) "≡E"(4) not_act_q_zero
7104              "raa-cor:3" by blast
7105    next AOT_show ([A!]a & q0)
7106        by (metis "&I" "→E" Delta_pos "KBasic:16" "&E"(1) delta_abs_a
7107                  "≡E"(1) "oa-facts:6" q0_prop)
7108    qed
7109  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7110  ultimately AOT_obtain F1 where ¬𝒜[F1]b & ¬Δ[F1]b & ¬𝒜[F1]a & Δ[F1]a
7111    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7112  AOT_hence ¬𝒜[F1]b and ¬Δ[F1]b and ¬𝒜[F1]a and Δ[F1]a
7113    using "&E" by blast+
7114  note props = props this
7115
7116  let  = "«y [A!]y & ¬q0]»"
7117  AOT_modally_strict {
7118    AOT_have [«»] by "cqt:2[lambda]"
7119  } note 1 = this
7120  moreover AOT_have ¬𝒜[«»]b & ¬Δ[«»]b & 𝒜[«»]a & ¬Δ[«»]a
7121  proof (safe intro!: "&I"; AOT_subst y A!y & ¬q0]x A!x & ¬q0 for: x)
7122    AOT_show ¬𝒜([A!]b & ¬q0)
7123      using "Act-Basic:2" "&E"(1) "≡E"(1) not_act_abs_b "raa-cor:3" by blast
7124  next AOT_show ¬Δ([A!]b & ¬q0)
7125      by (meson "RM◇" Delta_pos "Conjunction Simplification"(1) "≡E"(4)
7126                "modus-tollens:1" not_act_abs_b "oa-facts:4" "oa-facts:8")
7127  next AOT_show 𝒜([A!]a & ¬q0)
7128      by (metis "Act-Basic:1" "Act-Basic:2" act_abs_a "&I" "∨E"(2)
7129                "≡E"(3) not_act_q_zero "raa-cor:3")
7130  next AOT_show ¬Δ([A!]a & ¬q0)
7131    proof (rule act_and_not_nec_not_delta)
7132      AOT_show 𝒜([A!]a & ¬q0)
7133        by (metis "Act-Basic:1" "Act-Basic:2" act_abs_a "&I" "∨E"(2)
7134                  "≡E"(3) not_act_q_zero "raa-cor:3")
7135    next
7136      AOT_show ¬([A!]a & ¬q0)
7137        by (metis "KBasic2:1" "KBasic:3" "&E"(1) "&E"(2) "≡E"(4)
7138                  q0_prop "raa-cor:3")
7139    qed
7140  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7141  ultimately AOT_obtain F2 where ¬𝒜[F2]b & ¬Δ[F2]b & 𝒜[F2]a & ¬Δ[F2]a
7142    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7143  AOT_hence ¬𝒜[F2]b and ¬Δ[F2]b and 𝒜[F2]a and ¬Δ[F2]a
7144    using "&E" by blast+
7145  note props = props this
7146
7147  AOT_have abstract_prop: ¬𝒜[A!]b & ¬Δ[A!]b & 𝒜[A!]a & Δ[A!]a
7148    using act_abs_a "&I" delta_abs_a not_act_abs_b not_delta_abs_b
7149    by presburger
7150  then AOT_obtain F3 where ¬𝒜[F3]b & ¬Δ[F3]b & 𝒜[F3]a & Δ[F3]a
7151    using "∃I"(1)[rotated, THEN "∃E"[rotated]] "oa-exist:2" by fastforce
7152  AOT_hence ¬𝒜[F3]b and ¬Δ[F3]b and 𝒜[F3]a and Δ[F3]a
7153    using "&E" by blast+
7154  note props = props this
7155
7156  AOT_have ¬𝒜[E!]b & Δ[E!]b & ¬𝒜[E!]a & ¬Δ[E!]a
7157    by (meson "&I" delta_concrete_b not_act_concrete_a
7158              not_act_concrete_b not_delta_concrete_a)
7159  then AOT_obtain F4 where ¬𝒜[F4]b & Δ[F4]b & ¬𝒜[F4]a & ¬Δ[F4]a
7160    using "∃I"(1)[rotated, THEN "∃E"[rotated]]
7161    by fastforce
7162  AOT_hence ¬𝒜[F4]b and Δ[F4]b and ¬𝒜[F4]a and ¬Δ[F4]a
7163    using "&E" by blast+
7164  note props = props this
7165
7166  AOT_modally_strict {
7167    AOT_have y q0] by "cqt:2[lambda]"
7168  } note 1 = this
7169  moreover AOT_have ¬𝒜y q0]b & Δy q0]b & ¬𝒜y q0]a & Δy q0]a
7170    by (safe intro!: "&I"; AOT_subst y q0]b q0 for: b)
7171       (auto simp: not_act_q_zero delta_q_zero  "beta-C-meta"[THEN "→E", OF 1])
7172  ultimately AOT_obtain F5 where ¬𝒜[F5]b & Δ[F5]b & ¬𝒜[F5]a & Δ[F5]a
7173    using "∃I"(1)[rotated, THEN "∃E"[rotated]]
7174    by fastforce
7175  AOT_hence ¬𝒜[F5]b and Δ[F5]b and ¬𝒜[F5]a and Δ[F5]a
7176    using "&E" by blast+
7177  note props = props this
7178
7179  let  = "«y [E!]y  ([A!]y & ¬q0)]»"
7180  AOT_modally_strict {
7181    AOT_have [«»] by "cqt:2[lambda]"
7182  } note 1 = this
7183  moreover AOT_have ¬𝒜[«»]b & Δ[«»]b & 𝒜[«»]a & ¬Δ[«»]a
7184  proof(safe intro!: "&I";
7185        AOT_subst y E!y  (A!y & ¬q0)]x E!x  (A!x & ¬q0) for: x)
7186    AOT_have 𝒜¬([A!]b & ¬q0)
7187      by (metis "Act-Basic:1" "Act-Basic:2" abstract_prop "&E"(1) "∨E"(2)
7188                "≡E"(1) "raa-cor:3")
7189    moreover AOT_have ¬𝒜[E!]b
7190      using b_prop "&E"(2) by blast
7191    ultimately AOT_have 2: 𝒜(¬[E!]b & ¬([A!]b & ¬q0))
7192      by (metis "Act-Basic:2" "Act-Sub:1" "&I" "≡E"(3) "raa-cor:1")
7193    AOT_have 𝒜¬([E!]b  ([A!]b & ¬q0))
7194      by (AOT_subst ¬([E!]b  ([A!]b & ¬q0)) ¬[E!]b & ¬([A!]b & ¬q0))
7195         (auto simp: "oth-class-taut:5:d" 2)
7196    AOT_thus ¬𝒜([E!]b  ([A!]b & ¬q0))
7197      by (metis "¬¬I" "Act-Sub:1" "≡E"(4))
7198  next
7199    AOT_show Δ([E!]b  ([A!]b & ¬q0))
7200    proof (rule not_act_and_pos_delta)
7201      AOT_show ¬𝒜([E!]b  ([A!]b & ¬q0))
7202        by (metis "Act-Basic:2" "Act-Basic:9" "∨E"(2) "raa-cor:3"
7203                  "Conjunction Simplification"(1) "≡E"(4)
7204                  "modus-tollens:1" not_act_abs_b not_act_concrete_b)
7205    next
7206      AOT_show ([E!]b  ([A!]b & ¬q0))
7207        using "KBasic2:2" b_prop "&E"(1) "∨I"(1) "≡E"(3) "raa-cor:3" by blast
7208    qed
7209  next AOT_show 𝒜([E!]a  ([A!]a & ¬q0))
7210      by (metis "Act-Basic:1" "Act-Basic:2" "Act-Basic:9" act_abs_a "&I"
7211                "∨I"(2) "∨E"(2) "≡E"(3) not_act_q_zero "raa-cor:1")
7212  next AOT_show ¬Δ([E!]a  ([A!]a & ¬q0))
7213    proof (rule act_and_not_nec_not_delta)
7214      AOT_show 𝒜([E!]a  ([A!]a & ¬q0))
7215        by (metis "Act-Basic:1" "Act-Basic:2" "Act-Basic:9" act_abs_a "&I"
7216                  "∨I"(2) "∨E"(2) "≡E"(3) not_act_q_zero "raa-cor:1")
7217    next
7218      AOT_have ¬[E!]a
7219        by (metis "dfI" "conventions:5" "&I" "∨I"(2)
7220                  necessary_or_contingently_false
7221                  not_act_concrete_a not_delta_concrete_a "raa-cor:3")
7222      moreover AOT_have ¬([A!]a & ¬q0)
7223        by (metis "KBasic2:1" "KBasic:11" "KBasic:3"
7224                  "&E"(1,2) "≡E"(1) q0_prop "raa-cor:3")
7225      ultimately AOT_have (¬[E!]a & ¬([A!]a & ¬q0))
7226        by (metis "KBasic:16" "&I" "vdash-properties:10")
7227      AOT_hence ¬([E!]a  ([A!]a & ¬q0))
7228        by (metis "RE◇" "≡E"(2) "oth-class-taut:5:d")
7229      AOT_thus ¬([E!]a  ([A!]a & ¬q0))
7230        by (metis "KBasic:12" "≡E"(1) "raa-cor:3")
7231    qed
7232  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7233  ultimately AOT_obtain F6 where ¬𝒜[F6]b & Δ[F6]b & 𝒜[F6]a & ¬Δ[F6]a
7234    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7235  AOT_hence ¬𝒜[F6]b and Δ[F6]b and 𝒜[F6]a and ¬Δ[F6]a
7236    using "&E" by blast+
7237  note props = props this
7238
7239  let  = "«y [A!]y  [E!]y]»"
7240  AOT_modally_strict {
7241    AOT_have [«»] by "cqt:2[lambda]"
7242  } note 1 = this
7243  moreover AOT_have ¬𝒜[«»]b & Δ[«»]b & 𝒜[«»]a & Δ[«»]a
7244  proof(safe intro!: "&I"; AOT_subst y A!y  E!y]x A!x  E!x for: x)
7245    AOT_show ¬𝒜([A!]b  [E!]b)
7246      using "Act-Basic:9" "∨E"(2) "≡E"(4) not_act_abs_b
7247            not_act_concrete_b "raa-cor:3" by blast
7248  next AOT_show Δ([A!]b  [E!]b)
7249    proof (rule not_act_and_pos_delta)
7250      AOT_show ¬𝒜([A!]b  [E!]b)
7251        using "Act-Basic:9" "∨E"(2) "≡E"(4) not_act_abs_b
7252              not_act_concrete_b "raa-cor:3" by blast
7253    next AOT_show ([A!]b  [E!]b)
7254        using "KBasic2:2" b_prop "&E"(1) "∨I"(2) "≡E"(2) by blast
7255    qed
7256  next AOT_show 𝒜([A!]a  [E!]a)
7257      by (meson "Act-Basic:9" act_abs_a "∨I"(1) "≡E"(2))
7258  next AOT_show Δ([A!]a  [E!]a)
7259    proof (rule nec_delta)
7260      AOT_show ([A!]a  [E!]a)
7261        by (metis "KBasic:15" act_abs_a act_and_not_nec_not_delta
7262                  "Disjunction Addition"(1) delta_abs_a "raa-cor:3" "→E")
7263    qed
7264  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7265  ultimately AOT_obtain F7 where ¬𝒜[F7]b & Δ[F7]b & 𝒜[F7]a & Δ[F7]a
7266    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7267  AOT_hence ¬𝒜[F7]b and Δ[F7]b and 𝒜[F7]a and Δ[F7]a
7268    using "&E" by blast+
7269  note props = props this
7270
7271  let  = "«y [O!]y & ¬[E!]y]»"
7272  AOT_modally_strict {
7273    AOT_have [«»] by "cqt:2[lambda]"
7274  } note 1 = this
7275  moreover AOT_have 𝒜[«»]b & ¬Δ[«»]b & ¬𝒜[«»]a & ¬Δ[«»]a
7276  proof(safe intro!: "&I"; AOT_subst y O!y & ¬E!y]x O!x & ¬E!x for: x)
7277    AOT_show 𝒜([O!]b & ¬[E!]b)
7278      by (metis "Act-Basic:1" "Act-Basic:2" act_ord_b "&I" "∨E"(2)
7279                "≡E"(3) not_act_concrete_b "raa-cor:3")
7280  next AOT_show ¬Δ([O!]b & ¬[E!]b)
7281      by (metis (no_types, opaque_lifting) "conventions:5" "Act-Sub:1" "RM:1"
7282                act_and_not_nec_not_delta "act-conj-act:3"
7283                act_ord_b b_prop "&I" "&E"(1) "Conjunction Simplification"(2)
7284                "df-rules-formulas[3]"
7285                "≡E"(3) "raa-cor:1" "→E")
7286  next AOT_show ¬𝒜([O!]a & ¬[E!]a)
7287      using "Act-Basic:2" "&E"(1) "≡E"(1) not_act_ord_a "raa-cor:3" by blast
7288  next AOT_have ¬([O!]a & ¬[E!]a)
7289      by (metis "KBasic2:3" "&E"(1) "≡E"(4) not_act_ord_a "oa-facts:3"
7290                "oa-facts:7" "raa-cor:3" "vdash-properties:10")
7291    AOT_thus ¬Δ([O!]a & ¬[E!]a)
7292      by (rule impossible_delta)
7293  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7294  ultimately AOT_obtain F8 where 𝒜[F8]b & ¬Δ[F8]b & ¬𝒜[F8]a & ¬Δ[F8]a
7295    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7296  AOT_hence 𝒜[F8]b and ¬Δ[F8]b and ¬𝒜[F8]a and ¬Δ[F8]a
7297    using "&E" by blast+
7298  note props = props this
7299
7300  let  = "«y ¬[E!]y & ([O!]y  q0)]»"
7301  AOT_modally_strict {
7302    AOT_have [«»] by "cqt:2[lambda]"
7303  } note 1 = this
7304  moreover AOT_have 𝒜[«»]b & ¬Δ[«»]b & ¬𝒜[«»]a & Δ[«»]a
7305  proof(safe intro!: "&I";
7306        AOT_subst y ¬E!y & (O!y  q0)]x ¬E!x & (O!x  q0) for: x)
7307    AOT_show 𝒜(¬[E!]b & ([O!]b  q0))
7308      by (metis "Act-Basic:1" "Act-Basic:2" "Act-Basic:9" act_ord_b "&I"
7309                "∨I"(1) "∨E"(2) "≡E"(3) not_act_concrete_b "raa-cor:1")
7310  next AOT_show ¬Δ(¬[E!]b & ([O!]b  q0))
7311    proof (rule act_and_pos_not_not_delta)
7312      AOT_show 𝒜(¬[E!]b & ([O!]b  q0))
7313        by (metis "Act-Basic:1" "Act-Basic:2" "Act-Basic:9" act_ord_b "&I"
7314                  "∨I"(1) "∨E"(2) "≡E"(3) not_act_concrete_b "raa-cor:1")
7315    next
7316      AOT_show ¬(¬[E!]b & ([O!]b  q0))
7317      proof (AOT_subst ¬(¬[E!]b & ([O!]b  q0)) [E!]b  ¬([O!]b  q0))
7318        AOT_modally_strict {
7319          AOT_show ¬(¬[E!]b & ([O!]b  q0))  [E!]b  ¬([O!]b  q0)
7320            by (metis "&I" "&E"(1,2) "∨I"(1,2) "∨E"(2)
7321                      "→I" "≡I" "reductio-aa:1")
7322        }
7323      next
7324        AOT_show ([E!]b  ¬([O!]b  q0))
7325          using "KBasic2:2" b_prop "&E"(1) "∨I"(1) "≡E"(3)
7326                "raa-cor:3" by blast
7327       qed
7328     qed
7329   next
7330     AOT_show ¬𝒜(¬[E!]a & ([O!]a  q0))
7331       using "Act-Basic:2" "Act-Basic:9" "&E"(2) "∨E"(3) "≡E"(1)
7332             not_act_ord_a not_act_q_zero "reductio-aa:2" by blast
7333   next
7334     AOT_show Δ(¬[E!]a & ([O!]a  q0))
7335     proof (rule not_act_and_pos_delta)
7336       AOT_show ¬𝒜(¬[E!]a & ([O!]a  q0))
7337         by (metis "Act-Basic:2" "Act-Basic:9" "&E"(2) "∨E"(3) "≡E"(1)
7338                   not_act_ord_a not_act_q_zero "reductio-aa:2")
7339     next
7340       AOT_have ¬[E!]a
7341         using "KBasic2:1" "≡E"(2) not_act_and_pos_delta not_act_concrete_a
7342               not_delta_concrete_a "raa-cor:5" by blast
7343       moreover AOT_have ([O!]a  q0)
7344         by (metis "KBasic2:2" "&E"(1) "∨I"(2) "≡E"(3) q0_prop "raa-cor:3")
7345       ultimately AOT_show (¬[E!]a & ([O!]a  q0))
7346         by (metis "KBasic:16" "&I" "vdash-properties:10")
7347     qed
7348   qed(auto simp:  "beta-C-meta"[THEN "→E", OF 1])
7349  ultimately AOT_obtain F9 where 𝒜[F9]b & ¬Δ[F9]b & ¬𝒜[F9]a & Δ[F9]a
7350    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7351  AOT_hence 𝒜[F9]b and ¬Δ[F9]b and ¬𝒜[F9]a and Δ[F9]a
7352    using "&E" by blast+
7353  note props = props this
7354
7355  AOT_modally_strict {
7356    AOT_have y ¬q0] by "cqt:2[lambda]"
7357  } note 1 = this
7358  moreover AOT_have 𝒜y ¬q0]b & ¬Δy ¬q0]b & 𝒜y ¬q0]a & ¬Δy ¬q0]a
7359    by (safe intro!: "&I"; AOT_subst y ¬q0]x ¬q0 for: x)
7360       (auto simp: act_not_q_zero not_delta_not_q_zero
7361                   "beta-C-meta"[THEN "→E", OF 1])
7362  ultimately AOT_obtain F10 where 𝒜[F10]b & ¬Δ[F10]b & 𝒜[F10]a & ¬Δ[F10]a
7363    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7364  AOT_hence 𝒜[F10]b and ¬Δ[F10]b and 𝒜[F10]a and ¬Δ[F10]a
7365    using "&E" by blast+
7366  note props = props this
7367
7368  AOT_modally_strict {
7369    AOT_have y ¬[E!]y] by "cqt:2[lambda]"
7370  } note 1 = this
7371  moreover AOT_have 𝒜y ¬[E!]y]b & ¬Δy ¬[E!]y]b &
7372                     𝒜y ¬[E!]y]a & Δy ¬[E!]y]a
7373  proof (safe intro!: "&I"; AOT_subst y ¬[E!]y]x ¬[E!]x for: x)
7374    AOT_show 𝒜¬[E!]b
7375      using "Act-Basic:1" "∨E"(2) not_act_concrete_b by blast
7376  next AOT_show ¬Δ¬[E!]b
7377      using "dfE" "conventions:5" "Act-Basic:1" act_and_not_nec_not_delta
7378            b_prop "&E"(1) "∨E"(2) not_act_concrete_b by blast
7379  next AOT_show 𝒜¬[E!]a
7380      using "Act-Basic:1" "∨E"(2) not_act_concrete_a by blast
7381  next AOT_show Δ¬[E!]a
7382      using "KBasic2:1" "≡E"(2) nec_delta not_act_and_pos_delta
7383            not_act_concrete_a not_delta_concrete_a "reductio-aa:1"
7384      by blast
7385  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7386  ultimately AOT_obtain F11 where 𝒜[F11]b & ¬Δ[F11]b & 𝒜[F11]a & Δ[F11]a
7387    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7388  AOT_hence 𝒜[F11]b and ¬Δ[F11]b and 𝒜[F11]a and Δ[F11]a
7389    using "&E" by blast+
7390  note props = props this
7391
7392  AOT_have 𝒜[O!]b & Δ[O!]b & ¬𝒜[O!]a & ¬Δ[O!]a
7393    by (simp add: act_ord_b "&I" delta_ord_b not_act_ord_a not_delta_ord_a)
7394  then AOT_obtain F12 where 𝒜[F12]b & Δ[F12]b & ¬𝒜[F12]a & ¬Δ[F12]a
7395    using "oa-exist:1" "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7396  AOT_hence 𝒜[F12]b and Δ[F12]b and ¬𝒜[F12]a and ¬Δ[F12]a
7397    using "&E" by blast+
7398  note props = props this
7399
7400  let  = "«y [O!]y  q0]»"
7401  AOT_modally_strict {
7402    AOT_have [«»] by "cqt:2[lambda]"
7403  } note 1 = this
7404  moreover AOT_have 𝒜[«»]b & Δ[«»]b & ¬𝒜[«»]a & Δ[«»]a
7405  proof (safe intro!: "&I"; AOT_subst y O!y  q0]x O!x  q0 for: x)
7406    AOT_show 𝒜([O!]b  q0)
7407      by (meson "Act-Basic:9" act_ord_b "∨I"(1) "≡E"(2))
7408  next AOT_show Δ([O!]b  q0)
7409      by (meson "KBasic:15" b_ord "∨I"(1) nec_delta "oa-facts:1" "→E")
7410  next AOT_show ¬𝒜([O!]a  q0)
7411      using "Act-Basic:9" "∨E"(2) "≡E"(4) not_act_ord_a
7412            not_act_q_zero "raa-cor:3" by blast
7413  next AOT_show Δ([O!]a  q0)
7414    proof (rule not_act_and_pos_delta)
7415      AOT_show ¬𝒜([O!]a  q0)
7416        using "Act-Basic:9" "∨E"(2) "≡E"(4) not_act_ord_a
7417              not_act_q_zero "raa-cor:3" by blast
7418    next AOT_show ([O!]a  q0)
7419        using "KBasic2:2" "&E"(1) "∨I"(2) "≡E"(2) q0_prop by blast
7420    qed
7421  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7422  ultimately AOT_obtain F13 where 𝒜[F13]b & Δ[F13]b & ¬𝒜[F13]a & Δ[F13]a
7423    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7424  AOT_hence 𝒜[F13]b and Δ[F13]b and ¬𝒜[F13]a and Δ[F13]a
7425    using "&E" by blast+
7426  note props = props this
7427
7428  let  = "«y [O!]y  ¬q0]»"
7429  AOT_modally_strict {
7430     AOT_have [«»] by "cqt:2[lambda]"
7431  } note 1 = this
7432  moreover AOT_have 𝒜[«»]b & Δ[«»]b & 𝒜[«»]a & ¬Δ[«»]a
7433  proof (safe intro!: "&I"; AOT_subst y O!y  ¬q0]x O!x  ¬q0 for: x)
7434    AOT_show 𝒜([O!]b  ¬q0)
7435      by (meson "Act-Basic:9" act_not_q_zero "∨I"(2) "≡E"(2))
7436  next AOT_show Δ([O!]b  ¬q0)
7437      by (meson "KBasic:15" b_ord "∨I"(1) nec_delta "oa-facts:1" "→E")
7438  next AOT_show 𝒜([O!]a  ¬q0)
7439      by (meson "Act-Basic:9" act_not_q_zero "∨I"(2) "≡E"(2))
7440  next AOT_show ¬Δ([O!]a  ¬q0)
7441    proof(rule act_and_pos_not_not_delta)
7442      AOT_show 𝒜([O!]a  ¬q0)
7443        by (meson "Act-Basic:9" act_not_q_zero "∨I"(2) "≡E"(2))
7444    next
7445      AOT_have ¬[O!]a
7446        using "KBasic2:1" "≡E"(2) not_act_and_pos_delta
7447              not_act_ord_a not_delta_ord_a "raa-cor:6" by blast
7448      moreover AOT_have q0
7449        by (meson "&E"(1) q0_prop)
7450      ultimately AOT_have 2: (¬[O!]a & q0)
7451         by (metis "KBasic:16" "&I" "vdash-properties:10")
7452      AOT_show ¬([O!]a  ¬q0)
7453      proof (AOT_subst (reverse) ¬([O!]a  ¬q0) ¬[O!]a & q0)
7454        AOT_modally_strict {
7455          AOT_show ¬[O!]a & q0  ¬([O!]a  ¬q0)
7456            by (metis "&I" "&E"(1) "&E"(2) "∨I"(1) "∨I"(2)
7457                      "∨E"(3) "deduction-theorem" "≡I" "raa-cor:3")
7458        }
7459      next
7460        AOT_show (¬[O!]a & q0)
7461          using "2" by blast
7462      qed
7463    qed
7464  qed(auto simp: "beta-C-meta"[THEN "→E", OF 1])
7465  ultimately AOT_obtain F14 where 𝒜[F14]b & Δ[F14]b & 𝒜[F14]a & ¬Δ[F14]a
7466    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7467  AOT_hence 𝒜[F14]b and Δ[F14]b and 𝒜[F14]a and ¬Δ[F14]a
7468    using "&E" by blast+
7469  note props = props this
7470
7471  AOT_have [L]
7472    by (rule "=dfI"(2)[OF L_def]) "cqt:2[lambda]"+
7473  moreover AOT_have 𝒜[L]b & Δ[L]b & 𝒜[L]a & Δ[L]a
7474  proof (safe intro!: "&I")
7475    AOT_show 𝒜[L]b
7476      by (meson nec_L "nec-imp-act" "vdash-properties:10")
7477    next AOT_show Δ[L]b using nec_L nec_delta by blast
7478    next AOT_show 𝒜[L]a by (meson nec_L "nec-imp-act" "→E")
7479    next AOT_show Δ[L]a using nec_L nec_delta by blast
7480  qed
7481  ultimately AOT_obtain F15 where 𝒜[F15]b & Δ[F15]b & 𝒜[F15]a & Δ[F15]a
7482    using "∃I"(1)[rotated, THEN "∃E"[rotated]] by fastforce
7483  AOT_hence 𝒜[F15]b and Δ[F15]b and 𝒜[F15]a and Δ[F15]a
7484    using "&E" by blast+
7485  note props = props this
7486
7487  show ?thesis
7488    by (rule "∃I"(2)[where β=F0]; rule "∃I"(2)[where β=F1];
7489        rule "∃I"(2)[where β=F2]; rule "∃I"(2)[where β=F3];
7490        rule "∃I"(2)[where β=F4]; rule "∃I"(2)[where β=F5];
7491        rule "∃I"(2)[where β=F6]; rule "∃I"(2)[where β=F7];
7492        rule "∃I"(2)[where β=F8]; rule "∃I"(2)[where β=F9];
7493        rule "∃I"(2)[where β=F10]; rule "∃I"(2)[where β=F11];
7494        rule "∃I"(2)[where β=F12]; rule "∃I"(2)[where β=F13];
7495        rule "∃I"(2)[where β=F14]; rule "∃I"(2)[where β=F15];
7496        safe intro!: "&I")
7497       (match conclusion in "[?v  [F]  [G]]" for F G  7498        match props in A: "[?v  ¬φ{F}]" for φ  7499        match (φ) in "λa . ?p"  fail ¦ "λa . a"  fail ¦ _  7500        match props in B: "[?v  φ{G}]"  7501        fact "pos-not-equiv-ne:4"[where F=F and G=G and φ=φ, THEN "→E",
7502                                OF "oth-class-taut:4:h"[THEN "≡E"(2)],
7503                                OF "Disjunction Addition"(2)[THEN "→E"],
7504                                OF "&I", OF A, OF B])+
7505qed
7506
7507subsection‹The Theory of Objects›
7508text‹\label{PLM: 9.11}›
7509
7510AOT_theorem "o-objects-exist:1": x O!x
7511proof(rule RN)
7512  AOT_modally_strict {
7513    AOT_obtain a where (E!a & ¬𝒜[E!]a)
7514      using "∃E"[rotated, OF "qml:4"[axiom_inst, THEN "BF◇"[THEN "→E"]]]
7515      by blast
7516    AOT_hence 1: E!a by (metis "KBasic2:3" "&E"(1) "→E")
7517    AOT_have x [E!]x]a
7518    proof (rule "β←C"(1); "cqt:2[lambda]"?)
7519      AOT_show a using "cqt:2[const_var]"[axiom_inst] by blast
7520    next
7521      AOT_show E!a by (fact 1)
7522    qed
7523    AOT_hence O!a by (rule "=dfI"(2)[OF AOT_ordinary, rotated]) "cqt:2"
7524    AOT_thus x [O!]x by (rule "∃I")
7525  }
7526qed
7527
7528AOT_theorem "o-objects-exist:2": x A!x
7529proof (rule RN)
7530  AOT_modally_strict {
7531    AOT_obtain a where [A!]a
7532      using "A-objects"[axiom_inst] "∃E"[rotated] "&E" by blast
7533    AOT_thus x A!x using "∃I" by blast
7534  }
7535qed
7536
7537AOT_theorem "o-objects-exist:3": ¬x O!x
7538  by (rule RN)
7539     (metis (no_types, opaque_lifting) "∃E" "cqt-orig:1[const_var]"
7540        "≡E"(4) "modus-tollens:1" "o-objects-exist:2" "oa-contingent:2"
7541        "qml:2"[axiom_inst] "reductio-aa:2")
7542
7543AOT_theorem "o-objects-exist:4": ¬x A!x
7544  by (rule RN)
7545     (metis (mono_tags, opaque_lifting) "∃E" "cqt-orig:1[const_var]"
7546        "≡E"(1) "modus-tollens:1" "o-objects-exist:1" "oa-contingent:2"
7547        "qml:2"[axiom_inst] "→E")
7548
7549AOT_theorem "o-objects-exist:5": ¬x E!x
7550proof (rule RN; rule "raa-cor:2")
7551  AOT_modally_strict {
7552    AOT_assume x E!x
7553    moreover AOT_obtain a where abs: A!a
7554      using "o-objects-exist:2"[THEN "qml:2"[axiom_inst, THEN "→E"]]
7555            "∃E"[rotated] by blast
7556    ultimately AOT_have E!a using "∀E" by blast
7557    AOT_hence 1: E!a by (metis "T◇" "→E")
7558    AOT_have y E!y]a
7559    proof (rule "β←C"(1); "cqt:2[lambda]"?)
7560      AOT_show a using "cqt:2[const_var]"[axiom_inst].
7561    next
7562      AOT_show E!a by (fact 1)
7563    qed
7564    AOT_hence O!a
7565      by (rule "=dfI"(2)[OF AOT_ordinary, rotated]) "cqt:2[lambda]"
7566    AOT_hence ¬A!a by (metis "≡E"(1) "oa-contingent:2") 
7567    AOT_thus p & ¬p for p using abs by (metis "raa-cor:3")
7568  }
7569qed
7570
7571AOT_theorem partition: ¬x (O!x & A!x)
7572proof(rule "raa-cor:2")
7573  AOT_assume x (O!x & A!x)
7574  then AOT_obtain a where O!a & A!a
7575    using "∃E"[rotated] by blast
7576  AOT_thus p & ¬p for p
7577    by (metis "&E"(1) "Conjunction Simplification"(2) "≡E"(1)
7578              "modus-tollens:1" "oa-contingent:2" "raa-cor:3")
7579qed
7580
7581AOT_define eq_E :: Π ("'(=E')")
7582  "=E": (=E) =df xy O!x & O!y & F ([F]x  [F]y)]
7583
7584syntax "_AOT_eq_E_infix" :: τ  τ  φ (infixl "=E" 50)
7585translations
7586  "_AOT_eq_E_infix κ κ'" == "CONST AOT_exe (CONST eq_E) (CONST Pair κ κ')"
7587print_translation7588AOT_syntax_print_translations
7589[(const_syntaxAOT_exe, fn ctxt => fn [
7590  Const (const_nameeq_E, _),
7591  Const (const_syntaxPair, _) $ lhs $ rhs
7592] => Const (syntax_const‹_AOT_eq_E_infix›, dummyT) $ lhs $ rhs)]
7593
7594text‹Note: Not explicitly mentioned as theorem in PLM.›
7595AOT_theorem "=E[denotes]": [(=E)]
7596  by (rule "=dfI"(2)[OF "=E"]) "cqt:2[lambda]"+
7597
7598AOT_theorem "=E-simple:1": x =E y  (O!x & O!y & F ([F]x  [F]y))
7599proof -
7600  AOT_have 1: xy [O!]x & [O!]y & F ([F]x  [F]y)] by "cqt:2"
7601  show ?thesis
7602    apply (rule "=dfI"(2)[OF "=E"]; "cqt:2[lambda]"?)
7603    using "beta-C-meta"[THEN "→E", OF 1, unvarify ν1νn, of "(_,_)",
7604                        OF tuple_denotes[THEN "dfI"], OF "&I",
7605                        OF "cqt:2[const_var]"[axiom_inst],
7606                        OF "cqt:2[const_var]"[axiom_inst]]
7607    by fast
7608qed
7609
7610AOT_theorem "=E-simple:2": x =E y  x = y
7611proof (rule "→I")
7612  AOT_assume x =E y
7613  AOT_hence O!x & O!y & F ([F]x  [F]y)
7614    using "=E-simple:1"[THEN "≡E"(1)] by blast
7615  AOT_thus x = y
7616    using "dfI"[OF "identity:1"] "∨I" by blast
7617qed
7618
7619AOT_theorem "id-nec3:1": x =E y  (x =E y)
7620proof (rule "≡I"; rule "→I")
7621  AOT_assume x =E y
7622  AOT_hence O!x & O!y & F ([F]x  [F]y)
7623    using "=E-simple:1" "≡E" by blast
7624  AOT_hence O!x & O!y & F ([F]x  [F]y)
7625    by (metis "S5Basic:6" "&I" "&E"(1) "&E"(2) "≡E"(4)
7626              "oa-facts:1" "raa-cor:3" "vdash-properties:10")
7627  AOT_hence (O!x & O!y & F ([F]x  [F]y))
7628    by (metis "&E"(1) "&E"(2) "≡E"(2) "KBasic:3" "&I")
7629  AOT_thus (x =E y)
7630    using "=E-simple:1"
7631    by (AOT_subst x =E y O!x & O!y & F ([F]x  [F]y)) auto
7632next
7633  AOT_assume (x =E y)
7634  AOT_thus x =E y using "qml:2"[axiom_inst, THEN "→E"] by blast
7635qed
7636
7637AOT_theorem "id-nec3:2": (x =E y)  x =E y
7638  by (meson "RE◇" "S5Basic:2" "id-nec3:1" "≡E"(1,5) "Commutativity of ≡")
7639
7640AOT_theorem "id-nec3:3": (x =E y)  (x =E y)
7641  by (meson "id-nec3:1" "id-nec3:2" "≡E"(5))
7642
7643syntax "_AOT_non_eq_E" :: Π ("'(≠E')")
7644translations
7645  (Π) "(≠E)" == (Π) "(=E)-"
7646syntax "_AOT_non_eq_E_infix" :: τ  τ  φ (infixl "E" 50)
7647translations
7648 "_AOT_non_eq_E_infix κ κ'" ==
7649 "CONST AOT_exe (CONST relation_negation (CONST eq_E)) (CONST Pair κ κ')"
7650print_translation7651AOT_syntax_print_translations
7652[(const_syntaxAOT_exe, fn ctxt => fn [
7653  Const (const_syntaxrelation_negation, _) $ Const (const_nameeq_E, _),
7654  Const (const_syntaxPair, _) $ lhs $ rhs
7655] => Const (syntax_const‹_AOT_non_eq_E_infix›, dummyT) $ lhs $ rhs)]
7656AOT_theorem "thm-neg=E": x E y  ¬(x =E y)
7657proof -
7658  AOT_have θ: x1...x2 ¬(=E)x1...x2] by "cqt:2"
7659  AOT_have x E y  x1...x2 ¬(=E)x1...x2]xy
7660    by (rule "=dfI"(1)[OF "df-relation-negation", OF θ])
7661       (meson "oth-class-taut:3:a")
7662  also AOT_have   ¬(=E)xy
7663    by (safe intro!: "beta-C-meta"[THEN "→E", unvarify ν1νn] "cqt:2"
7664                     tuple_denotes[THEN "dfI"] "&I")
7665  finally show ?thesis.
7666qed
7667
7668AOT_theorem "id-nec4:1": x E y  (x E y)
7669proof -
7670  AOT_have x E y  ¬(x =E y) using "thm-neg=E".
7671  also AOT_have   ¬(x =E y)
7672    by (meson "id-nec3:2" "≡E"(1) "Commutativity of ≡" "oth-class-taut:4:b")
7673  also AOT_have   ¬(x =E y)
7674    by (meson "KBasic2:1" "≡E"(2) "Commutativity of ≡")
7675  also AOT_have   (x E y)
7676    by (AOT_subst (reverse) ¬(x =E y) x E y)
7677       (auto simp: "thm-neg=E" "oth-class-taut:3:a")
7678  finally show ?thesis.
7679qed
7680
7681AOT_theorem "id-nec4:2": (x E y)  (x E y)
7682  by (meson "RE◇" "S5Basic:2" "id-nec4:1" "≡E"(2,5) "Commutativity of ≡")
7683
7684AOT_theorem "id-nec4:3": (x E y)  (x E y)
7685  by (meson "id-nec4:1" "id-nec4:2" "≡E"(5))
7686
7687AOT_theorem "id-act2:1": x =E y  𝒜x =E y
7688  by (meson "Act-Basic:5" "Act-Sub:2" "RA[2]" "id-nec3:2" "≡E"(1,6))
7689AOT_theorem "id-act2:2": x E y  𝒜x E y
7690  by (meson "Act-Basic:5" "Act-Sub:2" "RA[2]" "id-nec4:2" "≡E"(1,6))
7691
7692AOT_theorem "ord=Eequiv:1": O!x  x =E x
7693proof (rule "→I")
7694  AOT_assume 1: O!x
7695  AOT_show x =E x
7696    apply (rule "=dfI"(2)[OF "=E"]) apply "cqt:2[lambda]"
7697    apply (rule "β←C"(1))
7698      apply "cqt:2[lambda]"
7699     apply (simp add: "&I" "cqt:2[const_var]"[axiom_inst] prod_denotesI)
7700    by (simp add: "1" RN "&I" "oth-class-taut:3:a" "universal-cor")
7701qed
7702
7703AOT_theorem "ord=Eequiv:2": x =E y  y =E x
7704proof(rule CP)
7705  AOT_assume 1: x =E y
7706  AOT_hence 2: x = y by (metis "=E-simple:2" "vdash-properties:10") 
7707  AOT_have O!x using 1 by (meson "&E"(1) "=E-simple:1" "≡E"(1))
7708  AOT_hence x =E x using "ord=Eequiv:1" "→E" by blast
7709  AOT_thus y =E x using "rule=E"[rotated, OF 2] by fast
7710qed
7711
7712AOT_theorem "ord=Eequiv:3": (x =E y & y =E z)  x =E z
7713proof (rule CP)
7714  AOT_assume 1: x =E y & y =E z
7715  AOT_hence x = y & y = z
7716    by (metis "&I" "&E"(1) "&E"(2) "=E-simple:2" "vdash-properties:6")
7717  AOT_hence x = z by (metis "id-eq:3" "vdash-properties:6")
7718  moreover AOT_have x =E x
7719    using 1[THEN "&E"(1)] "&E"(1) "=E-simple:1" "≡E"(1)
7720          "ord=Eequiv:1" "→E" by blast
7721  ultimately AOT_show x =E z
7722    using "rule=E" by fast
7723qed
7724
7725AOT_theorem "ord-=E=:1": (O!x  O!y)  (x = y  x =E y)
7726proof(rule CP)
7727  AOT_assume O!x  O!y
7728  moreover {
7729    AOT_assume O!x
7730    AOT_hence O!x by (metis "oa-facts:1" "vdash-properties:10")
7731    moreover {
7732      AOT_modally_strict {
7733        AOT_have O!x  (x = y  x =E y)
7734        proof (rule "→I"; rule "≡I"; rule "→I")
7735          AOT_assume O!x
7736          AOT_hence x =E x by (metis "ord=Eequiv:1" "→E")
7737          moreover AOT_assume x = y
7738          ultimately AOT_show x =E y using "rule=E" by fast
7739        next
7740          AOT_assume x =E y
7741          AOT_thus x = y by (metis "=E-simple:2" "→E")
7742        qed
7743      }
7744      AOT_hence O!x  (x = y  x =E y) by (metis "RM:1")
7745    }
7746    ultimately AOT_have (x = y  x =E y) using "→E" by blast
7747  }
7748  moreover {
7749    AOT_assume O!y
7750    AOT_hence O!y by (metis "oa-facts:1" "vdash-properties:10")
7751    moreover {
7752      AOT_modally_strict {
7753        AOT_have O!y  (x = y  x =E y)
7754        proof (rule "→I"; rule "≡I"; rule "→I")
7755          AOT_assume O!y
7756          AOT_hence y =E y by (metis "ord=Eequiv:1" "→E")
7757          moreover AOT_assume x = y
7758          ultimately AOT_show x =E y using "rule=E" id_sym by fast
7759        next
7760          AOT_assume x =E y
7761          AOT_thus x = y by (metis "=E-simple:2" "→E")
7762        qed
7763      }
7764      AOT_hence O!y  (x = y  x =E y) by (metis "RM:1")
7765    }
7766    ultimately AOT_have (x = y  x =E y) using "→E" by blast
7767  }
7768  ultimately AOT_show (x = y  x =E y) by (metis "∨E"(3) "raa-cor:1")
7769qed
7770
7771AOT_theorem "ord-=E=:2": O!y  x x = y]
7772proof (rule "→I"; rule "safe-ext"[axiom_inst, THEN "→E"]; rule "&I")
7773  AOT_show x x =E y] by "cqt:2[lambda]"
7774next
7775  AOT_assume O!y
7776  AOT_hence 1: (x = y  x =E y) for x
7777    using "ord-=E=:1" "→E" "∨I" by blast
7778  AOT_have (x =E y  x = y) for x
7779    by (AOT_subst x =E y  x = y x = y  x =E y)
7780       (auto simp add: "Commutativity of ≡" 1)
7781  AOT_hence x (x =E y  x = y) by (rule GEN)
7782  AOT_thus x (x =E y  x = y) by (rule BF[THEN "→E"])
7783qed
7784
7785
7786AOT_theorem "ord-=E=:3": xy O!x & O!y & x = y]
7787proof (rule "safe-ext[2]"[axiom_inst, THEN "→E"]; rule "&I")
7788  AOT_show xy O!x & O!y & x =E y] by "cqt:2[lambda]"
7789next
7790  AOT_show xy ([O!]x & [O!]y & x =E y  [O!]x & [O!]y & x = y)
7791  proof (rule RN; rule GEN; rule GEN; rule "≡I"; rule "→I")
7792    AOT_modally_strict {
7793      AOT_show [O!]x & [O!]y & x = y if [O!]x & [O!]y & x =E y for x y
7794        by (metis "&I" "&E"(1) "Conjunction Simplification"(2) "=E-simple:2"
7795                  "modus-tollens:1" "raa-cor:1" that)
7796    }
7797  next
7798    AOT_modally_strict {
7799      AOT_show [O!]x & [O!]y & x =E y if [O!]x & [O!]y & x = y for x y
7800        apply(safe intro!: "&I")
7801          apply (metis that[THEN "&E"(1), THEN "&E"(1)])
7802         apply (metis that[THEN "&E"(1), THEN "&E"(2)])
7803        using "rule=E"[rotated, OF that[THEN "&E"(2)]]
7804              "ord=Eequiv:1"[THEN "→E", OF that[THEN "&E"(1), THEN "&E"(1)]]
7805        by fast
7806    }
7807  qed
7808qed
7809
7810AOT_theorem "ind-nec": F ([F]x  [F]y)  F ([F]x  [F]y)
7811proof(rule "→I")
7812  AOT_assume F ([F]x  [F]y)
7813  moreover AOT_have x F ([F]x  [F]y)] by "cqt:2[lambda]"
7814  ultimately AOT_have x F ([F]x  [F]y)]x  x F ([F]x  [F]y)]y
7815    using "∀E" by blast
7816  moreover AOT_have x F ([F]x  [F]y)]y
7817    apply (rule "β←C"(1))
7818      apply "cqt:2[lambda]"
7819     apply (fact "cqt:2[const_var]"[axiom_inst])
7820    by (simp add: RN GEN "oth-class-taut:3:a")
7821  ultimately AOT_have x F ([F]x  [F]y)]x using "≡E" by blast
7822  AOT_thus F ([F]x  [F]y)
7823    using "β→C"(1) by blast
7824qed
7825
7826AOT_theorem "ord=E:1": (O!x & O!y)  (F ([F]x  [F]y)  x =E y)
7827proof (rule "→I"; rule "→I")
7828  AOT_assume F ([F]x  [F]y)
7829  AOT_hence F ([F]x  [F]y)
7830    using "ind-nec"[THEN "→E"] by blast
7831  moreover AOT_assume O!x & O!y
7832  ultimately AOT_have O!x & O!y & F ([F]x  [F]y)
7833    using "&I" by blast
7834  AOT_thus x =E y using "=E-simple:1"[THEN "≡E"(2)] by blast
7835qed
7836
7837AOT_theorem "ord=E:2": (O!x & O!y)  (F ([F]x  [F]y)  x = y)
7838proof (rule "→I"; rule "→I")
7839  AOT_assume O!x & O!y
7840  moreover AOT_assume F ([F]x  [F]y)
7841  ultimately AOT_have x =E y
7842    using "ord=E:1" "→E" by blast
7843  AOT_thus x = y using "=E-simple:2"[THEN "→E"] by blast
7844qed
7845
7846AOT_theorem "ord=E2:1":
7847  (O!x & O!y)  (x  y  z z =E x]  z z =E y])
7848proof (rule "→I"; rule "≡I"; rule "→I";
7849       rule "dfI"[OF "=-infix"]; rule "raa-cor:2")
7850  AOT_assume 0: O!x & O!y
7851  AOT_assume x  y
7852  AOT_hence 1: ¬(x = y) using "dfE"[OF "=-infix"] by blast
7853  AOT_assume z z =E x] = z z =E y]
7854  moreover AOT_have z z =E x]x
7855    apply (rule "β←C"(1))
7856      apply "cqt:2[lambda]"
7857     apply (fact "cqt:2[const_var]"[axiom_inst])
7858    using "ord=Eequiv:1"[THEN "→E", OF 0[THEN "&E"(1)]].
7859  ultimately AOT_have z z =E y]x using "rule=E" by fast
7860  AOT_hence x =E y using "β→C"(1) by blast
7861  AOT_hence x = y by (metis "=E-simple:2" "vdash-properties:6")
7862  AOT_thus x = y & ¬(x = y) using 1 "&I" by blast
7863next
7864  AOT_assume z z =E x]  z z =E y]
7865  AOT_hence 0: ¬(z z =E x] = z z =E y])
7866    using "dfE"[OF "=-infix"] by blast
7867  AOT_have z z =E x] by "cqt:2[lambda]"
7868  AOT_hence z z =E x] = z z =E x]
7869    by (metis "rule=I:1")
7870  moreover AOT_assume x = y
7871  ultimately AOT_have z z =E x] = z z =E y]
7872    using "rule=E" by fast
7873  AOT_thus z z =E x] = z z =E y] & ¬(z z =E x] = z z =E y])
7874    using 0 "&I" by blast
7875qed
7876
7877AOT_theorem "ord=E2:2":
7878  (O!x & O!y)  (x  y  z z = x]  z z = y])
7879proof (rule "→I"; rule "≡I"; rule "→I";
7880       rule "dfI"[OF "=-infix"]; rule "raa-cor:2")
7881  AOT_assume 0: O!x & O!y
7882  AOT_assume x  y
7883  AOT_hence 1: ¬(x = y) using "dfE"[OF "=-infix"] by blast
7884  AOT_assume z z = x] = z z = y]
7885  moreover AOT_have z z = x]x
7886    apply (rule "β←C"(1))
7887    apply (fact "ord-=E=:2"[THEN "→E", OF 0[THEN "&E"(1)]])
7888     apply (fact "cqt:2[const_var]"[axiom_inst])
7889    by (simp add: "id-eq:1")
7890  ultimately AOT_have z z = y]x using "rule=E" by fast
7891  AOT_hence x = y using "β→C"(1) by blast
7892  AOT_thus x = y & ¬(x = y) using 1 "&I" by blast
7893next
7894  AOT_assume 0: O!x & O!y
7895  AOT_assume z z = x]  z z = y]
7896  AOT_hence 1: ¬(z z = x] = z z = y])
7897    using "dfE"[OF "=-infix"] by blast
7898  AOT_have z z = x]
7899    by (fact "ord-=E=:2"[THEN "→E", OF 0[THEN "&E"(1)]])
7900  AOT_hence z z = x] = z z = x]
7901    by (metis "rule=I:1")
7902  moreover AOT_assume x = y
7903  ultimately AOT_have z z = x] = z z = y]
7904    using "rule=E" by fast
7905  AOT_thus z z = x] = z z = y] & ¬(z z = x] = z z = y])
7906    using 1 "&I" by blast
7907qed
7908
7909AOT_theorem ordnecfail: O!x  ¬F x[F]
7910  by (meson "RM:1" "→I" nocoder[axiom_inst] "oa-facts:1" "→E")
7911
7912AOT_theorem "ab-obey:1": (A!x & A!y)  (F (x[F]  y[F])  x = y)
7913proof (rule "→I"; rule "→I")
7914  AOT_assume 1: A!x & A!y
7915  AOT_assume F (x[F]  y[F])
7916  AOT_hence x[F]  y[F] for F using "∀E" by blast
7917  AOT_hence (x[F]  y[F]) for F by (metis "en-eq:6[1]" "≡E"(1))
7918  AOT_hence F (x[F]  y[F]) by (rule GEN)
7919  AOT_hence F (x[F]  y[F]) by (rule BF[THEN "→E"])
7920  AOT_thus x = y
7921    using "dfI"[OF "identity:1", OF "∨I"(2)] 1 "&I" by blast
7922qed
7923
7924AOT_theorem "ab-obey:2":
7925  (F (x[F] & ¬y[F])  F (y[F] & ¬x[F]))  x  y
7926proof (rule "→I"; rule "dfI"[OF "=-infix"]; rule "raa-cor:2")
7927  AOT_assume 1: x = y
7928  AOT_assume F (x[F] & ¬y[F])  F (y[F] & ¬x[F])
7929  moreover {
7930    AOT_assume F (x[F] & ¬y[F])
7931    then AOT_obtain F where x[F] & ¬y[F]
7932      using "∃E"[rotated] by blast
7933    moreover AOT_have y[F]
7934      using calculation[THEN "&E"(1)] 1 "rule=E" by fast
7935    ultimately AOT_have p & ¬p for p
7936      by (metis "Conjunction Simplification"(2) "modus-tollens:2" "raa-cor:3")
7937  }
7938  moreover {
7939    AOT_assume F (y[F] & ¬x[F])
7940    then AOT_obtain F where y[F] & ¬x[F]
7941      using "∃E"[rotated] by blast
7942    moreover AOT_have ¬y[F]
7943      using calculation[THEN "&E"(2)] 1 "rule=E" by fast
7944    ultimately AOT_have p & ¬p for p
7945      by (metis "Conjunction Simplification"(1) "modus-tollens:1" "raa-cor:3")
7946  }
7947  ultimately AOT_show p & ¬p for p
7948    by (metis "∨E"(3) "raa-cor:1")
7949qed
7950
7951AOT_theorem "encoders-are-abstract": F x[F]  A!x
7952  by (meson "deduction-theorem" "≡E"(2) "modus-tollens:2" nocoder
7953            "oa-contingent:3" "vdash-properties:1[2]")
7954
7955AOT_theorem "denote=:1": Hx x[H]
7956  by (rule GEN; rule "existence:2[1]"[THEN "dfE"]; "cqt:2")
7957
7958AOT_theorem "denote=:2": Gx1...∃xn x1...xn[H]
7959  by (rule GEN; rule "existence:2"[THEN "dfE"]; "cqt:2")
7960
7961AOT_theorem "denote=:2[2]": Gx1x2 x1x2[H]
7962  by (rule GEN; rule "existence:2[2]"[THEN "dfE"]; "cqt:2")
7963
7964AOT_theorem "denote=:2[3]": Gx1x2x3 x1x2x3[H]
7965  by (rule GEN; rule "existence:2[3]"[THEN "dfE"]; "cqt:2")
7966
7967AOT_theorem "denote=:2[4]": Gx1x2x3x4 x1x2x3x4[H]
7968  by (rule GEN; rule "existence:2[4]"[THEN "dfE"]; "cqt:2")
7969
7970AOT_theorem "denote=:3": x x[Π]  H (H = Π)
7971  using "existence:2[1]" "free-thms:1" "≡E"(2,5)
7972        "Commutativity of ≡" "≡Df" by blast
7973
7974AOT_theorem "denote=:4": (x1...∃xn x1...xn[Π])  H (H = Π)
7975  using "existence:2" "free-thms:1" "≡E"(6) "≡Df" by blast
7976
7977AOT_theorem "denote=:4[2]": (x1x2 x1x2[Π])  H (H = Π)
7978  using "existence:2[2]" "free-thms:1" "≡E"(6) "≡Df" by blast
7979
7980AOT_theorem "denote=:4[3]": (x1x2x3 x1x2x3[Π])  H (H = Π)
7981  using "existence:2[3]" "free-thms:1" "≡E"(6) "≡Df" by blast
7982
7983AOT_theorem "denote=:4[4]": (x1x2x3x4 x1x2x3x4[Π])  H (H = Π)
7984  using "existence:2[4]" "free-thms:1" "≡E"(6) "≡Df" by blast
7985
7986AOT_theorem "A-objects!": ∃!x (A!x & F (x[F]  φ{F}))
7987proof (rule "uniqueness:1"[THEN "dfI"])
7988  AOT_obtain a where a_prop: A!a & F (a[F]  φ{F})
7989    using "A-objects"[axiom_inst] "∃E"[rotated] by blast
7990  AOT_have (A!β & F (β[F]  φ{F}))  β = a for β
7991  proof (rule "→I")
7992    AOT_assume β_prop: [A!]β & F (β[F]  φ{F})
7993    AOT_hence β[F]  φ{F} for F
7994      using "∀E" "&E" by blast
7995    AOT_hence β[F]  a[F] for F
7996      using a_prop[THEN "&E"(2)] "∀E" "≡E"(2,5)
7997            "Commutativity of ≡" by fast
7998    AOT_hence F (β[F]  a[F]) by (rule GEN)
7999    AOT_thus β = a
8000      using "ab-obey:1"[THEN "→E",
8001                OF "&I"[OF β_prop[THEN "&E"(1)], OF a_prop[THEN "&E"(1)]],
8002                THEN "→E"] by blast
8003  qed
8004  AOT_hence β ((A!β & F (β[F]  φ{F}))  β = a) by (rule GEN)
8005  AOT_thus α ([A!]α & F (α[F]  φ{F}) &
8006                β ([A!]β & F (β[F]  φ{F})  β = α))
8007    using "∃I" using a_prop "&I" by fast
8008qed
8009
8010AOT_theorem "obj-oth:1": ∃!x (A!x & F (x[F]  [F]y))
8011  using "A-objects!" by fast
8012
8013AOT_theorem "obj-oth:2": ∃!x (A!x & F (x[F]  [F]y & [F]z))
8014  using "A-objects!" by fast
8015
8016AOT_theorem "obj-oth:3": ∃!x (A!x & F (x[F]  [F]y  [F]z))
8017  using "A-objects!" by fast
8018
8019AOT_theorem "obj-oth:4": ∃!x (A!x & F (x[F]  [F]y))
8020  using "A-objects!" by fast
8021
8022AOT_theorem "obj-oth:5": ∃!x (A!x & F (x[F]  F = G))
8023  using "A-objects!" by fast
8024
8025AOT_theorem "obj-oth:6": ∃!x (A!x & F (x[F]  y([G]y  [F]y)))
8026  using "A-objects!" by fast
8027
8028AOT_theorem "A-descriptions": ιx (A!x & F (x[F]  φ{F}))
8029  by (rule "A-Exists:2"[THEN "≡E"(2)]; rule "RA[2]"; rule "A-objects!")
8030
8031AOT_act_theorem "thm-can-terms2":
8032  y = ιx(A!x & F (x[F]  φ{F}))  (A!y & F (y[F]  φ{F}))
8033  using "y-in:2" by blast
8034
8035AOT_theorem "can-ab2": y = ιx(A!x & F (x[F]  φ{F}))   A!y
8036proof(rule "→I")
8037  AOT_assume y = ιx(A!x & F (x[F]  φ{F}))
8038  AOT_hence 𝒜(A!y & F (y[F]  φ{F}))
8039    using "actual-desc:2"[THEN "→E"] by blast
8040  AOT_hence 𝒜A!y by (metis "Act-Basic:2" "&E"(1) "≡E"(1))
8041  AOT_thus A!y by (metis "≡E"(2) "oa-facts:8")
8042qed
8043
8044AOT_act_theorem "desc-encode:1": ιx(A!x & F (x[F]  φ{F}))[F]  φ{F}
8045proof -
8046  AOT_have ιx(A!x & F (x[F]  φ{F}))
8047    by (simp add: "A-descriptions")
8048  AOT_hence A!ιx(A!x & F (x[F]  φ{F})) &
8049             F(ιx(A!x & F (x[F]  φ{F}))[F]  φ{F})
8050    using "y-in:3"[THEN "→E"] by blast
8051  AOT_thus ιx(A!x & F (x[F]  φ{F}))[F]  φ{F}
8052    using "&E" "∀E" by blast
8053qed
8054
8055AOT_act_theorem "desc-encode:2": ιx(A!x & F (x[F]  φ{F}))[G]  φ{G}
8056  using "desc-encode:1".
8057
8058AOT_theorem "desc-nec-encode:1":
8059  ιx (A!x & F (x[F]  φ{F}))[F]  𝒜φ{F}
8060proof -
8061  AOT_have 0: ιx(A!x & F (x[F]  φ{F}))
8062    by (simp add: "A-descriptions")
8063  AOT_hence 𝒜(A!ιx(A!x & F (x[F]  φ{F})) &
8064             F(ιx(A!x & F (x[F]  φ{F}))[F]  φ{F}))
8065    using "actual-desc:4"[THEN "→E"] by blast
8066  AOT_hence 𝒜F (ιx(A!x & F (x[F]  φ{F}))[F]  φ{F})
8067    using "Act-Basic:2" "&E"(2) "≡E"(1) by blast
8068  AOT_hence F 𝒜(ιx(A!x & F (x[F]  φ{F}))[F]  φ{F})
8069    using "≡E"(1) "logic-actual-nec:3" "vdash-properties:1[2]" by blast
8070  AOT_hence 𝒜(ιx(A!x & F (x[F]  φ{F}))[F]  φ{F})
8071    using "∀E" by blast
8072  AOT_hence 𝒜ιx(A!x & F (x[F]  φ{F}))[F]  𝒜φ{F}
8073    using "Act-Basic:5" "≡E"(1) by blast
8074  AOT_thus ιx(A!x & F (x[F]  φ{F}))[F]  𝒜φ{F}
8075    using "en-eq:10[1]"[unvarify x1, OF 0] "≡E"(6) by blast
8076qed
8077
8078AOT_theorem "desc-nec-encode:2":
8079  ιx (A!x & F (x[F]  φ{F}))[G]  𝒜φ{G}
8080  using "desc-nec-encode:1".
8081
8082AOT_theorem "Box-desc-encode:1": φ{G}  ιx(A!x & F (x[F]  φ{G}))[G]
8083  by (rule "→I"; rule "desc-nec-encode:2"[THEN "≡E"(2)])
8084     (meson "nec-imp-act" "vdash-properties:10")
8085
8086AOT_theorem "Box-desc-encode:2":
8087φ{G}  (ιx(A!x & F (x[F]  φ{G}))[G]  φ{G})
8088proof(rule CP)
8089  AOT_assume φ{G}
8090  AOT_hence φ{G} by (metis "S5Basic:6" "≡E"(1))
8091  moreover AOT_have φ{G}  (ιx(A!x & F (x[F]  φ{G}))[G]  φ{G})
8092  proof (rule RM; rule "→I")
8093    AOT_modally_strict {
8094      AOT_assume 1: φ{G}
8095      AOT_hence ιx(A!x & F (x[F]  φ{G}))[G]
8096        using "Box-desc-encode:1" "→E" by blast
8097      moreover AOT_have φ{G}
8098        using 1 by (meson "qml:2"[axiom_inst] "→E")
8099      ultimately AOT_show ιx(A!x & F (x[F]  φ{G}))[G]  φ{G}
8100        using "→I" "≡I" by simp
8101    }
8102  qed
8103  ultimately AOT_show (ιx(A!x & F (x[F]  φ{G}))[G]  φ{G})
8104    using "→E" by blast
8105qed
8106
8107definition rigid_condition where
8108  rigid_condition φ  v . [v  α (φ{α}  φ{α})]
8109syntax rigid_condition :: id_position  AOT_prop ("RIGID'_CONDITION'(_')")
8110
8111AOT_theorem "strict-can:1[E]":
8112  assumes RIGID_CONDITION(φ)
8113  shows α (φ{α}  φ{α})
8114  using assms[unfolded rigid_condition_def] by auto
8115
8116AOT_theorem "strict-can:1[I]":
8117  assumes  α (φ{α}  φ{α})
8118  shows RIGID_CONDITION(φ)
8119  using assms rigid_condition_def by auto
8120
8121AOT_theorem "box-phi-a:1":
8122  assumes RIGID_CONDITION(φ)
8123  shows (A!x  & F (x[F]  φ{F}))  (A!x & F (x[F]  φ{F}))
8124proof (rule "→I")
8125  AOT_assume a: A!x & F (x[F]  φ{F})
8126  AOT_hence b: A!x
8127    by (metis "Conjunction Simplification"(1) "oa-facts:2" "→E")
8128  AOT_have x[F]  φ{F} for F
8129    using a[THEN "&E"(2)] "∀E" by blast
8130  moreover AOT_have (x[F]  x[F]) for F
8131    by (meson "pre-en-eq:1[1]" RN)
8132  moreover AOT_have (φ{F}  φ{F}) for F
8133    using RN "strict-can:1[E]"[OF assms] "∀E" by blast
8134  ultimately AOT_have (x[F]  φ{F}) for F
8135    using "sc-eq-box-box:5" "qml:2"[axiom_inst, THEN "→E"] "→E" "&I" by metis
8136  AOT_hence F (x[F]  φ{F}) by (rule GEN)
8137  AOT_hence F (x[F]  φ{F}) by (rule BF[THEN "→E"])
8138  AOT_thus ([A!]x & F (x[F]  φ{F}))
8139    using b "KBasic:3" "≡S"(1) "≡E"(2) by blast
8140qed
8141
8142AOT_theorem "box-phi-a:2":
8143  assumes RIGID_CONDITION(φ)
8144  shows y = ιx(A!x & F (x[F]  φ{F}))  (A!y & F (y[F]  φ{F}))
8145proof(rule "→I")
8146  AOT_assume y = ιx(A!x & F (x[F]  φ{F}))
8147  AOT_hence 𝒜(A!y & F (y[F]  φ{F}))
8148    using "actual-desc:2"[THEN "→E"] by fast
8149  AOT_hence abs: 𝒜A!y and 𝒜F (y[F]  φ{F})
8150    using "Act-Basic:2" "&E" "≡E"(1) by blast+
8151  AOT_hence F 𝒜(y[F]  φ{F})
8152    by (metis "≡E"(1) "logic-actual-nec:3" "vdash-properties:1[2]")
8153  AOT_hence 𝒜(y[F]  φ{F}) for F
8154    using "∀E" by blast
8155  AOT_hence 𝒜y[F]  𝒜φ{F} for F
8156    by (metis "Act-Basic:5" "≡E"(1)) 
8157  AOT_hence y[F]  φ{F} for F
8158    using "sc-eq-fur:2"[THEN "→E",
8159            OF "strict-can:1[E]"[OF assms,
8160                THEN "∀E"(2)[where β=F], THEN RN]]
8161    by (metis "en-eq:10[1]" "≡E"(6))
8162  AOT_hence F (y[F]  φ{F}) by (rule GEN)
8163  AOT_thus [A!]y & F (y[F]  φ{F})
8164    using abs "&I" "≡E"(2) "oa-facts:8" by blast
8165qed
8166
8167AOT_theorem "box-phi-a:3":
8168  assumes RIGID_CONDITION(φ)
8169  shows ιx(A!x & F (x[F]  φ{F}))[F]  φ{F}
8170  using "desc-nec-encode:2"
8171    "sc-eq-fur:2"[THEN "→E",
8172        OF "strict-can:1[E]"[OF assms,
8173          THEN "∀E"(2)[where β=F], THEN RN]]
8174    "≡E"(5) by blast
8175
8176AOT_define Null :: τ  φ ("Null'(_')") 
8177  "df-null-uni:1": Null(x) df A!x & ¬F x[F]
8178
8179AOT_define Universal :: τ  φ ("Universal'(_')")
8180  "df-null-uni:2": Universal(x) df A!x & F x[F]
8181
8182AOT_theorem "null-uni-uniq:1": ∃!x Null(x)
8183proof (rule "uniqueness:1"[THEN "dfI"])
8184  AOT_obtain a where a_prop: A!a & F (a[F]  ¬(F = F))
8185    using "A-objects"[axiom_inst] "∃E"[rotated] by fast
8186  AOT_have a_null: ¬a[F] for F
8187  proof (rule "raa-cor:2")
8188    AOT_assume a[F]
8189    AOT_hence ¬(F = F) using a_prop[THEN "&E"(2)] "∀E" "≡E" by blast
8190    AOT_hence F = F & ¬(F = F) by (metis "id-eq:1" "raa-cor:3")
8191    AOT_thus p & ¬p for p  by (metis "raa-cor:1")
8192  qed
8193  AOT_have Null(a) & β (Null(β)  β = a)
8194  proof (rule "&I")
8195    AOT_have ¬F a[F]
8196      using a_null by (metis "instantiation" "reductio-aa:1")
8197    AOT_thus Null(a)
8198      using "df-null-uni:1"[THEN "dfI"] a_prop[THEN "&E"(1)] "&I" by metis
8199  next
8200    AOT_show β (Null(β)  β = a)
8201    proof (rule GEN; rule "→I")
8202      fix β
8203      AOT_assume a: Null(β)
8204      AOT_hence ¬F β[F]
8205        using "df-null-uni:1"[THEN "dfE"] "&E" by blast
8206      AOT_hence β_null: ¬β[F] for F
8207        by (metis "existential:2[const_var]" "reductio-aa:1")
8208      AOT_have F (β[F]  a[F])
8209        apply (rule GEN; rule "≡I"; rule CP)
8210        using "raa-cor:3" β_null a_null by blast+
8211      moreover AOT_have A!β
8212        using a "df-null-uni:1"[THEN "dfE"] "&E" by blast
8213      ultimately AOT_show β = a
8214        using a_prop[THEN "&E"(1)] "ab-obey:1"[THEN "→E", THEN "→E"]
8215              "&I" by blast
8216    qed
8217  qed
8218  AOT_thus α (Null(α) & β (Null(β)  β = α))
8219    using "∃I"(2) by fast
8220qed
8221
8222AOT_theorem "null-uni-uniq:2": ∃!x Universal(x)
8223proof (rule "uniqueness:1"[THEN "dfI"])
8224  AOT_obtain a where a_prop: A!a & F (a[F]  F = F)
8225    using "A-objects"[axiom_inst] "∃E"[rotated] by fast
8226  AOT_hence aF: a[F] for F using "&E" "∀E" "≡E" "id-eq:1" by fast
8227  AOT_hence Universal(a)
8228    using "df-null-uni:2"[THEN "dfI"] "&I" a_prop[THEN "&E"(1)] GEN by blast
8229  moreover AOT_have β (Universal(β)  β = a)
8230  proof (rule GEN; rule "→I")
8231    fix β
8232    AOT_assume Universal(β)
8233    AOT_hence abs_β: A!β and β[F] for F
8234      using "df-null-uni:2"[THEN "dfE"] "&E" "∀E" by blast+
8235    AOT_hence β[F]  a[F] for F
8236      using aF by (metis "deduction-theorem" "≡I")
8237    AOT_hence F (β[F]  a[F]) by (rule GEN)
8238    AOT_thus β = a
8239      using a_prop[THEN "&E"(1)] "ab-obey:1"[THEN "→E", THEN "→E"]
8240            "&I" abs_β by blast
8241  qed
8242  ultimately AOT_show α (Universal(α) & β (Universal(β)  β = α))
8243    using "&I" "∃I" by fast
8244qed
8245
8246AOT_theorem "null-uni-uniq:3": ιx Null(x)
8247  using "A-Exists:2" "RA[2]" "≡E"(2) "null-uni-uniq:1" by blast
8248
8249AOT_theorem "null-uni-uniq:4": ιx Universal(x)
8250  using "A-Exists:2" "RA[2]" "≡E"(2) "null-uni-uniq:2" by blast
8251
8252AOT_define Null_object :: κs (a)
8253  "df-null-uni-terms:1": a =df ιx Null(x)
8254
8255AOT_define Universal_object :: κs (aV)
8256  "df-null-uni-terms:2": aV =df ιx Universal(x)
8257
8258AOT_theorem "null-uni-facts:1": Null(x)  Null(x)
8259proof (rule "→I")
8260  AOT_assume Null(x)
8261  AOT_hence x_abs: A!x and x_null: ¬F x[F]
8262    using "df-null-uni:1"[THEN "dfE"] "&E" by blast+
8263  AOT_have ¬x[F] for F using x_null
8264    using "existential:2[const_var]" "reductio-aa:1"
8265    by metis
8266  AOT_hence ¬x[F] for F by (metis "en-eq:7[1]" "≡E"(1))
8267  AOT_hence F ¬x[F] by (rule GEN)
8268  AOT_hence F ¬x[F] by (rule BF[THEN "→E"])
8269  moreover AOT_have F ¬x[F]  ¬F x[F]
8270    apply (rule RM)
8271    by (metis (full_types) "instantiation" "cqt:2[const_var]"[axiom_inst]
8272                           "→I" "reductio-aa:1" "rule-ui:1")
8273  ultimately AOT_have ¬F x[F]
8274    by (metis "→E")
8275  moreover AOT_have A!x using x_abs
8276    using "oa-facts:2" "vdash-properties:10" by blast
8277  ultimately AOT_have r: (A!x & ¬F x[F])
8278    by (metis "KBasic:3" "&I" "≡E"(3) "raa-cor:3")
8279  AOT_show Null(x)
8280    by (AOT_subst Null(x) A!x & ¬F x[F])
8281       (auto simp: "df-null-uni:1" "≡Df" r)
8282qed  
8283
8284AOT_theorem "null-uni-facts:2": Universal(x)  Universal(x)
8285proof (rule "→I")
8286  AOT_assume Universal(x)
8287  AOT_hence x_abs: A!x and x_univ: F x[F]
8288    using "df-null-uni:2"[THEN "dfE"] "&E" by blast+
8289  AOT_have x[F] for F using x_univ "∀E" by blast
8290  AOT_hence x[F] for F by (metis "en-eq:2[1]" "≡E"(1))
8291  AOT_hence F x[F] by (rule GEN)
8292  AOT_hence F x[F] by (rule BF[THEN "→E"])
8293  moreover AOT_have A!x using x_abs
8294    using "oa-facts:2" "vdash-properties:10" by blast
8295  ultimately AOT_have r: (A!x & F x[F])
8296    by (metis "KBasic:3" "&I" "≡E"(3) "raa-cor:3")
8297  AOT_show Universal(x)
8298    by (AOT_subst Universal(x) A!x & F x[F])
8299       (auto simp add: "df-null-uni:2" "≡Df" r)
8300qed
8301
8302AOT_theorem "null-uni-facts:3": Null(a)
8303  apply (rule "=dfI"(2)[OF "df-null-uni-terms:1"])
8304   apply (simp add: "null-uni-uniq:3")
8305  using "actual-desc:4"[THEN "→E", OF "null-uni-uniq:3"]
8306    "sc-eq-fur:2"[THEN "→E",
8307        OF "null-uni-facts:1"[unvarify x, THEN RN, OF "null-uni-uniq:3"],
8308        THEN "≡E"(1)]
8309  by blast
8310
8311AOT_theorem "null-uni-facts:4": Universal(aV)
8312  apply (rule "=dfI"(2)[OF "df-null-uni-terms:2"])
8313   apply (simp add: "null-uni-uniq:4")
8314  using "actual-desc:4"[THEN "→E", OF "null-uni-uniq:4"]
8315    "sc-eq-fur:2"[THEN "→E",
8316        OF "null-uni-facts:2"[unvarify x, THEN RN, OF "null-uni-uniq:4"],
8317        THEN "≡E"(1)]
8318  by blast
8319
8320AOT_theorem "null-uni-facts:5": a  aV
8321proof (rule "=dfI"(2)[OF "df-null-uni-terms:1", OF "null-uni-uniq:3"];
8322    rule "=dfI"(2)[OF "df-null-uni-terms:2", OF "null-uni-uniq:4"];
8323    rule "dfI"[OF "=-infix"];
8324    rule "raa-cor:2")
8325  AOT_obtain x where nullx: Null(x)
8326    by (metis "instantiation" "df-null-uni-terms:1" "existential:1"
8327              "null-uni-facts:3" "null-uni-uniq:3" "rule-id-df:2:b[zero]")
8328  AOT_hence act_null: 𝒜Null(x)
8329    by (metis "nec-imp-act" "null-uni-facts:1" "→E")
8330  AOT_assume ιx Null(x) = ιx Universal(x)
8331  AOT_hence 𝒜x(Null(x)  Universal(x))
8332    using "actual-desc:5"[THEN "→E"] by blast
8333  AOT_hence x 𝒜(Null(x)  Universal(x))
8334    by (metis "≡E"(1) "logic-actual-nec:3" "vdash-properties:1[2]")
8335  AOT_hence 𝒜Null(x)  𝒜Universal(x)
8336    using "Act-Basic:5" "≡E"(1) "rule-ui:3" by blast
8337  AOT_hence 𝒜Universal(x) using act_null "≡E" by blast
8338  AOT_hence Universal(x)
8339    by (metis RN "≡E"(1) "null-uni-facts:2" "sc-eq-fur:2" "→E")
8340  AOT_hence F x[F] using "dfE"[OF "df-null-uni:2"] "&E" by metis
8341  moreover AOT_have ¬F x[F]
8342    using nullx "dfE"[OF "df-null-uni:1"] "&E" by metis
8343  ultimately AOT_show p & ¬p for p
8344    by (metis "cqt-further:1" "raa-cor:3" "→E")
8345qed
8346
8347AOT_theorem "null-uni-facts:6": a = ιx(A!x & F (x[F]  F  F))
8348proof (rule "ab-obey:1"[unvarify x y, THEN "→E", THEN "→E"])
8349  AOT_show ιx([A!]x & F (x[F]  F  F))
8350    by (simp add: "A-descriptions")
8351next
8352  AOT_show a
8353    by (rule "=dfI"(2)[OF "df-null-uni-terms:1", OF "null-uni-uniq:3"])
8354       (simp add: "null-uni-uniq:3")
8355next
8356  AOT_have ιx([A!]x & F (x[F]  F  F))
8357    by (simp add: "A-descriptions")
8358  AOT_hence 1: ιx([A!]x & F (x[F]  F  F)) = ιx([A!]x & F (x[F]  F  F))
8359    using "rule=I:1" by blast
8360  AOT_show [A!]a & [A!]ιx([A!]x & F (x[F]  F  F))
8361    apply (rule "=dfI"(2)[OF "df-null-uni-terms:1", OF "null-uni-uniq:3"];
8362           rule "&I")
8363     apply (meson "dfE" "Conjunction Simplification"(1)
8364                  "df-null-uni:1" "df-null-uni-terms:1" "null-uni-facts:3"
8365                  "null-uni-uniq:3" "rule-id-df:2:a[zero]" "→E")
8366    using "can-ab2"[unvarify y, OF "A-descriptions", THEN "→E", OF 1].
8367next
8368  AOT_show F (a[F]  ιx([A!]x & F (x[F]  F  F))[F])
8369  proof (rule GEN)
8370    fix F
8371    AOT_have ¬a[F]
8372      by (rule "=dfI"(2)[OF "df-null-uni-terms:1", OF "null-uni-uniq:3"])
8373         (metis (no_types, lifting) "dfE" "&E"(2) "∨I"(2) "∨E"(3) "∃I"(2)
8374                "df-null-uni:1" "df-null-uni-terms:1" "null-uni-facts:3"
8375                "raa-cor:2" "rule-id-df:2:a[zero]"
8376                "russell-axiom[enc,1].ψ_denotes_asm")
8377    moreover AOT_have ¬ιx([A!]x & F (x[F]  F  F))[F]
8378    proof(rule "raa-cor:2")
8379      AOT_assume 0: ιx([A!]x & F (x[F]  F  F))[F]
8380      AOT_hence 𝒜(F  F)
8381        using "desc-nec-encode:2"[THEN "≡E"(1), OF 0] by blast
8382      moreover AOT_have ¬𝒜(F  F)
8383        using "dfE" "id-act:2" "id-eq:1" "≡E"(2)
8384              "=-infix" "raa-cor:3" by blast
8385      ultimately AOT_show 𝒜(F  F) & ¬𝒜(F  F) by (rule "&I")
8386    qed
8387    ultimately AOT_show a[F]  ιx([A!]x & F (x[F]  F  F))[F]
8388      using "deduction-theorem" "≡I" "raa-cor:4" by blast
8389  qed
8390qed
8391
8392AOT_theorem "null-uni-facts:7": aV = ιx(A!x & F (x[F]  F = F))
8393proof (rule "ab-obey:1"[unvarify x y, THEN "→E", THEN "→E"])
8394  AOT_show ιx([A!]x & F (x[F]  F = F))
8395    by (simp add: "A-descriptions")
8396next
8397  AOT_show aV
8398    by (rule "=dfI"(2)[OF "df-null-uni-terms:2", OF "null-uni-uniq:4"])
8399       (simp add: "null-uni-uniq:4")
8400next
8401  AOT_have ιx([A!]x & F (x[F]  F = F))
8402    by (simp add: "A-descriptions")
8403  AOT_hence 1: ιx([A!]x & F (x[F]  F = F)) = ιx([A!]x & F (x[F]  F = F))
8404    using "rule=I:1" by blast
8405  AOT_show [A!]aV & [A!]ιx([A!]x & F (x[F]  F = F))
8406    apply (rule "=dfI"(2)[OF "df-null-uni-terms:2", OF "null-uni-uniq:4"];
8407           rule "&I")
8408     apply (meson "dfE" "Conjunction Simplification"(1) "df-null-uni:2"
8409                  "df-null-uni-terms:2" "null-uni-facts:4" "null-uni-uniq:4"
8410                  "rule-id-df:2:a[zero]" "→E")
8411    using "can-ab2"[unvarify y, OF "A-descriptions", THEN "→E", OF 1].
8412next
8413  AOT_show F (aV[F]  ιx([A!]x & F (x[F]  F = F))[F])
8414  proof (rule GEN)
8415    fix F
8416    AOT_have aV[F]
8417      apply (rule "=dfI"(2)[OF "df-null-uni-terms:2", OF "null-uni-uniq:4"])
8418      using "dfE" "&E"(2) "df-null-uni:2" "df-null-uni-terms:2"
8419            "null-uni-facts:4" "null-uni-uniq:4" "rule-id-df:2:a[zero]"
8420            "rule-ui:3" by blast
8421    moreover AOT_have ιx([A!]x & F (x[F]  F = F))[F]
8422      using "RA[2]" "desc-nec-encode:2" "id-eq:1" "≡E"(2) by fastforce
8423    ultimately AOT_show aV[F]  ιx([A!]x & F (x[F]  F = F))[F]
8424      using "deduction-theorem" "≡I" by simp
8425  qed
8426qed
8427
8428AOT_theorem "aclassical:1":
8429Rxy(A!x & A!y & x  y & z [R]zx] = z [R]zy])
8430proof(rule GEN)
8431  fix R
8432  AOT_obtain a where a_prop:
8433    A!a & F (a[F]  y(A!y & F = z [R]zy] & ¬y[F]))
8434    using "A-objects"[axiom_inst] "∃E"[rotated] by fast
8435  AOT_have a_enc: az [R]za]
8436  proof (rule "raa-cor:1")
8437    AOT_assume 0: ¬az [R]za]
8438    AOT_hence ¬y(A!y & z [R]za] = z [R]zy] & ¬yz [R]za])
8439      by (rule a_prop[THEN "&E"(2), THEN "∀E"(1)[where τ="«z [R]za]»"],
8440                THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
8441                THEN "≡E"(1), rotated])
8442         "cqt:2[lambda]"
8443    AOT_hence y ¬(A!y & z [R]za] = z [R]zy] & ¬yz [R]za])
8444      using "cqt-further:4" "vdash-properties:10" by blast
8445    AOT_hence ¬(A!a & z [R]za] = z [R]za] & ¬az [R]za])
8446      using "∀E" by blast
8447    AOT_hence (A!a & z [R]za] = z [R]za])  az [R]za]
8448      by (metis "&I" "deduction-theorem" "raa-cor:3")
8449    moreover AOT_have z [R]za] = z [R]za]
8450      by (rule "=I") "cqt:2[lambda]"
8451    ultimately AOT_have az [R]za]
8452      using a_prop[THEN "&E"(1)] "→E" "&I" by blast
8453    AOT_thus az [R]za] & ¬az [R]za]
8454      using 0 "&I" by blast
8455  qed
8456  AOT_hence y(A!y & z [R]za] = z [R]zy] & ¬yz [R]za])
8457    by (rule a_prop[THEN "&E"(2), THEN "∀E"(1), THEN "≡E"(1), rotated])
8458       "cqt:2"
8459  then AOT_obtain b where b_prop:
8460    A!b & z [R]za] = z [R]zb] & ¬bz [R]za]
8461    using "∃E"[rotated] by blast
8462  AOT_have a  b
8463    apply (rule "dfI"[OF "=-infix"])
8464    using a_enc b_prop[THEN "&E"(2)]
8465    using "¬¬I" "rule=E" id_sym "≡E"(4) "oth-class-taut:3:a"
8466          "raa-cor:3" "reductio-aa:1" by fast
8467  AOT_hence A!a & A!b & a  b & z [R]za] = z [R]zb]
8468    using b_prop "&E" a_prop "&I" by meson
8469  AOT_hence y (A!a & A!y & a  y & z [R]za] = z [R]zy]) by (rule "∃I")
8470  AOT_thus xy (A!x & A!y & x  y & z [R]zx] = z [R]zy]) by (rule "∃I")
8471qed
8472
8473AOT_theorem "aclassical:2":
8474  Rxy(A!x & A!y & x  y & z [R]xz] = z [R]yz])
8475proof(rule GEN)
8476  fix R
8477  AOT_obtain a where a_prop:
8478    A!a & F (a[F]  y(A!y & F = z [R]yz] & ¬y[F]))
8479    using "A-objects"[axiom_inst] "∃E"[rotated] by fast
8480  AOT_have a_enc: az [R]az]
8481  proof (rule "raa-cor:1")
8482    AOT_assume 0: ¬az [R]az]
8483    AOT_hence ¬y(A!y & z [R]az] = z [R]yz] & ¬yz [R]az])
8484      by (rule a_prop[THEN "&E"(2), THEN "∀E"(1)[where τ="«z [R]az]»"],
8485                THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
8486                THEN "≡E"(1), rotated])
8487         "cqt:2[lambda]"
8488    AOT_hence y ¬(A!y & z [R]az] = z [R]yz] & ¬yz [R]az])
8489      using "cqt-further:4" "vdash-properties:10" by blast
8490    AOT_hence ¬(A!a & z [R]az] = z [R]az] & ¬az [R]az])
8491      using "∀E" by blast
8492    AOT_hence (A!a & z [R]az] = z [R]az])  az [R]az]
8493      by (metis "&I" "deduction-theorem" "raa-cor:3")
8494    moreover AOT_have z [R]az] = z [R]az]
8495      by (rule "=I") "cqt:2[lambda]"
8496    ultimately AOT_have az [R]az]
8497      using a_prop[THEN "&E"(1)] "→E" "&I" by blast
8498    AOT_thus az [R]az] & ¬az [R]az]
8499      using 0 "&I" by blast
8500  qed
8501  AOT_hence y(A!y & z [R]az] = z [R]yz] & ¬yz [R]az])
8502    by (rule a_prop[THEN "&E"(2), THEN "∀E"(1), THEN "≡E"(1), rotated])
8503       "cqt:2"
8504  then AOT_obtain b where b_prop:
8505    A!b & z [R]az] = z [R]bz] & ¬bz [R]az]
8506    using "∃E"[rotated] by blast
8507  AOT_have a  b
8508    apply (rule "dfI"[OF "=-infix"])
8509    using a_enc b_prop[THEN "&E"(2)]
8510    using "¬¬I" "rule=E" id_sym "≡E"(4) "oth-class-taut:3:a"
8511          "raa-cor:3" "reductio-aa:1" by fast
8512  AOT_hence A!a & A!b & a  b & z [R]az] = z [R]bz]
8513    using b_prop "&E" a_prop "&I" by meson
8514  AOT_hence y (A!a & A!y & a  y & z [R]az] = z [R]yz]) by (rule "∃I")
8515  AOT_thus xy (A!x & A!y & x  y & z [R]xz] = z [R]yz]) by (rule "∃I")
8516qed
8517
8518AOT_theorem "aclassical:3":
8519  Fxy(A!x & A!y & x  y &  [F]x] =  [F]y])
8520proof(rule GEN)
8521  fix R
8522  AOT_obtain a where a_prop:
8523    A!a & F (a[F]  y(A!y & F = z [R]y] & ¬y[F]))
8524    using "A-objects"[axiom_inst] "∃E"[rotated] by fast
8525  AOT_have den: z [R]a] by "cqt:2[lambda]"
8526  AOT_have a_enc: az [R]a]
8527  proof (rule "raa-cor:1")
8528    AOT_assume 0: ¬az [R]a]
8529    AOT_hence ¬y(A!y & z [R]a] = z [R]y] & ¬yz [R]a])
8530      by (safe intro!: a_prop[THEN "&E"(2), THEN "∀E"(1)[where τ=«z [R]a]»],
8531                THEN "oth-class-taut:4:b"[THEN "≡E"(1)],
8532                THEN "≡E"(1), rotated] "cqt:2") 
8533    AOT_hence y ¬(A!y & z [R]a] = z [R]y] & ¬yz [R]a])
8534      using "cqt-further:4" "→E" by blast
8535    AOT_hence ¬(A!a & z [R]a] = z [R]a] & ¬az [R]a]) using "∀E" by blast
8536    AOT_hence (A!a & z [R]a] = z [R]a])  az [R]a]
8537      by (metis "&I" "deduction-theorem" "raa-cor:3")
8538    AOT_hence az [R]a]
8539      using a_prop[THEN "&E"(1)] "→E" "&I"
8540      by (metis "rule=I:1" den)
8541    AOT_thus az [R]a] & ¬az [R]a]  by (metis "0" "raa-cor:3") 
8542  qed
8543  AOT_hence y(A!y & z [R]a] = z [R]y] & ¬yz [R]a])
8544    by (rule a_prop[THEN "&E"(2), THEN "∀E"(1), OF den, THEN "≡E"(1), rotated])
8545  then AOT_obtain b where b_prop: A!b & z [R]a] = z [R]b] & ¬bz [R]a]
8546    using "∃E"[rotated] by blast
8547  AOT_have 1: a  b
8548    apply (rule "dfI"[OF "=-infix"])
8549    using a_enc b_prop[THEN "&E"(2)]
8550    using "¬¬I" "rule=E" id_sym "≡E"(4) "oth-class-taut:3:a"
8551          "raa-cor:3" "reductio-aa:1" by fast
8552  AOT_have a:  [R]a] = ([R]a)
8553    apply (rule "lambda-predicates:3[zero]"[axiom_inst, unvarify p])
8554    by (meson "log-prop-prop:2")
8555  AOT_have b:  [R]b] = ([R]b)
8556    apply (rule "lambda-predicates:3[zero]"[axiom_inst, unvarify p])
8557    by (meson "log-prop-prop:2")
8558  AOT_have  [R]a] =  [R]b]
8559    apply (rule "rule=E"[rotated, OF a[THEN id_sym]])
8560    apply (rule "rule=E"[rotated, OF b[THEN id_sym]])
8561    apply (rule "identity:4"[THEN "dfI", OF "&I", rotated])
8562    using b_prop "&E" apply blast
8563    apply (safe intro!: "&I")
8564    by (simp add: "log-prop-prop:2")+
8565  AOT_hence A!a & A!b & a  b &  [R]a] =  [R]b]
8566    using 1 a_prop[THEN "&E"(1)] b_prop[THEN "&E"(1), THEN "&E"(1)]
8567          "&I" by auto
8568  AOT_hence y (A!a & A!y & a  y &  [R]a] =  [R]y]) by (rule "∃I")
8569  AOT_thus xy (A!x & A!y & x  y &  [R]x] =  [R]y]) by (rule "∃I")
8570qed
8571
8572AOT_theorem aclassical2: xy (A!x & A!y & x  y & F ([F]x  [F]y))
8573proof -
8574  AOT_have x y ([A!]x & [A!]y & x  y &
8575               z xy F ([F]x  [F]y)]zx] =
8576               z xy F ([F]x  [F]y)]zy])
8577    by (rule "aclassical:1"[THEN "∀E"(1)[where τ="«xy F ([F]x  [F]y)]»"]])
8578       "cqt:2"
8579  then AOT_obtain x where y ([A!]x & [A!]y & x  y &
8580               z xy F ([F]x  [F]y)]zx] =
8581               z xy F ([F]x  [F]y)]zy])
8582    using "∃E"[rotated] by blast
8583  then AOT_obtain y where 0: ([A!]x & [A!]y & x  y &
8584               z xy F ([F]x  [F]y)]zx] =
8585               z xy F ([F]x  [F]y)]zy])
8586    using "∃E"[rotated] by blast
8587  AOT_have z xy F ([F]x  [F]y)]zx]x
8588    by (auto intro!: "β←C"(1) "cqt:2"
8589             simp: "&I" "ex:1:a" prod_denotesI "rule-ui:3"
8590                   "oth-class-taut:3:a" "universal-cor")
8591  AOT_hence z xy F ([F]x  [F]y)]zy]x
8592    by (rule "rule=E"[rotated, OF 0[THEN "&E"(2)]])
8593  AOT_hence xy F ([F]x  [F]y)]xy
8594    by (rule "β→C"(1))
8595  AOT_hence F ([F]x  [F]y)
8596    using "β→C"(1) old.prod.case by fast
8597  AOT_hence [A!]x & [A!]y & x  y & F ([F]x  [F]y)
8598    using 0 "&E" "&I" by blast
8599  AOT_hence y ([A!]x & [A!]y & x  y & F ([F]x  [F]y)) by (rule "∃I")
8600  AOT_thus xy ([A!]x & [A!]y & x  y & F ([F]x  [F]y)) by (rule "∃I"(2))
8601qed
8602
8603AOT_theorem "kirchner-thm:1":
8604  x φ{x}]  xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8605proof(rule "≡I"; rule "→I")
8606  AOT_assume x φ{x}]
8607  AOT_hence x φ{x}] by (metis "exist-nec" "vdash-properties:10")
8608  moreover AOT_have x φ{x}]  xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8609  proof (rule "RM:1"; rule "→I"; rule GEN; rule GEN; rule "→I")
8610    AOT_modally_strict {
8611      fix x y
8612      AOT_assume 0: x φ{x}]
8613      moreover AOT_assume F([F]x  [F]y)
8614      ultimately AOT_have x φ{x}]x  x φ{x}]y
8615        using "∀E" by blast
8616      AOT_thus (φ{x}  φ{y})
8617        using "beta-C-meta"[THEN "→E", OF 0] "≡E"(6) by meson
8618    }
8619  qed
8620  ultimately AOT_show xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8621    using "→E" by blast
8622next
8623  AOT_have xy(F([F]x  [F]y)  (φ{x}  φ{y})) 
8624            y(x(F([F]x  [F]y) & φ{x})  φ{y})
8625  proof(rule "RM:1"; rule "→I"; rule GEN)
8626    AOT_modally_strict {
8627      AOT_assume xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8628      AOT_hence indisc: φ{x}  φ{y} if F([F]x  [F]y) for x y
8629        using "∀E"(2) "→E" that by blast
8630      AOT_show (x(F([F]x  [F]y) & φ{x})  φ{y}) for y
8631      proof (rule "raa-cor:1")
8632        AOT_assume ¬(x(F([F]x  [F]y) & φ{x})  φ{y})
8633        AOT_hence (x(F([F]x  [F]y) & φ{x}) & ¬φ{y}) 
8634                   (¬(x(F([F]x  [F]y) & φ{x})) & φ{y})
8635          using "≡E"(1) "oth-class-taut:4:h" by blast
8636        moreover {
8637          AOT_assume 0: x(F([F]x  [F]y) & φ{x}) & ¬φ{y}
8638          AOT_obtain a where F([F]a  [F]y) & φ{a}
8639            using "∃E"[rotated, OF 0[THEN "&E"(1)]]  by blast
8640          AOT_hence φ{y}
8641            using indisc[THEN "≡E"(1)] "&E" by blast
8642          AOT_hence p & ¬p for p
8643            using 0[THEN "&E"(2)] "&I" "raa-cor:3" by blast
8644        }
8645        moreover {
8646          AOT_assume 0: (¬(x(F([F]x  [F]y) & φ{x})) & φ{y})
8647          AOT_hence x ¬(F([F]x  [F]y) & φ{x})
8648            using "&E"(1) "cqt-further:4" "→E" by blast
8649          AOT_hence ¬(F([F]y  [F]y) & φ{y})
8650            using "∀E" by blast
8651          AOT_hence ¬F([F]y  [F]y)  ¬φ{y}
8652            using "≡E"(1) "oth-class-taut:5:c" by blast
8653          moreover AOT_have F([F]y  [F]y)
8654            by (simp add: "oth-class-taut:3:a" "universal-cor")
8655          ultimately AOT_have ¬φ{y} by (metis "¬¬I" "∨E"(2))
8656          AOT_hence p & ¬p for p
8657            using 0[THEN "&E"(2)] "&I" "raa-cor:3" by blast
8658        }
8659        ultimately AOT_show p & ¬p for p
8660          using "∨E"(3) "raa-cor:1" by blast
8661      qed
8662    }
8663  qed
8664  moreover AOT_assume xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8665  ultimately AOT_have y(x(F([F]x  [F]y) & φ{x})  φ{y})
8666    using "→E" by blast
8667  AOT_thus x φ{x}]
8668    by (rule "safe-ext"[axiom_inst, THEN "→E", OF "&I", rotated]) "cqt:2"
8669qed
8670
8671AOT_theorem "kirchner-thm:2":
8672  x1...xn φ{x1...xn}]  x1...∀xny1...∀yn
8673    (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8674proof(rule "≡I"; rule "→I")
8675  AOT_assume x1...xn φ{x1...xn}]
8676  AOT_hence x1...xn φ{x1...xn}] by (metis "exist-nec" "→E")
8677  moreover AOT_have x1...xn φ{x1...xn}]  x1...∀xny1...∀yn
8678    (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8679  proof (rule "RM:1"; rule "→I"; rule GEN; rule GEN; rule "→I")
8680    AOT_modally_strict {
8681      fix x1xn y1yn :: 'a AOT_var
8682      AOT_assume 0: x1...xn φ{x1...xn}]
8683      moreover AOT_assume F([F]x1...xn  [F]y1...yn)
8684      ultimately AOT_have x1...xn φ{x1...xn}]x1...xn 
8685                           x1...xn φ{x1...xn}]y1...yn
8686        using "∀E" by blast
8687      AOT_thus (φ{x1...xn}  φ{y1...yn})
8688        using "beta-C-meta"[THEN "→E", OF 0] "≡E"(6) by meson
8689    }
8690  qed
8691  ultimately AOT_show x1...∀xny1...∀yn(
8692    F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn})
8693  )
8694    using "→E" by blast
8695next
8696  AOT_have 8697    (x1...∀xny1...∀yn
8698      (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn})))
8699     y1...∀yn
8700        ((x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn})) 
8701         φ{y1...yn})
8702  proof(rule "RM:1"; rule "→I"; rule GEN)
8703    AOT_modally_strict {
8704      AOT_assume x1...∀xny1...∀yn
8705        (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8706      AOT_hence indisc: φ{x1...xn}  φ{y1...yn}
8707        if F([F]x1...xn  [F]y1...yn) for x1xn y1yn
8708        using "∀E"(2) "→E" that by blast
8709      AOT_show (x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn})) 
8710                φ{y1...yn} for y1yn
8711      proof (rule "raa-cor:1")
8712        AOT_assume ¬((x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn})) 
8713                    φ{y1...yn})
8714        AOT_hence ((x1...∃xn(F([F]x1...xn  [F]y1...yn)
8715                    & φ{x1...xn}))
8716                    & ¬φ{y1...yn}) 
8717                  (¬(x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn}))
8718                   & φ{y1...yn})
8719          using "≡E"(1) "oth-class-taut:4:h" by blast
8720        moreover {
8721          AOT_assume 0: (x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn}))
8722                         & ¬φ{y1...yn}
8723          AOT_obtain a1an where F([F]a1...an  [F]y1...yn) & φ{a1...an}
8724            using "∃E"[rotated, OF 0[THEN "&E"(1)]]  by blast
8725          AOT_hence φ{y1...yn}
8726            using indisc[THEN "≡E"(1)] "&E" by blast
8727          AOT_hence p & ¬p for p
8728            using 0[THEN "&E"(2)] "&I" "raa-cor:3" by blast
8729        }
8730        moreover {
8731          AOT_assume 0: ¬(x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn}))
8732                         & φ{y1...yn}
8733          AOT_hence x1...∀xn ¬(F([F]x1...xn  [F]y1...yn) & φ{x1...xn})
8734            using "&E"(1) "cqt-further:4" "→E" by blast
8735          AOT_hence ¬(F([F]y1...yn  [F]y1...yn) & φ{y1...yn})
8736            using "∀E" by blast
8737          AOT_hence ¬F([F]y1...yn  [F]y1...yn)  ¬φ{y1...yn}
8738            using "≡E"(1) "oth-class-taut:5:c" by blast
8739          moreover AOT_have F([F]y1...yn  [F]y1...yn)
8740            by (simp add: "oth-class-taut:3:a" "universal-cor")
8741          ultimately AOT_have ¬φ{y1...yn}
8742            by (metis "¬¬I" "∨E"(2))
8743          AOT_hence p & ¬p for p
8744            using 0[THEN "&E"(2)] "&I" "raa-cor:3" by blast
8745        }
8746        ultimately AOT_show p & ¬p for p
8747          using "∨E"(3) "raa-cor:1" by blast
8748      qed
8749    }
8750  qed
8751  moreover AOT_assume x1...∀xny1...∀yn
8752    (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8753  ultimately AOT_have y1...∀yn
8754    ((x1...∃xn(F([F]x1...xn  [F]y1...yn) & φ{x1...xn})) 
8755     φ{y1...yn})
8756    using "→E" by blast
8757  AOT_thus x1...xn φ{x1...xn}]
8758    by (rule "safe-ext"[axiom_inst, THEN "→E", OF "&I", rotated]) "cqt:2"
8759qed
8760
8761AOT_theorem "kirchner-thm-cor:1":
8762  x φ{x}]  xy(F([F]x  [F]y)  (φ{x}  φ{y}))
8763proof(rule "→I"; rule GEN; rule GEN; rule "→I")
8764  fix x y
8765  AOT_assume x φ{x}]
8766  AOT_hence xy (F ([F]x  [F]y)  (φ{x}  φ{y}))
8767    by (rule "kirchner-thm:1"[THEN "≡E"(1)])
8768  AOT_hence xy (F ([F]x  [F]y)  (φ{x}  φ{y}))
8769    using CBF[THEN "→E"] by blast
8770  AOT_hence y (F ([F]x  [F]y)  (φ{x}  φ{y}))
8771    using "∀E" by blast
8772  AOT_hence y (F ([F]x  [F]y)  (φ{x}  φ{y}))
8773    using CBF[THEN "→E"] by blast
8774  AOT_hence (F ([F]x  [F]y)  (φ{x}  φ{y}))
8775    using "∀E" by blast
8776  AOT_hence F ([F]x  [F]y)  (φ{x}  φ{y})
8777    using "qml:1"[axiom_inst] "vdash-properties:6" by blast
8778  moreover AOT_assume F([F]x  [F]y)
8779  ultimately AOT_show (φ{x}  φ{y}) using "→E" "ind-nec" by blast
8780qed
8781
8782AOT_theorem "kirchner-thm-cor:2":
8783  x1...xn φ{x1...xn}]  x1...∀xny1...∀yn
8784    (F([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8785proof(rule "→I"; rule GEN; rule GEN; rule "→I")
8786  fix x1xn y1yn
8787  AOT_assume x1...xn φ{x1...xn}]
8788  AOT_hence 0: x1...∀xny1...∀yn
8789    (F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8790    by (rule "kirchner-thm:2"[THEN "≡E"(1)])
8791  AOT_have x1...∀xny1...∀yn
8792    (F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8793  proof(rule GEN; rule GEN)
8794    fix x1xn y1yn
8795    AOT_show (F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8796      apply (rule "RM:1"[THEN "→E", rotated, OF 0]; rule "→I")
8797      using "∀E" by blast
8798  qed
8799  AOT_hence y1...∀yn (F ([F]x1...xn  [F]y1...yn) 
8800                         (φ{x1...xn}  φ{y1...yn}))
8801    using "∀E" by blast
8802  AOT_hence (F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8803    using "∀E" by blast
8804  AOT_hence (F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn}))
8805    using "∀E" by blast
8806  AOT_hence 0: F ([F]x1...xn  [F]y1...yn)  (φ{x1...xn}  φ{y1...yn})
8807    using "qml:1"[axiom_inst] "vdash-properties:6" by blast
8808  moreover AOT_assume F([F]x1...xn  [F]y1...yn)
8809  moreover AOT_have x1...xn F ([F]x1...xn  [F]y1...yn)] by "cqt:2"
8810  ultimately AOT_have x1...xn F ([F]x1...xn  [F]y1...yn)]x1...xn 
8811                       x1...xn F ([F]x1...xn  [F]y1...yn)]y1...yn
8812    using "∀E" by blast
8813  moreover AOT_have x1...xn F ([F]x1...xn  [F]y1...yn)]y1...yn
8814    apply (rule "β←C"(1))
8815      apply "cqt:2[lambda]"
8816     apply (fact "cqt:2[const_var]"[axiom_inst])
8817    by (simp add: RN GEN "oth-class-taut:3:a")
8818  ultimately AOT_have x1...xn F ([F]x1...xn  [F]y1...yn)]x1...xn
8819    using "≡E"(2) by blast
8820  AOT_hence F ([F]x1...xn  [F]y1...yn)
8821    using "β→C"(1) by blast
8822  AOT_thus (φ{x1...xn}  φ{y1...yn}) using "→E" 0 by blast
8823qed
8824
8825subsection‹Propositional Properties›
8826text‹\label{PLM: 9.12}›
8827
8828AOT_define propositional :: Π  φ (Propositional'(_'))
8829  "prop-prop1": Propositional([F]) df p(F = y p])
8830
8831AOT_theorem "prop-prop2:1": p y p]
8832  by (rule GEN) "cqt:2[lambda]"
8833
8834AOT_theorem "prop-prop2:2": ν φ]
8835  by "cqt:2[lambda]"
8836
8837AOT_theorem "prop-prop2:3": F = y p]  x([F]x  p)
8838proof (rule "→I")
8839  AOT_assume 0: F = y p]
8840  AOT_show x([F]x  p)
8841    by (rule "rule=E"[rotated, OF 0[symmetric]];
8842        rule RN; rule GEN; rule "beta-C-meta"[THEN "→E"])
8843      "cqt:2[lambda]"
8844qed
8845
8846AOT_theorem "prop-prop2:4": Propositional([F])  Propositional([F])
8847proof(rule "→I")
8848  AOT_assume Propositional([F])
8849  AOT_hence p(F = y p])
8850    using "dfE"[OF "prop-prop1"] by blast
8851  then AOT_obtain p where F = y p]
8852    using "∃E"[rotated] by blast
8853  AOT_hence (F = y p])
8854    using "id-nec:2" "modus-tollens:1" "raa-cor:3" by blast
8855  AOT_hence p (F = y p])
8856    using "∃I" by fast
8857  AOT_hence 0: p (F = y p])
8858    by (metis Buridan "vdash-properties:10")
8859  AOT_thus Propositional([F])
8860    using "prop-prop1"[THEN "≡Df"]
8861    by (AOT_subst Propositional([F]) p (F = y p])) auto
8862qed
8863
8864AOT_define indicriminate :: Π  φ ("Indiscriminate'(_')")
8865  "prop-indis": Indiscriminate([F]) df F & (x [F]x  x [F]x)
8866
8867AOT_theorem "prop-in-thm": Propositional([Π])  Indiscriminate([Π])
8868proof(rule "→I")
8869  AOT_assume Propositional([Π])
8870  AOT_hence p Π = y p] using "dfE"[OF "prop-prop1"] by blast
8871  then AOT_obtain p where Π_def: Π = y p] using "∃E"[rotated] by blast
8872  AOT_show Indiscriminate([Π])
8873  proof (rule "dfI"[OF "prop-indis"]; rule "&I")
8874    AOT_show Π
8875      using Π_def by (meson "t=t-proper:1" "vdash-properties:6")
8876  next
8877    AOT_show (x [Π]x  x [Π]x)
8878    proof (rule "rule=E"[rotated, OF Π_def[symmetric]];
8879           rule RN; rule "→I"; rule GEN)
8880      AOT_modally_strict {
8881        AOT_assume x y p]x
8882        then AOT_obtain a where y p]a using "∃E"[rotated] by blast
8883        AOT_hence 0: p by (metis "β→C"(1))
8884        AOT_show y p]x for x
8885          apply (rule "β←C"(1))
8886            apply "cqt:2[lambda]"
8887           apply (fact "cqt:2[const_var]"[axiom_inst])
8888          by (fact 0)
8889      }
8890    qed
8891  qed
8892qed
8893
8894AOT_theorem "prop-in-f:1": Necessary([F])  Indiscriminate([F])
8895proof (rule "→I")
8896  AOT_assume Necessary([F])
8897  AOT_hence 0: x1...∀xn [F]x1...xn
8898    using "dfE"[OF "contingent-properties:1"] by blast
8899  AOT_show Indiscriminate([F])
8900    by (rule "dfI"[OF "prop-indis"])
8901       (metis "0" "KBasic:1" "&I" "ex:1:a" "rule-ui:2[const_var]" "→E") 
8902qed
8903
8904AOT_theorem "prop-in-f:2": Impossible([F])  Indiscriminate([F])
8905proof (rule "→I")
8906  AOT_modally_strict {
8907    AOT_have x ¬[F]x  (x [F]x  x [F]x)
8908      by (metis "∃E" "cqt-orig:3" "Hypothetical Syllogism" "→I" "raa-cor:3")
8909  }
8910  AOT_hence 0: x ¬[F]x  (x [F]x  x [F]x)
8911    by (rule "RM:1")
8912  AOT_assume Impossible([F])
8913  AOT_hence x ¬[F]x
8914    using "dfE"[OF "contingent-properties:2"] "&E" by blast
8915  AOT_hence 1: (x [F]x  x [F]x)
8916    using 0 "→E" by blast
8917  AOT_show Indiscriminate([F])
8918    by (rule "dfI"[OF "prop-indis"]; rule "&I")
8919       (simp add: "ex:1:a" "rule-ui:2[const_var]" 1)+
8920qed
8921
8922AOT_theorem "prop-in-f:3:a": ¬Indiscriminate([E!])
8923proof(rule "raa-cor:2")
8924  AOT_assume Indiscriminate([E!])
8925  AOT_hence 0: (x [E!]x  x [E!]x)
8926    using "dfE"[OF "prop-indis"] "&E" by blast
8927  AOT_hence x [E!]x  x [E!]x
8928    using "KBasic:13" "vdash-properties:10" by blast
8929  moreover AOT_have x [E!]x
8930    by (simp add: "thm-cont-e:3")
8931  ultimately AOT_have x [E!]x
8932    by (metis "vdash-properties:6")
8933  AOT_thus p & ¬p for p
8934    by (metis "dfE" "conventions:5" "o-objects-exist:5" "reductio-aa:1")
8935qed
8936
8937AOT_theorem "prop-in-f:3:b": ¬Indiscriminate([E!]-)
8938proof (rule "rule=E"[rotated, OF "rel-neg-T:2"[symmetric]];
8939       rule "raa-cor:2")
8940  AOT_assume Indiscriminate(x ¬[E!]x])
8941  AOT_hence 0: (x x ¬[E!]x]x  x x ¬[E!]x]x)
8942    using "dfE"[OF "prop-indis"] "&E" by blast
8943  AOT_hence x x ¬[E!]x]x  x x ¬[E!]x]x
8944    using "→E" "qml:1" "vdash-properties:1[2]" by blast
8945  moreover AOT_have x x ¬[E!]x]x
8946    apply (AOT_subst x ¬E!x]x ¬E!x for: x)
8947    apply (rule "beta-C-meta"[THEN "→E"])
8948     apply "cqt:2"
8949    by (metis (full_types) "B◇" RN "T◇" "cqt-further:2"
8950                           "o-objects-exist:5" "→E")
8951  ultimately AOT_have 1: x x ¬[E!]x]x
8952    by (metis "vdash-properties:6")
8953  AOT_hence x ¬[E!]x
8954    by (AOT_subst (reverse) ¬[E!]x  x ¬[E!]x]x for: x)
8955       (auto intro!: "cqt:2" "beta-C-meta"[THEN "→E"])
8956  AOT_hence x ¬[E!]x by (metis "CBF" "vdash-properties:10")
8957  moreover AOT_obtain a where abs_a: O!a
8958    using "∃E" "o-objects-exist:1" "qml:2"[axiom_inst] "→E" by blast
8959  ultimately AOT_have ¬[E!]a using "∀E" by blast
8960  AOT_hence 2: ¬[E!]a by (metis "dfE" "conventions:5" "reductio-aa:1")
8961  AOT_have A!a
8962    apply (rule "=dfI"(2)[OF AOT_abstract])
8963     apply "cqt:2[lambda]"
8964    apply (rule "β←C"(1))
8965      apply "cqt:2[lambda]"
8966    using "cqt:2[const_var]"[axiom_inst] apply blast
8967    by (fact 2)
8968  AOT_thus p & ¬p for p using abs_a
8969    by (metis "≡E"(1) "oa-contingent:2" "reductio-aa:1")
8970qed
8971
8972AOT_theorem "prop-in-f:3:c": ¬Indiscriminate(O!)
8973proof(rule "raa-cor:2")
8974  AOT_assume Indiscriminate(O!)
8975  AOT_hence 0: (x O!x  x O!x)
8976    using "dfE"[OF "prop-indis"] "&E" by blast
8977  AOT_hence x O!x  x O!x
8978    using "qml:1"[axiom_inst] "vdash-properties:6" by blast
8979  moreover AOT_have x O!x
8980    using "o-objects-exist:1" by blast
8981  ultimately AOT_have x O!x
8982    by (metis "vdash-properties:6")
8983  AOT_thus p & ¬p for p
8984    by (metis "o-objects-exist:3" "qml:2"[axiom_inst] "raa-cor:3" "→E")
8985qed
8986
8987AOT_theorem "prop-in-f:3:d": ¬Indiscriminate(A!)
8988proof(rule "raa-cor:2")
8989  AOT_assume Indiscriminate(A!)
8990  AOT_hence 0: (x A!x  x A!x)
8991    using "dfE"[OF "prop-indis"] "&E" by blast
8992  AOT_hence x A!x  x A!x
8993    using "qml:1"[axiom_inst] "vdash-properties:6" by blast
8994  moreover AOT_have x A!x
8995    using "o-objects-exist:2" by blast
8996  ultimately AOT_have x A!x
8997    by (metis "vdash-properties:6")
8998  AOT_thus p & ¬p for p
8999    by (metis "o-objects-exist:4" "qml:2"[axiom_inst] "raa-cor:3" "→E")
9000qed
9001
9002AOT_theorem "prop-in-f:4:a": ¬Propositional(E!)
9003  using "modus-tollens:1" "prop-in-f:3:a" "prop-in-thm" by blast
9004
9005AOT_theorem "prop-in-f:4:b": ¬Propositional(E!-)
9006  using "modus-tollens:1" "prop-in-f:3:b" "prop-in-thm" by blast
9007
9008AOT_theorem "prop-in-f:4:c": ¬Propositional(O!)
9009  using "modus-tollens:1" "prop-in-f:3:c" "prop-in-thm" by blast
9010
9011AOT_theorem "prop-in-f:4:d": ¬Propositional(A!)
9012  using "modus-tollens:1" "prop-in-f:3:d" "prop-in-thm" by blast
9013
9014AOT_theorem "prop-prop-nec:1": p (F = y p])  p(F = y p])
9015proof(rule "→I")
9016  AOT_assume p (F = y p])
9017  AOT_hence p (F = y p])
9018    by (metis "BF◇" "→E")
9019  then AOT_obtain p where (F = y p])
9020    using "∃E"[rotated] by blast
9021  AOT_hence F = y p]
9022    by (metis "derived-S5-rules:2" emptyE "id-nec:2" "→E")
9023  AOT_thus p(F = y p]) by (rule "∃I")
9024qed
9025
9026AOT_theorem "prop-prop-nec:2": p (F  y p])  p(F  y p])
9027proof(rule "→I")
9028  AOT_assume p (F  y p])
9029  AOT_hence (F  y p]) for p
9030    using "∀E" by blast
9031  AOT_hence (F  y p]) for p
9032    by (rule "id-nec2:2"[unvarify β, THEN "→E", rotated]) "cqt:2"
9033  AOT_hence p (F  y p]) by (rule GEN)
9034  AOT_thus p (F  y p]) using BF[THEN "→E"] by fast
9035qed
9036
9037AOT_theorem "prop-prop-nec:3": p (F = y p])  p(F = y p])
9038proof(rule "→I")
9039  AOT_assume p (F = y p])
9040  then AOT_obtain p where (F = y p]) using "∃E"[rotated] by blast
9041  AOT_hence (F = y p]) by (metis "id-nec:2" "→E")
9042  AOT_hence p(F = y p]) by (rule "∃I")
9043  AOT_thus p(F = y p]) by (metis Buridan "→E")
9044qed
9045
9046AOT_theorem "prop-prop-nec:4": p (F  y p])  p(F  y p])
9047proof(rule "→I")
9048  AOT_assume p (F  y p])
9049  AOT_hence p (F  y p]) by (metis "Buridan◇" "→E")
9050  AOT_hence (F  y p]) for p
9051    using "∀E" by blast
9052  AOT_hence F  y p] for p
9053    by (rule "id-nec2:3"[unvarify β, THEN "→E", rotated]) "cqt:2"
9054  AOT_thus p (F  y p]) by (rule GEN)
9055qed
9056
9057AOT_theorem "enc-prop-nec:1":
9058  F (x[F]  p(F = y p]))  F(x[F]  p (F = y p]))
9059proof(rule "→I"; rule GEN; rule "→I")
9060  fix F
9061  AOT_assume F (x[F]  p(F = y p]))
9062  AOT_hence F (x[F]  p(F = y p]))
9063    using "Buridan◇" "vdash-properties:10" by blast
9064  AOT_hence 0: (x[F]  p(F = y p])) using "∀E" by blast
9065  AOT_assume x[F]
9066  AOT_hence x[F] by (metis "en-eq:2[1]" "≡E"(1))
9067  AOT_hence p(F = y p])
9068    using 0 by (metis "KBasic2:4" "≡E"(1) "vdash-properties:10")
9069  AOT_thus p(F = y p])
9070    using "prop-prop-nec:1"[THEN "→E"] by blast
9071qed
9072
9073AOT_theorem "enc-prop-nec:2":
9074  F (x[F]  p(F = y p]))  F(x[F]  p (F = y p]))
9075  using "derived-S5-rules:1"[where Γ="{}", simplified, OF "enc-prop-nec:1"]
9076  by blast
9077
9078(*<*)
9079end
9080(*>*)