theory AOT_Definitions
imports AOT_semantics
begin
section ‹ Definitions of AOT›
AOT_theorem "conventions:1" : ‹ φ & ψ ≡ d f ¬ (φ → ¬ ψ)›
using AOT_conj.
AOT_theorem "conventions:2" : ‹ φ ∨ ψ ≡ d f ¬ φ → ψ›
using AOT_disj.
AOT_theorem "conventions:3" : ‹ φ ≡ ψ ≡ d f (φ → ψ) & (ψ → φ)›
using AOT_equiv.
AOT_theorem "conventions:4" : ‹ ∃ α φ{α} ≡ d f ¬ ∀ α ¬ φ{α}›
using AOT_exists.
AOT_theorem "conventions:5" : ‹ ♢ φ ≡ d f ¬ ◻ ¬ φ›
using AOT_dia.
declare "conventions:1" [AOT_defs] "conventions:2" [AOT_defs]
"conventions:3" [AOT_defs] "conventions:4" [AOT_defs]
"conventions:5" [AOT_defs]
notepad
begin
fix φ ψ χ
text ‹ \linelabel {precedence}›
have "conventions3[1]" : ‹ « φ → ψ ≡ ¬ ψ → ¬ φ¬ = « (φ → ψ) ≡ (¬ ψ → ¬ φ)¬ ›
by blast
have "conventions3[2]" : ‹ « φ & ψ → χ¬ = « (φ & ψ) → χ¬ ›
and ‹ « φ ∨ ψ → χ¬ = « (φ ∨ ψ) → χ¬ ›
by blast+
have "conventions3[3]" : ‹ « φ ∨ ψ & χ¬ = « (φ ∨ ψ) & χ¬ ›
and ‹ « φ & ψ ∨ χ¬ = « (φ & ψ) ∨ χ¬ ›
by blast+ ― ‹ Note that PLM instead generally uses parenthesis in these cases.›
end
AOT_theorem "existence:1" : ‹ κ↓ ≡ d f ∃ F [F]κ›
by (simp add: AOT_sem_denotes AOT_sem_exists AOT_model_equiv_def)
(metis AOT_sem_denotes AOT_sem_exe AOT_sem_lambda_beta AOT_sem_lambda_denotes)
AOT_theorem "existence:2" : ‹ Π↓ ≡ d f ∃ x1 ...∃ xn x1 ...xn [Π]›
using AOT_sem_denotes AOT_sem_enc_denotes AOT_sem_universal_encoder
by (simp add: AOT_sem_denotes AOT_sem_exists AOT_model_equiv_def) blast
AOT_theorem "existence:2[1]" : ‹ Π↓ ≡ d f ∃ x x[Π]›
using "existence:2" [of Π] by simp
AOT_theorem "existence:2[2]" : ‹ Π↓ ≡ d f ∃ x∃ y xy[Π]›
using "existence:2" [of Π]
by (simp add: AOT_sem_denotes AOT_sem_exists AOT_model_equiv_def
AOT_model_denotes_prod_def)
AOT_theorem "existence:2[3]" : ‹ Π↓ ≡ d f ∃ x∃ y∃ z xyz[Π]›
using "existence:2" [of Π]
by (simp add: AOT_sem_denotes AOT_sem_exists AOT_model_equiv_def
AOT_model_denotes_prod_def)
AOT_theorem "existence:2[4]" : ‹ Π↓ ≡ d f ∃ x1 ∃ x2 ∃ x3 ∃ x4 x1 x2 x3 x4 [Π]›
using "existence:2" [of Π]
by (simp add: AOT_sem_denotes AOT_sem_exists AOT_model_equiv_def
AOT_model_denotes_prod_def)
AOT_theorem "existence:3" : ‹ φ↓ ≡ d f [λx φ]↓ ›
by (simp add: AOT_sem_denotes AOT_model_denotes_o _def AOT_model_equiv_def
AOT_model_lambda_denotes)
declare "existence:1" [AOT_defs] "existence:2" [AOT_defs] "existence:2[1]" [AOT_defs]
"existence:2[2]" [AOT_defs] "existence:2[3]" [AOT_defs]
"existence:2[4]" [AOT_defs] "existence:3" [AOT_defs]
AOT_theorem "oa:1" : ‹ O! =d f [λx ♢ E!x]› using AOT_ordinary .
AOT_theorem "oa:2" : ‹ A! =d f [λx ¬ ♢ E!x]› using AOT_abstract .
declare "oa:1" [AOT_defs] "oa:2" [AOT_defs]
AOT_theorem "identity:1" :
‹ x = y ≡ d f ([O!]x & [O!]y & ◻ ∀ F ([F]x ≡ [F]y)) ∨
([A!]x & [A!]y & ◻ ∀ F (x[F] ≡ y[F]))›
unfolding AOT_model_equiv_def
using AOT_sem_ind_eq[of _ x y]
by (simp add: AOT_sem_ordinary AOT_sem_abstract AOT_sem_conj
AOT_sem_box AOT_sem_equiv AOT_sem_forall AOT_sem_disj AOT_sem_eq
AOT_sem_denotes)
AOT_theorem "identity:2" :
‹ F = G ≡ d f F↓ & G↓ & ◻ ∀ x(x[F] ≡ x[G]) ›
using AOT_sem_enc_eq[of _ F G]
by (auto simp: AOT_model_equiv_def AOT_sem_imp AOT_sem_denotes AOT_sem_eq
AOT_sem_conj AOT_sem_forall AOT_sem_box AOT_sem_equiv)
AOT_theorem "identity:3[2]" :
‹ F = G ≡ d f F↓ & G↓ & ∀ y([λz [F]zy] = [λz [G]zy] & [λz [F]yz] = [λz [G]yz]) ›
by (auto simp: AOT_model_equiv_def AOT_sem_proj_id_prop[of _ F G]
AOT_sem_proj_id_prod_def AOT_sem_conj AOT_sem_denotes
AOT_sem_forall AOT_sem_unary_proj_id AOT_model_denotes_prod_def)
AOT_theorem "identity:3[3]" :
‹ F = G ≡ d f F↓ & G↓ & ∀ y1 ∀ y2 ([λz [F]zy1 y2 ] = [λz [G]zy1 y2 ] &
[λz [F]y1 zy2 ] = [λz [G]y1 zy2 ] &
[λz [F]y1 y2 z] = [λz [G]y1 y2 z]) ›
by (auto simp: AOT_model_equiv_def AOT_sem_proj_id_prop[of _ F G]
AOT_sem_proj_id_prod_def AOT_sem_conj AOT_sem_denotes
AOT_sem_forall AOT_sem_unary_proj_id AOT_model_denotes_prod_def)
AOT_theorem "identity:3[4]" :
‹ F = G ≡ d f F↓ & G↓ & ∀ y1 ∀ y2 ∀ y3 ([λz [F]zy1 y2 y3 ] = [λz [G]zy1 y2 y3 ] &
[λz [F]y1 zy2 y3 ] = [λz [G]y1 zy2 y3 ] &
[λz [F]y1 y2 zy3 ] = [λz [G]y1 y2 zy3 ] &
[λz [F]y1 y2 y3 z] = [λz [G]y1 y2 y3 z])›
by (auto simp: AOT_model_equiv_def AOT_sem_proj_id_prop[of _ F G]
AOT_sem_proj_id_prod_def AOT_sem_conj AOT_sem_denotes
AOT_sem_forall AOT_sem_unary_proj_id AOT_model_denotes_prod_def)
AOT_theorem "identity:3" :
‹ F = G ≡ d f F↓ & G↓ & ∀ x1 ...∀ xn « AOT_sem_proj_id x1 xn (λ τ . AOT_exe F τ)
(λ τ . AOT_exe G τ)¬ ›
by (auto simp: AOT_model_equiv_def AOT_sem_proj_id_prop[of _ F G]
AOT_sem_proj_id_prod_def AOT_sem_conj AOT_sem_denotes
AOT_sem_forall AOT_sem_unary_proj_id AOT_model_denotes_prod_def)
AOT_theorem "identity:4" :
‹ p = q ≡ d f p↓ & q↓ & [λx p] = [λx q]›
by (auto simp: AOT_model_equiv_def AOT_sem_eq AOT_sem_denotes AOT_sem_conj
AOT_model_lambda_denotes AOT_sem_lambda_eq_prop_eq)
declare "identity:1" [AOT_defs] "identity:2" [AOT_defs] "identity:3[2]" [AOT_defs]
"identity:3[3]" [AOT_defs] "identity:3[4]" [AOT_defs] "identity:3" [AOT_defs]
"identity:4" [AOT_defs]
AOT_define AOT_nonidentical :: ‹ τ ==> τ ==> φ› (infixl ‹ ≠ › 50 )
"=-infix" : ‹ τ ≠ σ ≡ d f ¬ (τ = σ)›
context AOT_meta_syntax
begin
notation AOT_nonidentical (infixl ‹ \ ≠ › 50 )
end
context AOT_no_meta_syntax
begin
no_notation AOT_nonidentical (infixl ‹ \ ≠ › 50 )
end
text ‹ The following are purely technical pseudo-definitions required due to
our internal implementation of n-ary relations and ellipses using tuples.›
AOT_theorem tuple_denotes: ‹ « (τ,τ')¬ ↓ ≡ d f τ↓ & τ'↓ ›
by (simp add: AOT_model_denotes_prod_def AOT_model_equiv_def
AOT_sem_conj AOT_sem_denotes)
AOT_theorem tuple_identity_1: ‹ « (τ,τ')¬ = « (σ, σ')¬ ≡ d f (τ = σ) & (τ' = σ')›
by (auto simp: AOT_model_equiv_def AOT_sem_conj AOT_sem_eq
AOT_model_denotes_prod_def AOT_sem_denotes)
AOT_theorem tuple_forall: ‹ ∀ α1 ...∀ αn φ{α1 ...αn } ≡ d f ∀ α1 (∀ α2 ...∀ αn φ{« (α1 , α2 αn )¬ })›
by (auto simp: AOT_model_equiv_def AOT_sem_forall AOT_sem_denotes
AOT_model_denotes_prod_def)
AOT_theorem tuple_exists: ‹ ∃ α1 ...∃ αn φ{α1 ...αn } ≡ d f ∃ α1 (∃ α2 ...∃ αn φ{« (α1 , α2 αn )¬ })›
by (auto simp: AOT_model_equiv_def AOT_sem_exists AOT_sem_denotes
AOT_model_denotes_prod_def)
declare tuple_denotes[AOT_defs] tuple_identity_1[AOT_defs] tuple_forall[AOT_defs]
tuple_exists[AOT_defs]
end
Messung V0.5 in Prozent C=77 H=98 G=88
¤ Dauer der Verarbeitung: 0.8 Sekunden
¤
*© Formatika GbR, Deutschland