From b6caa730aab4c6b9f77e3d4246a16ad0da2f7a8c Mon Sep 17 00:00:00 2001 From: Max New <maxsnew@gmail.com> Date: Sat, 5 May 2018 22:47:14 +0200 Subject: [PATCH] [agda] rewrite with some agdaisms, think it will work now --- code/gcbpv.agda | 167 +++++++++++++----------------------------------- 1 file changed, 46 insertions(+), 121 deletions(-) diff --git a/code/gcbpv.agda b/code/gcbpv.agda index e91b6e6..8acab2c 100644 --- a/code/gcbpv.agda +++ b/code/gcbpv.agda @@ -13,7 +13,7 @@ open ≡-Reasoning lookup-map : ∀ {a b n} {A : Set a} {B : Set b} (i : Fin n) (f : A → B) (xs : Vec A n) → - lookup i (Data.Vec.map f xs) ≡ f (lookup i xs) + lookup i (map f xs) ≡ f (lookup i xs) lookup-map zero f (x ∷ xs) = refl lookup-map (suc i) f (x ∷ xs) = lookup-map i f xs @@ -49,12 +49,13 @@ DCtx = StCtx ⊤ onevar : StCtx ⊤ onevar = hstoup tt -infix 90 _⟨_⟩v -infix 90 _⟨_⟩c +infixl 90 _⟨_⟩v +infixl 90 _⟨_⟩vsq +infixl 90 _⟨_⟩c -record VTC : Set data VType : DCtx -> Set _⟨_⟩v : VType onevar -> Dimension -> VType (cdot _) +record VTC : Set data CType : DCtx -> Set _⟨_⟩c : CType onevar -> Dimension -> CType (cdot _) @@ -67,6 +68,7 @@ record VTC where A⊥ : VType onevar eq : A⊤ ⟨ Bot ⟩v ≡ A⊥ ⟨ Top ⟩v + data VType where VUnit : forall I -> VType I _×_ : forall {I} -> VType I -> VType I -> VType I @@ -76,8 +78,8 @@ data VType where VUnit _ ⟨ i ⟩v = VUnit _ (A × A') ⟨ i ⟩v = (A ⟨ i ⟩v) × (A' ⟨ i ⟩v) U B ⟨ i ⟩v = U (B ⟨ i ⟩c) -vtrans comp ⟨ Top ⟩v = VTC.A⊤ comp ⟨ Top ⟩v -vtrans comp ⟨ Bot ⟩v = VTC.A⊥ comp ⟨ Bot ⟩v +vtrans Vsq ⟨ Top ⟩v = VTC.A⊤ Vsq ⟨ Top ⟩v -- morally this: Vsq ⟨ Top ⟩vsq ⟨ Top ⟩v +vtrans Vsq ⟨ Bot ⟩v = VTC.A⊥ Vsq ⟨ Bot ⟩v -- morally this: Vsq ⟨ Bot ⟩vsq ⟨ Bot ⟩v -- vtrans Atop Abot p ⟨ Top ⟩v = Atop ⟨ Top ⟩v -- vtrans Atop Abot p ⟨ Bot ⟩v = Abot ⟨ Bot ⟩v @@ -93,6 +95,10 @@ F A ⟨ i ⟩c = F (A ⟨ i ⟩v) ctrans Btop Bbot p ⟨ Top ⟩c = Btop ⟨ Top ⟩c ctrans Btop Bbot p ⟨ Bot ⟩c = Bbot ⟨ Bot ⟩c +_⟨_⟩vsq : VTC -> Dimension -> VType onevar +Vsq ⟨ Top ⟩vsq = VTC.A⊤ Vsq +Vsq ⟨ Bot ⟩vsq = VTC.A⊥ Vsq + vrefl : VType (cdot _) -> VType onevar crefl : CType (cdot _) -> CType onevar vrefl (VUnit _) = VUnit _ @@ -119,14 +125,14 @@ data CLt (B B' : CType (cdot _)) : Set where lt : forall (Bord : CType onevar) -> Bord ⟨ Top ⟩c ≡ B -> Bord ⟨ Bot ⟩c ≡ B' -> CLt B B' -- | Some sanity checking -vltrefl : forall A -> VLt A A -vltrefl A = lt (vrefl A) (vreflretract A Top) ((vreflretract A Bot)) +-- vltrefl : forall A -> VLt A A +-- vltrefl A = lt (vrefl A) (vreflretract A Top) ((vreflretract A Bot)) -- vlttrans : forall A1 A2 A3 -> VLt A1 A2 -> VLt A2 A3 -> VLt A1 A3 -- vlttrans A1 A2 A3 (lt A12 x xâ‚) (lt A23 xâ‚‚ x₃) = lt (vtrans A12 A23 (trans xâ‚ (sym xâ‚‚))) x x₃ -cltrefl : forall B -> CLt B B -cltrefl B = lt (crefl B) (creflretract B Top) ((creflretract B Bot)) +-- cltrefl : forall B -> CLt B B +-- cltrefl B = lt (crefl B) (creflretract B Top) ((creflretract B Bot)) clttrans : forall B1 B2 B3 -> CLt B1 B2 -> CLt B2 B3 -> CLt B1 B3 clttrans B1 B2 B3 (lt B12 x xâ‚) (lt B23 xâ‚‚ x₃) = lt (ctrans B12 B23 (trans xâ‚ (sym xâ‚‚))) x x₃ @@ -148,44 +154,44 @@ open VCtx infixl 20 _,,_ _,,_ : forall {I} -> VCtx I -> VType I -> VCtx I -Γ ,, A = record { Vars = suc (VCtx.Vars Γ) ; vty = A ∷ VCtx.vty Γ } +Vars (Γ ,, A) = suc (Vars Γ) +vty (Γ ,, A) = A ∷ vty Γ -infix 90 _⟪_⟫v -infix 90 _⟪_⟫c +infixl 90 _⟪_⟫v +infixl 90 _⟪_⟫vsq +infixl 90 _⟪_⟫c _⟪_⟫v : VCtx onevar -> Dimension -> VCtx (cdot _) -Γ ⟪ i ⟫v = record { Vars = VCtx.Vars Γ ; vty = Data.Vec.map (\A -> A ⟨ i ⟩v) (VCtx.vty Γ) } +Vars (Γ ⟪ i ⟫v) = Vars Γ +vty (Γ ⟪ i ⟫v) = map (\A -> A ⟨ i ⟩v) (vty Γ) -- ctx-app-lem : ∀ Γ i -> Γ ⟪ i ⟫v vctxrefl : VCtx (cdot _) -> VCtx onevar -vctxrefl Γ = record { Vars = VCtx.Vars Γ ; vty = Data.Vec.map vrefl (VCtx.vty Γ) } +Vars (vctxrefl Γ) = Vars Γ +vty (vctxrefl Γ) = map vrefl (vty Γ) record VCtxTC : Set where field Vars : â„• vty : Vec VTC Vars +open VCtxTC -Γ⊤ : VCtxTC -> VCtx onevar -Γ⊤ Γsq = vctx (VCtxTC.Vars Γsq) (map VTC.A⊤ (VCtxTC.vty Γsq)) - -Γ⊥ : VCtxTC -> VCtx onevar -Γ⊥ Γsq = vctx (VCtxTC.Vars Γsq) (map VTC.A⊥ (VCtxTC.vty Γsq)) +_⟪_⟫vsq : VCtxTC -> Dimension -> VCtx onevar +Vars (Γsq ⟪ i ⟫vsq) = Vars Γsq +vty (Γsq ⟪ i ⟫vsq) = (map (λ Vsq → Vsq ⟨ i ⟩vsq) (vty Γsq)) vctxtrans : VCtxTC -> VCtx onevar -vctxtrans Γsq = vctx (VCtxTC.Vars Γsq) (map vtrans (VCtxTC.vty Γsq)) - -lem' : ∀ Asq -> vtrans Asq ⟨ Top ⟩v ≡ VTC.A⊤ Asq ⟨ Top ⟩v -lem' Asq = refl +vctxtrans Γsq = vctx (Vars Γsq) (map vtrans (vty Γsq)) -lem : ∀ Γsq -> (vctxtrans Γsq ⟪ Top ⟫v) ≡ ((Γ⊤ Γsq) ⟪ Top ⟫v) -lem Γsq = +ctxttrans-dapp-lem : ∀ Γsq i -> vctxtrans Γsq ⟪ i ⟫v ≡ Γsq ⟪ i ⟫vsq ⟪ i ⟫v +ctxttrans-dapp-lem Γsq i = begin - vctxtrans Γsq ⟪ Top ⟫v + vctxtrans Γsq ⟪ i ⟫v ≡⟨ {!!} ⟩ - vctxtrans Γsq ⟪ Top ⟫v + vctxtrans Γsq ⟪ i ⟫v ≡⟨ {!!} ⟩ - Γ⊤ Γsq ⟪ Top ⟫v + Γsq ⟪ i ⟫vsq ⟪ i ⟫v ∎ CCtx : DCtx -> Set @@ -216,11 +222,11 @@ record ValTC where field ΓΓ : VCtxTC AA : VTC - V⊤ : Value (Γ⊤ ΓΓ) (VTC.A⊤ AA) - V⊥ : Value (Γ⊥ ΓΓ) (VTC.A⊥ AA) + V⊤ : Value (ΓΓ ⟪ Top ⟫vsq) (AA ⟨ Top ⟩vsq) + V⊥ : Value (ΓΓ ⟪ Bot ⟫vsq) (AA ⟨ Bot ⟩vsq) data Value where - var : forall {I} (Γ : VCtx I) (x : Fin (VCtx.Vars Γ)) A -> A ≡ lookup x (VCtx.vty Γ) -> Value Γ A + var : forall {I} (Γ : VCtx I) (x : Fin (Vars Γ)) A -> A ≡ lookup x (vty Γ) -> Value Γ A vunit : forall {I} (Γ : VCtx I) -> Value Γ (VUnit _) vpair : forall {I}{Γ : VCtx I}{A}{A'} -> Value Γ A -> Value Γ A' -> Value Γ (A × A') vdestr : forall {I}{Γ : VCtx I}{A}{A'}{Am} -> @@ -238,17 +244,16 @@ var Γ x A p ⟨ i ⟩vv = var (Γ ⟪ i ⟫v) x (A ⟨ i ⟩v) (begin A ⟨ i ⟩v ≡⟨ cong (λ A → A ⟨ i ⟩v) p ⟩ - (lookup x (VCtx.vty Γ)) ⟨ i ⟩v - ≡⟨ sym (lookup-map x (\A -> A ⟨ i ⟩v) (VCtx.vty Γ)) ⟩ - lookup x (VCtx.vty (Γ ⟪ i ⟫v)) + (lookup x (vty Γ)) ⟨ i ⟩v + ≡⟨ sym (lookup-map x (\A -> A ⟨ i ⟩v) (vty Γ)) ⟩ + lookup x (vty (Γ ⟪ i ⟫v)) ∎) vunit Γ ⟨ i ⟩vv = vunit (Γ ⟪ i ⟫v) vpair V V' ⟨ i ⟩vv = vpair (V ⟨ i ⟩vv) (V' ⟨ i ⟩vv) vdestr V Vk ⟨ i ⟩vv = vdestr (V ⟨ i ⟩vv) (Vk ⟨ i ⟩vv) vthunk M ⟨ i ⟩vv = vthunk (M ⟨ i ⟩cc) -valtrans sq ⟨ Top ⟩vv with lem (ValTC.ΓΓ sq) -... | q = {!!} -- subst (λ Γ⊤ → {!Value Γ⊤ ?!}) q ((ValTC.V⊤ sq) ⟨ Top ⟩vv) -valtrans sq ⟨ Bot ⟩vv = {!!} +valtrans sq ⟨ Top ⟩vv rewrite ctxttrans-dapp-lem (ValTC.ΓΓ sq) Top = ValTC.V⊤ sq ⟨ Top ⟩vv +valtrans sq ⟨ Bot ⟩vv rewrite ctxttrans-dapp-lem (ValTC.ΓΓ sq) Bot = ValTC.V⊥ sq ⟨ Bot ⟩vv data Term where hole : forall {I}{Γ : VCtx I}{B} -> Term Γ (hstoup B) B @@ -284,9 +289,9 @@ valrefl (var Γ x A p) = var (vctxrefl Γ) x (vrefl A) ( begin vrefl A ≡⟨ cong vrefl p ⟩ - vrefl (lookup x (VCtx.vty Γ)) - ≡⟨ sym (lookup-map x vrefl (VCtx.vty Γ)) ⟩ - lookup x (VCtx.vty (vctxrefl Γ)) + vrefl (lookup x (vty Γ)) + ≡⟨ sym (lookup-map x vrefl (vty Γ)) ⟩ + lookup x (vty (vctxrefl Γ)) ∎) valrefl (vunit Γ) = vunit _ valrefl (vpair V V') = vpair (valrefl V) (valrefl V') @@ -299,83 +304,3 @@ termrefl (app M V) = app (termrefl M) (valrefl V) termrefl (force V) = force (valrefl V) termrefl (ret V) = ret (valrefl V) termrefl (lett M Mk) = lett (termrefl M) ((termrefl Mk)) - --- eq-to-compvars : ∀ Γ⊤ Γ⊥ -> Γ⊤ ⟪ Bot ⟫v ≡ Γ⊥ ⟪ Top ⟫v -> VCtx.Vars Γ⊤ ≡ VCtx.Vars Γ⊥ --- eq-to-compvars Γ⊤ Γ⊥ eq = --- begin VCtx.Vars Γ⊤ --- ≡⟨ refl ⟩ --- VCtx.Vars (Γ⊤ ⟪ Bot ⟫v) --- ≡⟨ cong VCtx.Vars eq ⟩ --- VCtx.Vars (Γ⊥ ⟪ Top ⟫v) --- ≡⟨ refl ⟩ --- VCtx.Vars Γ⊥ --- ∎ - --- lemlem : forall {I} Vars (vty1 : Vars -> VType I) vty2 -> record { Vars = Vars ; vty = vty1 } ≡ record { Vars = Vars; vty = vty2 } -> vty1 ≡ vty2 --- lemlem Vars vty1 vty2 refl = refl - --- lem : ∀ (Γ⊥ : VCtx onevar) -> --- (Γ⊤ : VCtx onevar) -> --- (p : Γ⊤ ⟪ Bot ⟫v ≡ Γ⊥ ⟪ Top ⟫v) -> --- (x : VCtx.Vars Γ⊤) -> --- VCtx.vty (Γ⊤ ⟪ Bot ⟫v) x ≡ VCtx.vty (Γ⊥ ⟪ Top ⟫v) (subst (λ v → v) (eq-to-compvars Γ⊤ Γ⊥ p) x) --- lem Γ⊥ Γ⊤ p x with (eq-to-compvars Γ⊤ Γ⊥ p) --- lem Γ⊥ record { Vars = .(VCtx.Vars Γ⊥) ; vty = vty⊤ } p Vars⊥ | refl = --- begin --- vty⊤ Vars⊥ ⟨ Bot ⟩v --- ≡⟨ refl ⟩ --- VCtx.vty (record { Vars = VCtx.Vars Γ⊥ ; vty = λ x → vty⊤ x ⟨ Bot ⟩v }) Vars⊥ --- ≡⟨ cong (λ x → VCtx.vty (record { Vars = VCtx.Vars Γ⊥ ; vty = x }) Vars⊥) (lemlem (VCtx.Vars Γ⊥) (λ z → vty⊤ z ⟨ Bot ⟩v) ((λ x → VCtx.vty Γ⊥ x ⟨ Top ⟩v)) p) ⟩ --- VCtx.vty (record { Vars = VCtx.Vars Γ⊥ ; vty = λ x → VCtx.vty Γ⊥ x ⟨ Top ⟩v }) Vars⊥ --- ≡⟨ refl ⟩ --- VCtx.vty Γ⊥ Vars⊥ ⟨ Top ⟩v --- ∎ - --- mkeqvars : ∀ Γ⊤ Γ⊥ -> Γ⊤ ⟪ Bot ⟫v ≡ Γ⊥ ⟪ Top ⟫v -> Vars Γ⊤ ≡ Vars Γ⊥ --- mkeqvars Γ⊤ Γ⊥ p = --- begin --- Vars Γ⊤ --- ≡⟨ refl ⟩ --- Vars (Γ⊤ ⟪ Bot ⟫v) --- ≡⟨ cong Vars p ⟩ --- Vars (Γ⊥ ⟪ Top ⟫v) --- ≡⟨ refl ⟩ --- Vars Γ⊥ --- ∎ - - --- eq-to-comp : ∀ Γ⊤ Γ⊥ -> Γ⊤ ⟪ Bot ⟫v ≡ Γ⊥ ⟪ Top ⟫v -> VctxTransComp Γ⊤ Γ⊥ --- eq-to-comp Γ⊤ Γ⊥ p = record { --- eqvars = mkeqvars Γ⊤ Γ⊥ p; --- eqδ = tabulate λ x⊤ → record { --- A⊤ = lookup x⊤ (vty Γ⊤) ; --- A⊥ = lookup (subst Fin (mkeqvars Γ⊤ Γ⊥ p) x⊤) (vty Γ⊥) ; --- compat = --- begin --- lookup x⊤ (vty Γ⊤) ⟨ Bot ⟩v --- ≡⟨ sym (lookup-map x⊤ (λ z → z ⟨ Bot ⟩v) (vty Γ⊤)) ⟩ --- lookup x⊤ (vty (Γ⊤ ⟪ Bot ⟫v)) --- ≡⟨ cong (lookup x⊤) {!p!} ⟩ --- lookup x⊤ (subst (Vec (VType _)) _ (vty (Γ⊥ ⟪ Top ⟫v))) --- ≡⟨ {!!} ⟩ --- lookup (subst Fin _ x⊤) (vty (Γ⊥ ⟪ Top ⟫v)) --- ≡⟨ lookup-map _ (\z -> z ⟨ Top ⟩v) (vty Γ⊥) ⟩ --- lookup (subst Fin _ x⊤) (vty Γ⊥) ⟨ Top ⟩v --- ∎ --- } --- } --- record { --- SameVar = VCtx.Vars Γ⊤ ; --- eq⊤ = refl ; --- eq⊥ = eq-to-compvars Γ⊤ Γ⊥ p ; --- eqδ = λ x → --- begin --- VCtx.vty Γ⊤ x ⟨ Bot ⟩v --- ≡⟨ refl ⟩ --- VCtx.vty (Γ⊤ ⟪ Bot ⟫v) x --- ≡⟨ lem Γ⊥ Γ⊤ p x ⟩ --- VCtx.vty (Γ⊥ ⟪ Top ⟫v) (subst (λ v → v) (eq-to-compvars Γ⊤ Γ⊥ p) x) --- ≡⟨ refl ⟩ --- VCtx.vty Γ⊥ (subst (λ v → v) (eq-to-compvars Γ⊤ Γ⊥ p) x) ⟨ Top ⟩v --- ∎ --- } -- GitLab