diff --git a/Arithmetization/Basic/IOpen.lean b/Arithmetization/Basic/IOpen.lean index c5663ea..4fbcaa3 100644 --- a/Arithmetization/Basic/IOpen.lean +++ b/Arithmetization/Basic/IOpen.lean @@ -7,13 +7,13 @@ namespace Arith noncomputable section -variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [𝐏𝐀⁻.Mod M] +variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* 𝐏𝐀⁻] namespace Model section IOpen -variable [𝐈open.Mod M] +variable [M βŠ§β‚˜* 𝐈open] @[elab_as_elim] lemma open_induction {P : M β†’ Prop} @@ -626,16 +626,16 @@ end IOpen section polynomial_induction -variable [𝐈open.Mod M] +variable [M βŠ§β‚˜* 𝐈open] variable {L : Language} [L.ORing] [Structure L M] [Structure.ORing L M] [Structure.Monotone L M] @[elab_as_elim] -lemma hierarchy_polynomial_induction (Ξ“ Ξ½) [(Theory.indScheme L (Arith.Hierarchy Ξ“ Ξ½)).Mod M] - {P : M β†’ Prop} (hP : DefinablePred L Ξ“ Ξ½ P) +lemma hierarchy_polynomial_induction (Ξ“ n) [M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ“ n)] + {P : M β†’ Prop} (hP : DefinablePred L Ξ“ n P) (zero : P 0) (even : βˆ€ x > 0, P x β†’ P (2 * x)) (odd : βˆ€ x, P x β†’ P (2 * x + 1)) : βˆ€ x, P x := by intro x; induction x using order_induction_h Β· exact Ξ“ - Β· exact Ξ½ + Β· exact n Β· exact hP case inst => exact inferInstance case inst => exact inferInstance @@ -649,15 +649,15 @@ lemma hierarchy_polynomial_induction (Ξ“ Ξ½) [(Theory.indScheme L (Arith.Hierarc end polynomial_induction -@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_sigmaβ‚€ [πˆπšΊβ‚€.Mod M] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) +@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_sigmaβ‚€ [M βŠ§β‚˜* πˆπšΊβ‚€] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) (zero : P 0) (even : βˆ€ x > 0, P x β†’ P (2 * x)) (odd : βˆ€ x, P x β†’ P (2 * x + 1)) : βˆ€ x, P x := hierarchy_polynomial_induction Ξ£ 0 hP zero even odd -@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_sigma₁ [πˆπšΊβ‚.Mod M] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 1 P) +@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_sigma₁ [M βŠ§β‚˜* πˆπšΊβ‚] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 1 P) (zero : P 0) (even : βˆ€ x > 0, P x β†’ P (2 * x)) (odd : βˆ€ x, P x β†’ P (2 * x + 1)) : βˆ€ x, P x := hierarchy_polynomial_induction Ξ£ 1 hP zero even odd -@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_pi₁ [πˆπš·β‚.Mod M] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ  1 P) +@[elab_as_elim] lemma hierarchy_polynomial_induction_oRing_pi₁ [M βŠ§β‚˜* πˆπš·β‚] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ  1 P) (zero : P 0) (even : βˆ€ x > 0, P x β†’ P (2 * x)) (odd : βˆ€ x, P x β†’ P (2 * x + 1)) : βˆ€ x, P x := hierarchy_polynomial_induction Ξ  1 hP zero even odd diff --git a/Arithmetization/Basic/Ind.lean b/Arithmetization/Basic/Ind.lean index 155fe4e..d4b17a3 100644 --- a/Arithmetization/Basic/Ind.lean +++ b/Arithmetization/Basic/Ind.lean @@ -2,8 +2,6 @@ import Arithmetization.Basic.PeanoMinus namespace LO.FirstOrder -attribute [simp] Theory.Mod.modelsTheory - namespace Arith namespace Theory @@ -40,18 +38,18 @@ variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] section -variable [𝐏𝐀⁻.Mod M] {L : Language} [L.ORing] [Structure L M] [Structure.ORing L M] [Structure.Monotone L M] +variable [M βŠ§β‚˜* 𝐏𝐀⁻] {L : Language} [L.ORing] [Structure L M] [Structure.ORing L M] [Structure.Monotone L M] section IndScheme -variable {C : Semiformula L β„• 1 β†’ Prop} [(Theory.indScheme L C).Mod M] +variable {C : Semiformula L β„• 1 β†’ Prop} [M βŠ§β‚˜* Theory.indScheme L C] private lemma induction_eval {p : Semiformula L β„• 1} (hp : C p) (v) : Semiformula.Eval! M ![0] v p β†’ (βˆ€ x, Semiformula.Eval! M ![x] v p β†’ Semiformula.Eval! M ![x + 1] v p) β†’ βˆ€ x, Semiformula.Eval! M ![x] v p := by have : M βŠ§β‚˜ (βˆ€αΆ * succInd p) := - Theory.Mod.models (T := Theory.indScheme _ C) M (by simpa using Theory.mem_indScheme_of_mem hp) + ModelsTheory.models (T := Theory.indScheme _ C) M (by simpa using Theory.mem_indScheme_of_mem hp) simp [models_iff, succInd, Semiformula.eval_substs, Semiformula.eval_rew_q Rew.toS, Function.comp, Matrix.constant_eq_singleton] at this exact this v @@ -68,7 +66,7 @@ end IndScheme section neg -variable (Ξ“ : Polarity) (s : β„•) [(Theory.indScheme L (Arith.Hierarchy Ξ“ s)).Mod M] +variable (Ξ“ : Polarity) (s : β„•) [M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ“ s)] @[elab_as_elim] lemma induction_h {P : M β†’ Prop} (hP : DefinablePred L Ξ“ s P) @@ -142,7 +140,7 @@ lemma models_indScheme_alt : M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ“.al by intro x; simp [←Matrix.constant_eq_singleton', Semiformula.eval_rewriteMap]⟩ exact this H0 Hsucc x -instance : (Theory.indScheme L (Arith.Hierarchy Ξ“.alt s)).Mod M := ⟨models_indScheme_alt Ξ“ s⟩ +instance : M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ“.alt s) := models_indScheme_alt Ξ“ s lemma least_number_h {P : M β†’ Prop} (hP : DefinablePred L Ξ“ s P) {x} (h : P x) : βˆƒ y, P y ∧ βˆ€ z < y, Β¬P z := by @@ -169,59 +167,59 @@ lemma least_number_h {P : M β†’ Prop} (hP : DefinablePred L Ξ“ s P) end neg -instance [(Theory.indScheme L (Arith.Hierarchy Ξ£ s)).Mod M] : - (Theory.indScheme L (Arith.Hierarchy Ξ“ s)).Mod M := by +instance [M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ£ s)] : + M βŠ§β‚˜* Theory.indScheme L (Arith.Hierarchy Ξ“ s) := by rcases Ξ“ Β· exact inferInstance - Β· exact ⟨models_indScheme_alt Ξ£ s⟩ + Β· exact models_indScheme_alt Ξ£ s end -def mod_iOpen_of_mod_indH (Ξ“ s) [(πˆππƒΞ“ s).Mod M] : 𝐈open.Mod M := - Theory.Mod.of_ss (T₁ := πˆππƒΞ“ s) M (Set.union_subset_union_right _ (Theory.indScheme_subset Hierarchy.of_open)) +def mod_iOpen_of_mod_indH (Ξ“ n) [M βŠ§β‚˜* πˆππƒΞ“ n] : M βŠ§β‚˜* 𝐈open := + ModelsTheory.of_ss (U := πˆππƒΞ“ n) inferInstance + (Set.union_subset_union_right _ (Theory.indScheme_subset Hierarchy.of_open)) -def mod_iSigma_of_le {s₁ sβ‚‚} (h : s₁ ≀ sβ‚‚) [(𝐈𝚺 sβ‚‚).Mod M] : (𝐈𝚺 s₁).Mod M := - Theory.Mod.of_ss M (Theory.iSigma_subset_mono h) +def mod_iSigma_of_le {n₁ nβ‚‚} (h : n₁ ≀ nβ‚‚) [M βŠ§β‚˜* 𝐈𝚺 nβ‚‚] : M βŠ§β‚˜* 𝐈𝚺 n₁ := + ModelsTheory.of_ss inferInstance (Theory.iSigma_subset_mono h) -instance [𝐈open.Mod M] : 𝐏𝐀⁻.Mod M := Theory.Mod.of_add_left M 𝐏𝐀⁻ (Theory.indScheme _ Semiformula.Open) +instance [M βŠ§β‚˜* 𝐈open] : M βŠ§β‚˜* 𝐏𝐀⁻ := ModelsTheory.of_add_left M 𝐏𝐀⁻ (Theory.indScheme _ Semiformula.Open) -instance [πˆπšΊβ‚€.Mod M] : 𝐈open.Mod M := mod_iOpen_of_mod_indH Ξ£ 0 +instance [M βŠ§β‚˜* πˆπšΊβ‚€] : M βŠ§β‚˜* 𝐈open := mod_iOpen_of_mod_indH Ξ£ 0 -instance [πˆπšΊβ‚.Mod M] : πˆπšΊβ‚€.Mod M := mod_iSigma_of_le (show 0 ≀ 1 from by simp) +instance [M βŠ§β‚˜* πˆπšΊβ‚] : M βŠ§β‚˜* πˆπšΊβ‚€ := mod_iSigma_of_le (show 0 ≀ 1 from by simp) -instance [(𝐈𝚺 Ξ½).Mod M] : (πˆππƒ Ξ“ Ξ½).Mod M := by - rcases Ξ“ - Β· exact inferInstance - Β· haveI : 𝐏𝐀⁻.Mod M := Arith.mod_peanoMinus_of_mod_indH (Ξ“ := Ξ£) (Ξ½ := Ξ½) - exact inferInstance +instance [M βŠ§β‚˜* 𝐈𝚺 n] : M βŠ§β‚˜* 𝐈𝚷 n := + haveI : M βŠ§β‚˜* 𝐏𝐀⁻ := Arith.models_peanoMinus_of_models_indH Ξ£ n + inferInstance + +instance [M βŠ§β‚˜* 𝐈𝚷 n] : M βŠ§β‚˜* 𝐈𝚺 n := + haveI : M βŠ§β‚˜* 𝐏𝐀⁻ := Arith.models_peanoMinus_of_models_indH Ξ  n + by simp [*]; simpa [Theory.iPi] using models_indScheme_alt (L := β„’β‚’α΅£) (M := M) Ξ  n -instance [(𝐈𝚷 Ξ½).Mod M] : (𝐈𝚺 Ξ½).Mod M := - haveI : 𝐏𝐀⁻.Mod M := Arith.mod_peanoMinus_of_mod_indH (Ξ“ := Ξ ) (Ξ½ := Ξ½) - Theory.Mod.of_models (by simpa [Theory.iPi] using models_indScheme_alt (M := M) Ξ  Ξ½) +lemma models_iSigma_iff_models_iPi {n} : M βŠ§β‚˜* 𝐈𝚺 n ↔ M βŠ§β‚˜* 𝐈𝚷 n := + ⟨fun _ ↦ inferInstance, fun _ ↦ inferInstance⟩ -lemma models_iSigma_iff_models_iPi : M βŠ§β‚˜* 𝐈𝚺 Ξ½ ↔ M βŠ§β‚˜* 𝐈𝚷 Ξ½ := - ⟨fun h ↦ by haveI : (𝐈𝚺 Ξ½).Mod M := ⟨h⟩; exact Theory.Mod.modelsTheory M _, - fun h ↦ by haveI : (𝐈𝚷 Ξ½).Mod M := ⟨h⟩; exact Theory.Mod.modelsTheory M _⟩ +instance [M βŠ§β‚˜* 𝐈𝚺 n] : M βŠ§β‚˜* πˆππƒΞ“ n := by rcases Ξ“ <;> exact inferInstance -@[elab_as_elim] lemma induction_iSigmaZero [πˆπšΊβ‚€.Mod M] +@[elab_as_elim] lemma induction_iSigmaZero [M βŠ§β‚˜* πˆπšΊβ‚€] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) (zero : P 0) (succ : βˆ€ x, P x β†’ P (x + 1)) : βˆ€ x, P x := induction_h Ξ£ 0 hP zero succ -@[elab_as_elim] lemma induction_iSigmaOne [πˆπšΊβ‚.Mod M] +@[elab_as_elim] lemma induction_iSigmaOne [M βŠ§β‚˜* πˆπšΊβ‚] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 1 P) (zero : P 0) (succ : βˆ€ x, P x β†’ P (x + 1)) : βˆ€ x, P x := induction_h Ξ£ 1 hP zero succ -@[elab_as_elim] lemma order_induction_iSigmaZero [πˆπšΊβ‚€.Mod M] +@[elab_as_elim] lemma order_induction_iSigmaZero [M βŠ§β‚˜* πˆπšΊβ‚€] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) (ind : βˆ€ x, (βˆ€ y < x, P y) β†’ P x) : βˆ€ x, P x := order_induction_h Ξ£ 0 hP ind -@[elab_as_elim] lemma order_induction_iSigmaOne [πˆπšΊβ‚.Mod M] +@[elab_as_elim] lemma order_induction_iSigmaOne [M βŠ§β‚˜* πˆπšΊβ‚] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 1 P) (ind : βˆ€ x, (βˆ€ y < x, P y) β†’ P x) : βˆ€ x, P x := order_induction_h Ξ£ 1 hP ind -lemma least_number_iSigmaZero [πˆπšΊβ‚€.Mod M] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) +lemma least_number_iSigmaZero [M βŠ§β‚˜* πˆπšΊβ‚€] {P : M β†’ Prop} (hP : DefinablePred β„’β‚’α΅£ Ξ£ 0 P) {x} (h : P x) : βˆƒ y, P y ∧ βˆ€ z < y, Β¬P z := least_number_h Ξ£ 0 hP h diff --git a/Arithmetization/Basic/PeanoMinus.lean b/Arithmetization/Basic/PeanoMinus.lean index 48147f3..2d0cfb1 100644 --- a/Arithmetization/Basic/PeanoMinus.lean +++ b/Arithmetization/Basic/PeanoMinus.lean @@ -6,7 +6,7 @@ namespace Arith noncomputable section -variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [𝐏𝐀⁻.Mod M] +variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* 𝐏𝐀⁻] namespace Model diff --git a/Arithmetization/Definability/Definability.lean b/Arithmetization/Definability/Definability.lean index 98088b6..216b116 100644 --- a/Arithmetization/Definability/Definability.lean +++ b/Arithmetization/Definability/Definability.lean @@ -34,7 +34,7 @@ namespace Arith section definability -variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [𝐏𝐀⁻.Mod M] +variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* 𝐏𝐀⁻] variable {L : Language} [L.ORing] [Structure L M] [Structure.ORing L M] [Structure.Monotone L M] namespace Definability diff --git a/Arithmetization/IDeltaZero/Basic.lean b/Arithmetization/IDeltaZero/Basic.lean index 41ed547..6c6a8a2 100644 --- a/Arithmetization/IDeltaZero/Basic.lean +++ b/Arithmetization/IDeltaZero/Basic.lean @@ -9,13 +9,13 @@ namespace Arith noncomputable section -variable {M : Type} [Nonempty M] [Zero M] [One M] [Add M] [Mul M] [LT M] [𝐏𝐀⁻.Mod M] +variable {M : Type} [Nonempty M] [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* 𝐏𝐀⁻] namespace Model section ISigmaβ‚€ -variable [πˆπšΊβ‚€.Mod M] +variable [M βŠ§β‚˜* πˆπšΊβ‚€] end ISigmaβ‚€ diff --git a/Arithmetization/IDeltaZero/Exponential/Exp.lean b/Arithmetization/IDeltaZero/Exponential/Exp.lean index dc9ba47..368c5a0 100644 --- a/Arithmetization/IDeltaZero/Exponential/Exp.lean +++ b/Arithmetization/IDeltaZero/Exponential/Exp.lean @@ -12,7 +12,7 @@ namespace Model section ISigmaβ‚€ -variable [πˆπš«β‚€.Mod M] +variable [M βŠ§β‚˜* πˆπš«β‚€] def ext (u z : M) : M := z / u % u @@ -87,7 +87,8 @@ def Exp.Seqβ‚›.def : Ξ”β‚€-Sentence 3 := ⟨ βˆƒ[#0 < #4 + 1] (!extDef [#0, #1, #4] ∧ !extDef [2 * (#0 * #0), #1 * #1, #4])))”, by simp⟩ lemma Exp.Seqβ‚›.defined : Ξ”β‚€-Relation₃ (Exp.Seqβ‚› : M β†’ M β†’ M β†’ Prop) via Exp.Seqβ‚›.def := by - intro v; simp [Exp.Seqβ‚›.iff, Exp.Seqβ‚›.def, ppow2_defined.pval, ext_defined.pval, ←le_iff_lt_succ, sq] + intro v; simp [Exp.Seqβ‚›.iff, Exp.Seqβ‚›.def, ppow2_defined.pval, + ext_defined.pval, ←le_iff_lt_succ, sq, numeral_eq_natCast] lemma Exp.graph_iff (x y : M) : Exp x y ↔ @@ -110,7 +111,8 @@ def Exp.def : Ξ”β‚€-Sentence 2 := ⟨ βˆƒ[#0 < #4 * #4 + 1] (#0 β‰  2 ∧ !ppow2Def [#0] ∧ !extDef [#3, #0, #2] ∧!extDef [#4, #0, #1])))”, by simp⟩ lemma Exp.defined : Ξ”β‚€-Relation (Exp : M β†’ M β†’ Prop) via Exp.def := by - intro v; simp [Exp.graph_iff, Exp.def, ppow2_defined.pval, ext_defined.pval, Exp.Seqβ‚›.defined.pval, ←le_iff_lt_succ, pow_four, sq] + intro v; simp [Exp.graph_iff, Exp.def, ppow2_defined.pval, ext_defined.pval, + Exp.Seqβ‚›.defined.pval, ←le_iff_lt_succ, pow_four, sq, numeral_eq_natCast] instance exp_definable : DefinableRel β„’β‚’α΅£ Ξ£ 0 (Exp : M β†’ M β†’ Prop) := defined_to_with_param _ Exp.defined @@ -682,7 +684,7 @@ end ISigmaβ‚€ section ISigma₁ -variable [πˆπšΊβ‚.Mod M] +variable [M βŠ§β‚˜* πˆπšΊβ‚] namespace Exp @@ -700,9 +702,7 @@ lemma range_exists_unique (x : M) : βˆƒ! y, Exp x y := by end Exp -def exponential (a : M) : M := Classical.choose! (Exp.range_exists_unique a) - -prefix:80 "exp " => exponential +instance : _root_.Exp M := ⟨fun a ↦ Classical.choose! (Exp.range_exists_unique a)⟩ section exponential @@ -714,15 +714,15 @@ def expdef : Ξ”β‚€-Sentence 2 := βŸ¨β€œ!Exp.def [#1, #0]”, by simp⟩ -- #eval expdef.val -lemma exp_defined : Ξ”β‚€-Function₁ (exponential : M β†’ M) via expdef := by +lemma exp_defined : Ξ”β‚€-Function₁ (Exp.exp : M β†’ M) via expdef := by intro v; simp [expdef, exponential_graph, Exp.defined.pval] -instance exponential_definable : DefinableFunction₁ β„’β‚’α΅£ Ξ£ 0 (exponential : M β†’ M) := defined_to_with_param _ exp_defined +instance exponential_definable : DefinableFunction₁ β„’β‚’α΅£ Ξ£ 0 (Exp.exp : M β†’ M) := defined_to_with_param _ exp_defined lemma exponential_of_exp {a b : M} (h : Exp a b) : exp a = b := Eq.symm <| exponential_graph.mpr h -lemma exponential_inj : Function.Injective (exponential : M β†’ M) := Ξ» a _ H ↦ +lemma exponential_inj : Function.Injective (Exp.exp : M β†’ M) := Ξ» a _ H ↦ (exp_exponential a).inj (exponential_graph.mp H) @[simp] lemma exp_zero : exp (0 : M) = 1 := exponential_of_exp (by simp) diff --git a/Arithmetization/IDeltaZero/Exponential/Log.lean b/Arithmetization/IDeltaZero/Exponential/Log.lean index 3a39edb..5ba281f 100644 --- a/Arithmetization/IDeltaZero/Exponential/Log.lean +++ b/Arithmetization/IDeltaZero/Exponential/Log.lean @@ -12,7 +12,7 @@ namespace Model section ISigmaβ‚€ -variable [πˆπš«β‚€.Mod M] +variable [M βŠ§β‚˜* πˆπš«β‚€] lemma log_exists_unique_pos {y : M} (hy : 0 < y) : βˆƒ! x, x < y ∧ βˆƒ y' ≀ y, Exp x y' ∧ y < 2 * y' := by have : βˆƒ x < y, βˆƒ y' ≀ y, Exp x y' ∧ y < 2 * y' := by @@ -70,7 +70,7 @@ lemma log_graph {x y : M} : x = log y ↔ (y = 0 β†’ x = 0) ∧ (0 < y β†’ x < y def logDef : Ξ”β‚€-Sentence 2 := βŸ¨β€œ(#1 = 0 β†’ #0 = 0) ∧ (0 < #1 β†’ #0 < #1 ∧ βˆƒ[#0 < #2 + 1] (!Exp.def [#1, #0] ∧ #2 < 2 * #0))”, by simp⟩ lemma log_defined : Ξ”β‚€-Function₁ (log : M β†’ M) via logDef := by - intro v; simp [logDef, log_graph, Exp.defined.pval, ←le_iff_lt_succ] + intro v; simp [logDef, log_graph, Exp.defined.pval, ←le_iff_lt_succ, numeral_eq_natCast] instance log_definable : DefinableFunction₁ β„’β‚’α΅£ Ξ£ 0 (log : M β†’ M) := defined_to_with_param _ log_defined @@ -408,7 +408,7 @@ lemma fbit_eq_zero_of_le {a i : M} (hi : β€–aβ€– ≀ i) : fbit a i = 0 := by sim def fbitDef : Ξ”β‚€-Sentence 3 := βŸ¨β€œβˆƒ[#0 < #2 + 1] (!bexpDef [#0, #2, #3] ∧ βˆƒ[#0 < #3 + 1] (!divDef [#0, #3, #1] ∧ !remDef [#2, #0, 2]))”, by simp⟩ lemma fbit_defined : Ξ”β‚€-Functionβ‚‚ (fbit : M β†’ M β†’ M) via fbitDef := by - intro v; simp [fbitDef, bexp_defined.pval, div_defined.pval, rem_defined.pval, ←le_iff_lt_succ, fbit] + intro v; simp [fbitDef, bexp_defined.pval, div_defined.pval, rem_defined.pval, ←le_iff_lt_succ, fbit, numeral_eq_natCast] constructor Β· intro h; exact ⟨bexp (v 1) (v 2), by simp, rfl, _, by simp, rfl, h⟩ Β· rintro ⟨_, _, rfl, _, _, rfl, h⟩; exact h @@ -437,7 +437,7 @@ end ISigmaβ‚€ section ISigma₁ -variable [πˆπšΊβ‚.Mod M] +variable [M βŠ§β‚˜* πˆπšΊβ‚] @[simp] lemma log_exponential (a : M) : log (exp a) = a := (exp_exponential a).log_eq_of_exp diff --git a/Arithmetization/IDeltaZero/Exponential/PPow2.lean b/Arithmetization/IDeltaZero/Exponential/PPow2.lean index 8d80ab7..d90dbcb 100644 --- a/Arithmetization/IDeltaZero/Exponential/PPow2.lean +++ b/Arithmetization/IDeltaZero/Exponential/PPow2.lean @@ -12,7 +12,7 @@ namespace Model section ISigmaβ‚€ -variable [πˆπš«β‚€.Mod M] +variable [M βŠ§β‚˜* πˆπš«β‚€] def SPPow2 (m : M) : Prop := Β¬LenBit 1 m ∧ LenBit 2 m ∧ βˆ€ i ≀ m, Pow2 i β†’ 2 < i β†’ (LenBit i m ↔ (√i)^2 = i ∧ LenBit (√i) m) @@ -23,7 +23,8 @@ def sppow2Def : Ξ”β‚€-Sentence 1 := lemma sppow2_defined : Ξ”β‚€-Predicate (SPPow2 : M β†’ Prop) via sppow2Def := by intro v - simp [SPPow2, sppow2Def, Matrix.vecHead, Matrix.vecTail, lenbit_defined.pval, pow2_defined.pval, sqrt_defined.pval, ←le_iff_lt_succ, sq] + simp [SPPow2, sppow2Def, Matrix.vecHead, Matrix.vecTail, lenbit_defined.pval, + pow2_defined.pval, sqrt_defined.pval, ←le_iff_lt_succ, sq, numeral_eq_natCast] intro _ _; apply ball_congr; intro x _; apply imp_congr_right; intro _; apply imp_congr_right; intro _; apply iff_congr Β· simp Β· constructor @@ -36,7 +37,8 @@ def ppow2Def : Ξ”β‚€-Sentence 1 := βŸ¨β€œ!pow2Def [#0] ∧ βˆƒ[#0 < 2 * #1] (!sppow2Def [#0] ∧ !lenbitDef [#1, #0])”, by simp⟩ lemma ppow2_defined : Ξ”β‚€-Predicate (PPow2 : M β†’ Prop) via ppow2Def := by - intro v; simp[PPow2, ppow2Def, Matrix.vecHead, Matrix.vecTail, lenbit_defined.pval, pow2_defined.pval, sppow2_defined.pval] + intro v; simp[PPow2, ppow2Def, Matrix.vecHead, Matrix.vecTail, + lenbit_defined.pval, pow2_defined.pval, sppow2_defined.pval, numeral_eq_natCast] instance ppow2_definable : DefinablePred β„’β‚’α΅£ Ξ£ 0 (PPow2 : M β†’ Prop) := defined_to_with_paramβ‚€ _ ppow2_defined diff --git a/Arithmetization/IDeltaZero/Exponential/Pow2.lean b/Arithmetization/IDeltaZero/Exponential/Pow2.lean index b723fff..65c6fd7 100644 --- a/Arithmetization/IDeltaZero/Exponential/Pow2.lean +++ b/Arithmetization/IDeltaZero/Exponential/Pow2.lean @@ -12,7 +12,7 @@ namespace Model section IOpen -variable [𝐈open.Mod M] +variable [M βŠ§β‚˜* 𝐈open] def Pow2 (a : M) : Prop := 0 < a ∧ βˆ€ r ≀ a, 1 < r β†’ r ∣ a β†’ 2 ∣ r @@ -22,7 +22,7 @@ def pow2Def : Ξ”β‚€-Sentence 1 := lemma pow2_defined : Ξ”β‚€-Predicate (Pow2 : M β†’ Prop) via pow2Def := by intro v simp [Semiformula.eval_substs, Matrix.comp_vecCons', Matrix.vecHead, Matrix.constant_eq_singleton, - Pow2, pow2Def, le_iff_lt_succ, dvd_defined.pval] + Pow2, pow2Def, le_iff_lt_succ, dvd_defined.pval, numeral_eq_natCast] instance pow2_definable : DefinablePred β„’β‚’α΅£ Ξ£ 0 (Pow2 : M β†’ Prop) := defined_to_with_param _ pow2_defined @@ -114,7 +114,8 @@ def lenbitDef : Ξ”β‚€-Sentence 2 := βŸ¨β€œβˆƒ[#0 < #2 + 1] (!divDef [#0, #2, #1] ∧ Β¬!dvdDef [2, #0])”, by simp⟩ lemma lenbit_defined : Ξ”β‚€-Relation (LenBit : M β†’ M β†’ Prop) via lenbitDef := by - intro v; simp[sqrt_graph, lenbitDef, Matrix.vecHead, Matrix.vecTail, div_defined.pval, dvd_defined.pval, LenBit, ←le_iff_lt_succ] + intro v; simp[sqrt_graph, lenbitDef, Matrix.vecHead, Matrix.vecTail, + div_defined.pval, dvd_defined.pval, LenBit, ←le_iff_lt_succ, numeral_eq_natCast] constructor Β· intro h; exact ⟨v 1 / v 0, by simp, rfl, h⟩ Β· rintro ⟨z, hz, rfl, h⟩; exact h @@ -193,7 +194,7 @@ end IOpen section ISigmaβ‚€ -variable [πˆπš«β‚€.Mod M] +variable [M βŠ§β‚˜* πˆπš«β‚€] namespace Pow2 diff --git a/Arithmetization/ISigmaOne/Bit.lean b/Arithmetization/ISigmaOne/Bit.lean index 0b19bac..a6ab457 100644 --- a/Arithmetization/ISigmaOne/Bit.lean +++ b/Arithmetization/ISigmaOne/Bit.lean @@ -13,7 +13,7 @@ namespace Model section ISigma₁ -variable [πˆπšΊβ‚.Mod M] +variable [M βŠ§β‚˜* πˆπšΊβ‚] def Bit (i a : M) : Prop := LenBit (exp i) a @@ -49,11 +49,11 @@ section variable {L : Language} [L.ORing] [Structure L M] [Structure.ORing L M] [Structure.Monotone L M] -variable (Ξ“ : Polarity) (Ξ½ : β„•) +variable (Ξ“ : Polarity) (n : β„•) @[definability] lemma Definable.ball_mem {P : (Fin k β†’ M) β†’ M β†’ Prop} {f : (Fin k β†’ M) β†’ M} - (hf : Semipolynomial L Ξ“ Ξ½ f) (h : Definable L Ξ“ Ξ½ (fun w ↦ P (w Β·.succ) (w 0))) : - Definable L Ξ“ Ξ½ (fun v ↦ βˆ€ x ∈ f v, P v x) := by + (hf : Semipolynomial L Ξ“ n f) (h : Definable L Ξ“ n (fun w ↦ P (w Β·.succ) (w 0))) : + Definable L Ξ“ n (fun v ↦ βˆ€ x ∈ f v, P v x) := by rcases hf.bounded with ⟨bf, hbf⟩ rcases hf.definable with ⟨f_graph, hf_graph⟩ rcases h with ⟨p, hp⟩ @@ -65,8 +65,8 @@ variable (Ξ“ : Polarity) (Ξ½ : β„•) Β· rintro ⟨_, _, rfl, h⟩ x hx; exact h x (lt_of_mem hx) hx⟩ @[definability] lemma Definable.bex_mem {P : (Fin k β†’ M) β†’ M β†’ Prop} {f : (Fin k β†’ M) β†’ M} - (hf : Semipolynomial L Ξ“ Ξ½ f) (h : Definable L Ξ“ Ξ½ (fun w ↦ P (w Β·.succ) (w 0))) : - Definable L Ξ“ Ξ½ (fun v ↦ βˆƒ x ∈ f v, P v x) := by + (hf : Semipolynomial L Ξ“ n f) (h : Definable L Ξ“ n (fun w ↦ P (w Β·.succ) (w 0))) : + Definable L Ξ“ n (fun v ↦ βˆƒ x ∈ f v, P v x) := by rcases hf.bounded with ⟨bf, hbf⟩ rcases hf.definable with ⟨f_graph, hf_graph⟩ rcases h with ⟨p, hp⟩ @@ -203,63 +203,63 @@ end ISigma₁ section -variable {Ξ½ : β„•} [Fact (1 ≀ Ξ½)] [(πˆππƒΞ£ Ξ½).Mod M] +variable {n : β„•} [Fact (1 ≀ n)] [M βŠ§β‚˜* πˆππƒΞ£ n] -theorem finset_comprehension {P : M β†’ Prop} (hP : Ξ“(Ξ½)-Predicate P) (n : M) : - haveI : πˆπšΊβ‚.Mod M := mod_iSigma_of_le (show 1 ≀ Ξ½ from Fact.out) - βˆƒ s < exp n, βˆ€ i < n, i ∈ s ↔ P i := by - haveI : πˆπšΊβ‚.Mod M := mod_iSigma_of_le (show 1 ≀ Ξ½ from Fact.out) - have : βˆƒ s < exp n, βˆ€ i < n, P i β†’ i ∈ s := - ⟨under n, pred_lt_self_of_pos (by simp), fun i hi _ ↦ by simpa [mem_under_iff] using hi⟩ +theorem finset_comprehension {P : M β†’ Prop} (hP : Ξ“(n)-Predicate P) (a : M) : + haveI : M βŠ§β‚˜* πˆπšΊβ‚ := mod_iSigma_of_le (show 1 ≀ n from Fact.out) + βˆƒ s < exp a, βˆ€ i < a, i ∈ s ↔ P i := by + haveI : M βŠ§β‚˜* πˆπšΊβ‚ := mod_iSigma_of_le (show 1 ≀ n from Fact.out) + have : βˆƒ s < exp a, βˆ€ i < a, P i β†’ i ∈ s := + ⟨under a, pred_lt_self_of_pos (by simp), fun i hi _ ↦ by simpa [mem_under_iff] using hi⟩ rcases this with ⟨s, hsn, hs⟩ - have : (Ξ“.alt)(Ξ½)-Predicate (fun s ↦ βˆ€ i < n, P i β†’ i ∈ s) := by + have : (Ξ“.alt)(n)-Predicate (fun s ↦ βˆ€ i < a, P i β†’ i ∈ s) := by apply Definable.ball_lt; simp; apply Definable.imp definability apply @Definable.of_sigma_zero M β„’β‚’α΅£ _ _ _ _ mem_definable - have : βˆƒ t, (βˆ€ i < n, P i β†’ i ∈ t) ∧ βˆ€ t' < t, βˆƒ x, P x ∧ x < n ∧ x βˆ‰ t' := by - simpa using least_number_h (L := β„’β‚’α΅£) Ξ“.alt Ξ½ this hs + have : βˆƒ t, (βˆ€ i < a, P i β†’ i ∈ t) ∧ βˆ€ t' < t, βˆƒ x, P x ∧ x < a ∧ x βˆ‰ t' := by + simpa using least_number_h (L := β„’β‚’α΅£) Ξ“.alt n this hs rcases this with ⟨t, ht, t_minimal⟩ have t_le_s : t ≀ s := not_lt.mp (by intro lt rcases t_minimal s lt with ⟨i, hi, hin, his⟩ exact his (hs i hin hi)) - have : βˆ€ i < n, i ∈ t β†’ P i := by + have : βˆ€ i < a, i ∈ t β†’ P i := by intro i _ hit by_contra Hi - have : βˆƒ j, P j ∧ j < n ∧ (j ∈ t β†’ j = i) := by + have : βˆƒ j, P j ∧ j < a ∧ (j ∈ t β†’ j = i) := by simpa [not_imp_not] using t_minimal (bitRemove i t) (bitRemove_lt_of_mem hit) rcases this with ⟨j, Hj, hjn, hm⟩ rcases hm (ht j hjn Hj); contradiction exact ⟨t, lt_of_le_of_lt t_le_s hsn, fun i hi ↦ ⟨this i hi, ht i hi⟩⟩ -theorem finset_comprehension_exists_unique {P : M β†’ Prop} (hP : Ξ“(Ξ½)-Predicate P) (n : M) : - haveI : πˆπšΊβ‚.Mod M := mod_iSigma_of_le (show 1 ≀ Ξ½ from Fact.out) - βˆƒ! s, s < exp n ∧ βˆ€ i < n, i ∈ s ↔ P i := by - haveI : πˆπšΊβ‚.Mod M := mod_iSigma_of_le (show 1 ≀ Ξ½ from Fact.out) - rcases finset_comprehension hP n with ⟨s, hs, Hs⟩ +theorem finset_comprehension_exists_unique {P : M β†’ Prop} (hP : Ξ“(n)-Predicate P) (a : M) : + haveI : M βŠ§β‚˜* πˆπšΊβ‚ := mod_iSigma_of_le (show 1 ≀ n from Fact.out) + βˆƒ! s, s < exp a ∧ βˆ€ i < a, i ∈ s ↔ P i := by + haveI : M βŠ§β‚˜* πˆπšΊβ‚ := mod_iSigma_of_le (show 1 ≀ n from Fact.out) + rcases finset_comprehension hP a with ⟨s, hs, Hs⟩ exact ExistsUnique.intro s ⟨hs, Hs⟩ (by intro t ⟨ht, Ht⟩ apply mem_ext intro i constructor Β· intro hi - have hin : i < n := exponential_monotone.mp (lt_of_le_of_lt (exp_le_of_mem hi) ht) + have hin : i < a := exponential_monotone.mp (lt_of_le_of_lt (exp_le_of_mem hi) ht) exact (Hs i hin).mpr ((Ht i hin).mp hi) Β· intro hi - have hin : i < n := exponential_monotone.mp (lt_of_le_of_lt (exp_le_of_mem hi) hs) + have hin : i < a := exponential_monotone.mp (lt_of_le_of_lt (exp_le_of_mem hi) hs) exact (Ht i hin).mpr ((Hs i hin).mp hi)) end section ISigma₁ -variable [πˆπšΊβ‚.Mod M] +variable [M βŠ§β‚˜* πˆπšΊβ‚] instance : Fact (1 ≀ 1) := ⟨by rfl⟩ -theorem finset_comprehension₁ {P : M β†’ Prop} (hP : Ξ“(1)-Predicate P) (n : M) : - βˆƒ s < exp n, βˆ€ i < n, i ∈ s ↔ P i := - finset_comprehension hP n +theorem finset_comprehension₁ {P : M β†’ Prop} (hP : Ξ“(1)-Predicate P) (a : M) : + βˆƒ s < exp a, βˆ€ i < a, i ∈ s ↔ P i := + finset_comprehension hP a /- lemma domain_exists_unique (s : M) : diff --git a/Arithmetization/OmegaOne/Basic.lean b/Arithmetization/OmegaOne/Basic.lean index 04fd061..af9392d 100644 --- a/Arithmetization/OmegaOne/Basic.lean +++ b/Arithmetization/OmegaOne/Basic.lean @@ -5,14 +5,14 @@ namespace LO.FirstOrder namespace Arith /-- βˆ€ x, βˆƒ y, 2^{|x|^2} = y-/ -def omegaSentence₁ : Sentence β„’β‚’α΅£ := β€œβˆ€ βˆƒ βˆƒ[#0 < #2 + 1] (!Model.lengthDef [#0, #2] ∧ !Model.Exp.def [#0*#0, #1])” +def omegaOneAxiom : Sentence β„’β‚’α΅£ := β€œβˆ€ βˆƒ βˆƒ[#0 < #2 + 1] (!Model.lengthDef [#0, #2] ∧ !Model.Exp.def [#0*#0, #1])” inductive Theory.omega₁ : Theory β„’β‚’α΅£ where - | omega : Theory.omega₁ omegaSentence₁ + | omega : Theory.omega₁ omegaOneAxiom notation "𝛀₁" => Theory.omega₁ -@[simp] lemma omega₁.mem_iff {Οƒ} : Οƒ ∈ 𝛀₁ ↔ Οƒ = omegaSentence₁ := +@[simp] lemma omega₁.mem_iff {Οƒ} : Οƒ ∈ 𝛀₁ ↔ Οƒ = omegaOneAxiom := ⟨by rintro ⟨⟩; rfl, by rintro rfl; exact Theory.omega₁.omega⟩ noncomputable section @@ -21,8 +21,8 @@ namespace Model variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] -lemma models_Omega₁_iff [πˆπš«β‚€.Mod M] : M βŠ§β‚˜ omegaSentence₁ ↔ βˆ€ x : M, βˆƒ y, Exp (β€–xβ€–^2) y := by - simp [models_def, omegaSentence₁, length_defined.pval, Exp.defined.pval, sq, ←le_iff_lt_succ] +lemma models_Omega₁_iff [M βŠ§β‚˜* πˆπš«β‚€] : M βŠ§β‚˜ omegaOneAxiom ↔ βˆ€ x : M, βˆƒ y, Exp (β€–xβ€–^2) y := by + simp [models_def, omegaOneAxiom, length_defined.pval, Exp.defined.pval, sq, ←le_iff_lt_succ] constructor Β· intro h x rcases h x with ⟨y, _, _, rfl, h⟩; exact ⟨y, h⟩ @@ -30,14 +30,14 @@ lemma models_Omega₁_iff [πˆπš«β‚€.Mod M] : M βŠ§β‚˜ omegaSentence₁ ↔ rcases h x with ⟨y, h⟩ exact ⟨y, β€–xβ€–, by simp, rfl, h⟩ -lemma sigma₁_omega₁ [πˆπšΊβ‚.Mod M] : M βŠ§β‚˜ omegaSentence₁ := models_Omega₁_iff.mpr (fun x ↦ Exp.range_exists (β€–xβ€–^2)) +lemma sigma₁_omega₁ [M βŠ§β‚˜* πˆπšΊβ‚] : M βŠ§β‚˜ omegaOneAxiom := models_Omega₁_iff.mpr (fun x ↦ Exp.range_exists (β€–xβ€–^2)) -instance [πˆπšΊβ‚.Mod M] : 𝛀₁.Mod M := ⟨by intro _; simp; rintro rfl; exact sigma₁_omegaβ‚βŸ© +instance [M βŠ§β‚˜* πˆπšΊβ‚] : M βŠ§β‚˜* 𝛀₁ := ⟨by intro _; simp; rintro rfl; exact sigma₁_omegaβ‚βŸ© -variable [πˆπš«β‚€.Mod M] [𝛀₁.Mod M] +variable [M βŠ§β‚˜* πˆπš«β‚€] [M βŠ§β‚˜* 𝛀₁] lemma exists_exp_sq_length (x : M) : βˆƒ y, Exp (β€–xβ€–^2) y := - models_Omega₁_iff.mp (Theory.Mod.models M Theory.omega₁.omega) x + models_Omega₁_iff.mp (ModelsTheory.models M Theory.omega₁.omega) x lemma exists_unique_exp_sq_length (x : M) : βˆƒ! y, Exp (β€–xβ€–^2) y := by rcases exists_exp_sq_length x with ⟨y, h⟩ @@ -120,7 +120,6 @@ lemma hash_two_mul_le_sq_hash (a b : M) : a # (2 * b) ≀ (a # b) ^ 2 := by Β· simp [hash_two_mul a pos, sq] exact hash_monotone (by rfl) (pos_iff_one_le.mp pos) - end Model end diff --git a/Arithmetization/OmegaOne/Nuon.lean b/Arithmetization/OmegaOne/Nuon.lean index fe9b925..0ad2322 100644 --- a/Arithmetization/OmegaOne/Nuon.lean +++ b/Arithmetization/OmegaOne/Nuon.lean @@ -8,7 +8,7 @@ noncomputable section namespace Model -variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [πˆπšΊβ‚€.Mod M] [𝛀₁.Mod M] +variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* πˆπšΊβ‚€] [M βŠ§β‚˜* 𝛀₁] namespace Nuon @@ -80,7 +80,7 @@ def extDef : Ξ”β‚€-Sentence 4 := @[simp] lemma cons_app_nine {n : β„•} (a : Ξ±) (s : Fin n.succ.succ.succ.succ.succ.succ.succ.succ.succ β†’ Ξ±) : (a :> s) 9 = s 8 := rfl lemma ext_defined : Ξ”β‚€-Function₃ (ext : M β†’ M β†’ M β†’ M) via extDef := by - intro v; simp [extDef, length_defined.pval, Exp.defined.pval, div_defined.pval, rem_defined.pval, lt_succ_iff_le, ext_graph] + intro v; simp [extDef, length_defined.pval, Exp.defined.pval, div_defined.pval, rem_defined.pval, lt_succ_iff_le, ext_graph, numeral_eq_natCast] instance ext_Definable : DefinableFunction₃ β„’β‚’α΅£ Ξ£ 0 (ext : M β†’ M β†’ M β†’ M) := defined_to_with_paramβ‚€ _ ext_defined @@ -493,7 +493,7 @@ def isSegmentDef : Ξ”β‚€-Sentence 5 := #2 = #1 + #0)))”, by simp⟩ lemma isSegmentDef_defined : Defined (M := M) (Ξ» v ↦ IsSegment (v 0) (v 1) (v 2) (v 3) (v 4)) isSegmentDef.val := by - intro v; simp [IsSegment, isSegmentDef, ext_defined.pval, fbit_defined.pval, lt_succ_iff_le] + intro v; simp [IsSegment, isSegmentDef, ext_defined.pval, fbit_defined.pval, lt_succ_iff_le, numeral_eq_natCast] apply ball_congr; intro x _ constructor Β· intro h; exact ⟨_, by simp, rfl, _, by simp, rfl, _, by simp, rfl, h⟩ @@ -562,7 +562,7 @@ def nuonAuxDef : Ξ”β‚€-Sentence 3 := lemma nuonAux_defined : Ξ”β‚€-Relation₃ (NuonAux : M β†’ M β†’ M β†’ Prop) via nuonAuxDef := by intro v; simp [NuonAux, polyU, polyI, polyL, nuonAuxDef, - length_defined.pval, sqrt_defined.pval, bexp_defined.pval, seriesSegmentDef_defined.pval, lt_succ_iff_le] + length_defined.pval, sqrt_defined.pval, bexp_defined.pval, seriesSegmentDef_defined.pval, lt_succ_iff_le, numeral_eq_natCast] rw [bex_eq_le_iff, bex_eq_le_iff, bex_eq_le_iff, bex_eq_le_iff]; simp instance nuonAux_definable : DefinableRel₃ β„’β‚’α΅£ Ξ£ 0 (NuonAux : M β†’ M β†’ M β†’ Prop) := defined_to_with_param _ nuonAux_defined diff --git a/Arithmetization/Vorspiel/Lemmata.lean b/Arithmetization/Vorspiel/Lemmata.lean index 07f8437..55c3f49 100644 --- a/Arithmetization/Vorspiel/Lemmata.lean +++ b/Arithmetization/Vorspiel/Lemmata.lean @@ -76,7 +76,7 @@ namespace Arith noncomputable section -variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [𝐏𝐀⁻.Mod M] +variable {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* 𝐏𝐀⁻] namespace Model diff --git a/Arithmetization/Vorspiel/Vorspiel.lean b/Arithmetization/Vorspiel/Vorspiel.lean index f0826d3..5af9d23 100644 --- a/Arithmetization/Vorspiel/Vorspiel.lean +++ b/Arithmetization/Vorspiel/Vorspiel.lean @@ -3,6 +3,8 @@ import Logic.FirstOrder.Arith.EA.Basic instance [Zero Ξ±] : Nonempty Ξ± := ⟨0⟩ +notation "exp " x:90 => Exp.exp x + namespace Matrix lemma forall_iff {n : β„•} (p : (Fin (n + 1) β†’ Ξ±) β†’ Prop) : @@ -99,8 +101,8 @@ variable [𝓑 : System F] {Ξ± : Type*} [𝓒 : Semantics F Ξ±] [Complete F] lemma provableTheory_iff : T ⊒*! U ↔ (βˆ€ s, s ⊧* T β†’ s ⊧* U) := by simp [System.provableTheory_iff, ←consequence_iff_provable] constructor - Β· intro h s hs f hf; exact h f hf hs - Β· intro h f hf s hs; exact h s hs hf + Β· intro h s hs; exact ⟨fun f hf ↦ h f hf hs⟩ + Β· intro h f hf s hs; exact (h s hs).realize hf end Complete @@ -108,50 +110,6 @@ end namespace FirstOrder -namespace Semiterm - -@[simp] lemma bshift_positive (t : Semiterm L ΞΎ n) : Positive (Rew.bShift t) := by - induction t <;> simp - -lemma bv_eq_empty_of_positive {t : Semiterm L ΞΎ 1} (ht : t.Positive) : t.bv = βˆ… := - Finset.eq_empty_of_forall_not_mem <| by simp [Positive, Fin.eq_zero] at ht ⊒; assumption - -variable {M : Type*} {s : Structure L M} - -@[simp] lemma val_toS {e : Fin n β†’ M} (t : Semiterm L (Fin n) 0) : - bVal s e (Rew.toS t) = val s ![] e t := by - simp[val_rew, Matrix.empty_eq]; congr - -@[simp] lemma val_toF {e : Fin n β†’ M} (t : Semiterm L Empty n) : - val s ![] e (Rew.toF t) = bVal s e t := by - simp[val_rew, Matrix.empty_eq]; congr - funext i; simp; contradiction - -end Semiterm - -namespace Rew - -lemma substs_bv (t : Semiterm L ΞΎ n) (v : Fin n β†’ Semiterm L ΞΎ m) : - (Rew.substs v t).bv = t.bv.biUnion (fun i ↦ (v i).bv) := by - induction t <;> simp [Rew.func, Semiterm.bv_func, Finset.biUnion_biUnion, *] - -@[simp] lemma substs_positive (t : Semiterm L ΞΎ n) (v : Fin n β†’ Semiterm L ΞΎ (m + 1)) : - (Rew.substs v t).Positive ↔ βˆ€ i ∈ t.bv, (v i).Positive := by - simp [Semiterm.Positive, substs_bv] - exact ⟨fun H i hi x hx ↦ H x i hi hx, fun H x i hi hx ↦ H i hi x hx⟩ - -lemma embSubsts_bv (t : Semiterm L Empty n) (v : Fin n β†’ Semiterm L ΞΎ m) : - (Rew.embSubsts v t).bv = t.bv.biUnion (fun i ↦ (v i).bv) := by - induction t <;> simp [Rew.func, Semiterm.bv_func, Finset.biUnion_biUnion, *] - Β· contradiction - -@[simp] lemma embSubsts_positive (t : Semiterm L Empty n) (v : Fin n β†’ Semiterm L ΞΎ (m + 1)) : - (Rew.embSubsts v t).Positive ↔ βˆ€ i ∈ t.bv, (v i).Positive := by - simp [Semiterm.Positive, embSubsts_bv] - exact ⟨fun H i hi x hx ↦ H x i hi hx, fun H x i hi hx ↦ H i hi x hx⟩ - -end Rew - namespace Arith attribute [simp] Semiformula.eval_substs Semiformula.eval_embSubsts @@ -195,34 +153,16 @@ instance : ToString (Semiformula β„’β‚’α΅£ ΞΌ n) := ⟨formulaToStr⟩ end ToString -namespace Hierarchy - -variable {L : Language} [L.LT] - -lemma of_zero {b b'} {s : β„•} {p : Semiformula L ΞΌ n} (hp : Hierarchy b 0 p) : Hierarchy b' s p := by - rcases Nat.eq_or_lt_of_le (Nat.zero_le s) with (rfl | pos) - Β· exact zero_iff.mp hp - Β· exact strict_mono hp b' pos - -lemma iff_iff {p q : Semiformula L ΞΌ n} : - Hierarchy b s (p ⟷ q) ↔ (Hierarchy b s p ∧ Hierarchy b.alt s p ∧ Hierarchy b s q ∧ Hierarchy b.alt s q) := by - simp[Semiformula.iff_eq]; tauto - -@[simp] lemma iff_iffβ‚€ {p q : Semiformula L ΞΌ n} : - Hierarchy b 0 (p ⟷ q) ↔ (Hierarchy b 0 p ∧ Hierarchy b 0 q) := by - simp[Semiformula.iff_eq]; tauto - -end Hierarchy - section model variable {T : Theory β„’β‚’α΅£} [𝐄πͺ β‰Ύ T] -variable (M : Type) [Zero M] [One M] [Add M] [Mul M] [LT M] [T.Mod M] +variable (M : Type) [Zero M] [One M] [Add M] [Mul M] [LT M] [M βŠ§β‚˜* T] lemma oring_sound {Οƒ : Sentence β„’β‚’α΅£} (h : T ⊒! Οƒ) : M βŠ§β‚˜ Οƒ := consequence_iff'.mp (LO.Sound.sound! h) M -instance (Ξ“ s) [(πˆππƒΞ“ s).Mod M] : (Theory.indScheme β„’β‚’α΅£ (Arith.Hierarchy Ξ“ s)).Mod M := mod_indScheme_of_mod_indH (Ξ“ := Ξ“) (Ξ½ := s) +instance (Ξ“ n) [M βŠ§β‚˜* πˆππƒΞ“ n] : + M βŠ§β‚˜* Theory.indScheme β„’β‚’α΅£ (Arith.Hierarchy Ξ“ n) := models_indScheme_of_models_indH Ξ“ n end model @@ -296,24 +236,6 @@ lemma bexClosure_iff {b s n} {p : Semiformula L ΞΎ n} {v : Fin n β†’ Semiterm L refine Iff.trans (IH (p := β€œβˆƒ[#0 < !!([β†’ #0] (v 0))] !p”) (v := (v Β·.succ)) (by intro; simp [hv])) ?_ rw [bex_iff]; simp [Semiterm.bv_eq_empty_of_positive (hv 0)] -@[simp] lemma matrix_conj_iff {b s n} {p : Fin m β†’ Semiformula L ΞΎ n} : - Hierarchy b s (Matrix.conj fun j ↦ p j) ↔ βˆ€ j, Hierarchy b s (p j) := by - cases m <;> simp - -lemma remove_forall {p : Semiformula L ΞΎ (n + 1)} : Hierarchy b s (βˆ€' p) β†’ Hierarchy b s p := by - intro h; rcases h - case ball => simpa - case all => assumption - case pi h => exact h.accum _ - case dummy_sigma h => exact h.accum _ - -lemma remove_exists {p : Semiformula L ΞΎ (n + 1)} : Hierarchy b s (βˆƒ' p) β†’ Hierarchy b s p := by - intro h; rcases h - case bex => simpa - case ex => assumption - case sigma h => exact h.accum _ - case dummy_pi h => exact h.accum _ - end Arith.Hierarchy end diff --git a/README.md b/README.md index bb2702b..2aacfcd 100644 --- a/README.md +++ b/README.md @@ -38,11 +38,11 @@ https://iehality.github.io/Arithmetization/ - [Order induction](https://iehality.github.io/Arithmetization/Arithmetization/Basic/Ind.html#LO.FirstOrder.Arith.Model.order_induction_h) ```lean theorem LO.FirstOrder.Arith.Model.induction_h - {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.Theory.Mod M 𝐏𝐀⁻] + {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.ModelsTheory M 𝐏𝐀⁻] {L : LO.FirstOrder.Language} [LO.FirstOrder.Language.ORing L] [LO.FirstOrder.Structure L M] [LO.FirstOrder.Structure.ORing L M] (Ξ“ : LO.Polarity) (s : β„•) - [LO.FirstOrder.Theory.Mod M (LO.FirstOrder.Arith.Theory.indScheme L (LO.FirstOrder.Arith.Hierarchy Ξ“ s))] + [LO.FirstOrder.ModelsTheory M (LO.FirstOrder.Arith.Theory.indScheme L (LO.FirstOrder.Arith.Hierarchy Ξ“ s))] {P : M β†’ Prop} (hP : LO.FirstOrder.Arith.Model.DefinablePred L Ξ“ s P) (ind : βˆ€ (x : M), (βˆ€ y < x, P y) β†’ P x) (x : M) : P x @@ -51,12 +51,12 @@ https://iehality.github.io/Arithmetization/ - [Least number principle](https://iehality.github.io/Arithmetization/Arithmetization/Basic/Ind.html#LO.FirstOrder.Arith.Model.least_number_h) ```lean theorem LO.FirstOrder.Arith.Model.least_number_h - {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.Theory.Mod M 𝐏𝐀⁻] + {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.ModelsTheory M 𝐏𝐀⁻] {L : LO.FirstOrder.Language} [LO.FirstOrder.Language.ORing L] [LO.FirstOrder.Structure L M] [LO.FirstOrder.Structure.ORing L M] [LO.FirstOrder.Structure.Monotone L M] (Ξ“ : LO.Polarity) (s : β„•) - [LO.FirstOrder.Theory.Mod M (LO.FirstOrder.Arith.Theory.indScheme L (LO.FirstOrder.Arith.Hierarchy Ξ“ s))] + [LO.FirstOrder.ModelsTheory M (LO.FirstOrder.Arith.Theory.indScheme L (LO.FirstOrder.Arith.Hierarchy Ξ“ s))] {P : M β†’ Prop} (hP : LO.FirstOrder.Arith.Model.DefinablePred L Ξ“ s P) {x : M} (h : P x) : βˆƒ (y : M), P y ∧ βˆ€ z < y, Β¬P z @@ -73,7 +73,7 @@ https://iehality.github.io/Arithmetization/ - [LO.FirstOrder.Arith.Model.Exp.defined](https://iehality.github.io/Arithmetization/Arithmetization/IDeltaZero/Exponential/Exp.html#LO.FirstOrder.Arith.Model.Exp.defined) ```lean theorem LO.FirstOrder.Arith.Model.Exp.defined - {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.Theory.Mod M πˆπš«β‚€] : + {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] [LO.FirstOrder.ModelsTheory M πˆπš«β‚€] : Ξ”β‚€-Relation LO.FirstOrder.Arith.Model.Exp via LO.FirstOrder.Arith.Model.Exp.def ``` @@ -83,6 +83,6 @@ https://iehality.github.io/Arithmetization/ ```lean theorem LO.FirstOrder.Arith.Model.nuon_defined {M : Type} [Zero M] [One M] [Add M] [Mul M] [LT M] - [LO.FirstOrder.Theory.Mod M πˆπš«β‚€] [LO.FirstOrder.Theory.Mod M 𝛀₁] : + [LO.FirstOrder.ModelsTheory M πˆπš«β‚€] [LO.FirstOrder.ModelsTheory M 𝛀₁] : Ξ”β‚€-Function₁ LO.FirstOrder.Arith.Model.nuon via LO.FirstOrder.Arith.Model.nuonDef ``` diff --git a/lake-manifest.json b/lake-manifest.json index 10420e4..af69fb8 100644 --- a/lake-manifest.json +++ b/lake-manifest.json @@ -103,7 +103,7 @@ {"url": "https://github.com/iehality/lean4-logic", "type": "git", "subDir": null, - "rev": "f541a5ecc63ad81771043542f1fadf6d505b7241", + "rev": "4a0fca57e396112c141055d61e181a96bc6f7c0a", "name": "logic", "manifestFile": "lake-manifest.json", "inputRev": null,