{-# OPTIONS --allow-unsolved-metas #-} import Level open import Ordinals module generic-filter {n : Level.Level } (O : Ordinals {n}) where import filter open import zf open import logic -- open import partfunc {n} O import OD open import Relation.Nullary open import Relation.Binary open import Data.Empty open import Relation.Binary open import Relation.Binary.Core open import Relation.Binary.PropositionalEquality open import Data.Nat import BAlgebra open BAlgebra O open inOrdinal O open OD O open OD.OD open ODAxiom odAxiom import OrdUtil import ODUtil open Ordinals.Ordinals O open Ordinals.IsOrdinals isOrdinal open Ordinals.IsNext isNext open OrdUtil O open ODUtil O import ODC open filter O open _∧_ open _∨_ open Bool open HOD ------- -- the set of finite partial functions from ω to 2 -- -- open import Data.List hiding (filter) open import Data.Maybe open import ZProduct O record CountableModel : Set (Level.suc (Level.suc n)) where field ctl-M : HOD ctl→ : ℕ → Ordinal ctl ¬a ¬b c = ⊥-elim ( nat-≤> n≤m c ) record Dense {L P : HOD } (LP : L ⊆ Power P) : Set (Level.suc n) where field dense : HOD d⊆P : dense ⊆ L dense-f : {p : HOD} → L ∋ p → HOD dense-d : { p : HOD} → (lt : L ∋ p) → dense ∋ dense-f lt dense-p : { p : HOD} → (lt : L ∋ p) → p ⊆ dense-f lt record GenericFilter {L P : HOD} (LP : L ⊆ Power P) (M : HOD) : Set (Level.suc n) where field genf : Filter {L} {P} LP generic : (D : Dense {L} {P} LP ) → M ∋ Dense.dense D → ¬ ( (Dense.dense D ∩ Replace (Filter.filter genf) (λ x → P \ x )) ≡ od∅ ) rgen : HOD rgen = Replace (Filter.filter genf) (λ x → P \ x ) P-GenericFilter : (P L p0 : HOD ) → (LP : L ⊆ Power P) → L ∋ p0 → (CAP : {p q : HOD} → L ∋ p → L ∋ q → L ∋ (p ∩ q )) -- L is a Boolean Algebra → (UNI : {p q : HOD} → L ∋ p → L ∋ q → L ∋ (p ∪ q )) → (NEG : ({p : HOD} → L ∋ p → L ∋ ( P \ p))) → (C : CountableModel ) → GenericFilter {L} {P} LP ( ctl-M C ) P-GenericFilter P L p0 L⊆PP Lp0 CAP UNI NEG C = record { genf = record { filter = Replace (PDHOD L p0 C) (λ x → P \ x) ; f⊆L = gf01 ; filter1 = f1 ; filter2 = f2 } ; generic = λ D cd → subst (λ k → ¬ (Dense.dense D ∩ k) ≡ od∅ ) (sym gf00) (fdense D cd ) } where GP = Replace (PDHOD L p0 C) (λ x → P \ x) f⊆PL : PDHOD L p0 C ⊆ L f⊆PL lt = x∈PP lt gf01 : Replace (PDHOD L p0 C) (λ x → P \ x) ⊆ L gf01 {x} record { z = z ; az = az ; x=ψz = x=ψz } = subst (λ k → odef L k) (sym x=ψz) ( NEG (subst (λ k → odef L k) (sym &iso) (f⊆PL az)) ) gf141 : {xp xq : Ordinal } → (Pp : PDN L p0 C xp) (Pq : PDN L p0 C xq) → (* xp ∪ * xq) ⊆ P gf141 Pp Pq {x} (case1 xpx) = L⊆PP (PDN.x∈PP Pp) _ xpx gf141 Pp Pq {x} (case2 xqx) = L⊆PP (PDN.x∈PP Pq) _ xqx gf121 : {p q : HOD} (gp : GP ∋ p) (gq : GP ∋ q) → p ∩ q ≡ P \ * (& (* (Replaced.z gp) ∪ * (Replaced.z gq))) gf121 {p} {q} gp gq = begin p ∩ q ≡⟨ cong₂ (λ j k → j ∩ k ) (sym *iso) (sym *iso) ⟩ (* (& p)) ∩ (* (& q)) ≡⟨ cong₂ (λ j k → ( * j ) ∩ ( * k)) (Replaced.x=ψz gp) (Replaced.x=ψz gq) ⟩ * (& (P \ (* xp ))) ∩ (* (& (P \ (* xq )))) ≡⟨ cong₂ (λ j k → j ∩ k ) *iso *iso ⟩ (P \ (* xp )) ∩ (P \ (* xq )) ≡⟨ gf02 {P} {* xp} {* xq} ⟩ P \ ((* xp) ∪ (* xq)) ≡⟨ cong (λ k → P \ k) (sym *iso) ⟩ P \ * (& (* xp ∪ * xq)) ∎ where open ≡-Reasoning xp = Replaced.z gp xq = Replaced.z gq gf131 : {p q : HOD} (gp : GP ∋ p) (gq : GP ∋ q) → P \ (p ∩ q) ≡ * (Replaced.z gp) ∪ * (Replaced.z gq) gf131 {p} {q} gp gq = trans (cong (λ k → P \ k) (gf121 gp gq)) (trans ( L\Lx=x (subst (λ k → k ⊆ P) (sym *iso) (gf141 (Replaced.az gp) (Replaced.az gq))) ) *iso ) f1 : {p q : HOD} → L ∋ q → Replace (PDHOD L p0 C) (λ x → P \ x) ∋ p → p ⊆ q → Replace (PDHOD L p0 C) (λ x → P \ x) ∋ q f1 {p} {q} L∋q record { z = z ; az = az ; x=ψz = x=ψz } p⊆q = record { z = _ ; az = record { gr = gr az ; pn ¬a ¬b c = record { z = & ( (* xp) ∪ (* xq) ) ; az = gf10 ; x=ψz = cong (&) (gf121 gp gq ) } where gp = record { z = xp ; az = Pp ; x=ψz = peq } gq = record { z = xq ; az = Pq ; x=ψz = qeq } gf10 : odef (PDHOD L p0 C) (& (* xp ∪ * xq)) gf10 = record { gr = PDN.gr Pp ; pn } -- record valR (x : HOD) {P L : HOD} {LP : L ⊆ Power P} (C : CountableModel ) (G : GenericFilter {L} {P} LP (ctl-M C) ) : Set (Level.suc n) where field valx : HOD record valS (ox oy oG : Ordinal) : Set n where field op : Ordinal p∈G : odef (* oG) op is-val : odef (* ox) ( & < * oy , * op > ) val : (x : HOD) {P L : HOD } {LP : L ⊆ Power P} → (G : GenericFilter {L} {P} LP {!!} ) → HOD val x G = TransFinite {λ x → HOD } ind (& x) where ind : (x : Ordinal) → ((y : Ordinal) → y o< x → HOD) → HOD ind x valy = record { od = record { def = λ y → valS x y (& (filter (genf G))) } ; odmax = {!!} ;