@@ -5,17 +5,13 @@ open import Definition.Typed.EqualityRelation
5
5
module Definition.LogicalRelation.Substitution.Introductions.Application {{eqrel : EqRelSet}} where
6
6
open EqRelSet {{...}}
7
7
8
- open import Definition.Untyped hiding (wk)
9
- import Definition.Untyped as U
8
+ open import Definition.Untyped
10
9
open import Definition.Untyped.Properties
11
10
open import Definition.Typed
12
- import Definition.Typed.Weakening as T
13
- open import Definition.Typed.Properties
14
- open import Definition.Typed.RedSteps
15
11
open import Definition.LogicalRelation
16
- open import Definition.LogicalRelation.EqView
17
12
open import Definition.LogicalRelation.Irrelevance
18
13
open import Definition.LogicalRelation.Properties
14
+ open import Definition.LogicalRelation.Application
19
15
open import Definition.LogicalRelation.Substitution
20
16
open import Definition.LogicalRelation.Substitution.Introductions.SingleSubst
21
17
@@ -25,123 +21,6 @@ open import Tools.Product
25
21
import Tools.PropositionalEquality as PE
26
22
27
23
28
- -- Helper function for application of specific type derivations.
29
- appTerm′ : ∀ {F G t u Γ l l′ l″}
30
- ([F] : Γ ⊩⟨ l″ ⟩ F)
31
- ([G[u]] : Γ ⊩⟨ l′ ⟩ G [ u ])
32
- ([ΠFG] : Γ ⊩⟨ l ⟩Π Π F ▹ G)
33
- ([t] : Γ ⊩⟨ l ⟩ t ∷ Π F ▹ G / Π-intr [ΠFG])
34
- ([u] : Γ ⊩⟨ l″ ⟩ u ∷ F / [F])
35
- → Γ ⊩⟨ l′ ⟩ t ∘ u ∷ G [ u ] / [G[u]]
36
- appTerm′ {t = t} {Γ = Γ} [F] [G[u]] (noemb (Π F G D ⊢F ⊢G A≡A [F′] [G′] G-ext))
37
- (Πₜ f d funcF f≡f [f] [f]₁) [u] =
38
- let ΠFG≡ΠF′G′ = whnfRed* (red D) Π
39
- F≡F′ , G≡G′ = Π-PE-injectivity ΠFG≡ΠF′G′
40
- F≡idF′ = PE.trans F≡F′ (PE.sym (wk-id _))
41
- idG′ᵤ≡Gᵤ = PE.cong (λ x → x [ _ ]) (PE.trans (wk-lift-id _) (PE.sym G≡G′))
42
- idf∘u≡f∘u = (PE.cong (λ x → x ∘ _) (wk-id _))
43
- ⊢Γ = wf ⊢F
44
- [u]′ = irrelevanceTerm′ F≡idF′ [F] ([F′] T.id ⊢Γ) [u]
45
- [f∘u] = irrelevanceTerm″ idG′ᵤ≡Gᵤ idf∘u≡f∘u
46
- ([G′] T.id ⊢Γ [u]′) [G[u]] ([f]₁ T.id ⊢Γ [u]′)
47
- ⊢u = escapeTerm [F] [u]
48
- d′ = PE.subst (λ x → Γ ⊢ t ⇒* f ∷ x) (PE.sym ΠFG≡ΠF′G′) (redₜ d)
49
- in proj₁ (redSubst*Term (app-subst* d′ ⊢u) [G[u]] [f∘u])
50
- appTerm′ [F] [G[u]] (emb 0<1 x) [t] [u] = appTerm′ [F] [G[u]] x [t] [u]
51
-
52
- -- Application of reducible terms.
53
- appTerm : ∀ {F G t u Γ l l′ l″}
54
- ([F] : Γ ⊩⟨ l″ ⟩ F)
55
- ([G[u]] : Γ ⊩⟨ l′ ⟩ G [ u ])
56
- ([ΠFG] : Γ ⊩⟨ l ⟩ Π F ▹ G)
57
- ([t] : Γ ⊩⟨ l ⟩ t ∷ Π F ▹ G / [ΠFG])
58
- ([u] : Γ ⊩⟨ l″ ⟩ u ∷ F / [F])
59
- → Γ ⊩⟨ l′ ⟩ t ∘ u ∷ G [ u ] / [G[u]]
60
- appTerm [F] [G[u]] [ΠFG] [t] [u] =
61
- let [t]′ = irrelevanceTerm [ΠFG] (Π-intr (Π-elim [ΠFG])) [t]
62
- in appTerm′ [F] [G[u]] (Π-elim [ΠFG]) [t]′ [u]
63
-
64
- -- Helper function for application congurence of specific type derivations.
65
- app-congTerm′ : ∀ {F G t t′ u u′ Γ l l′}
66
- ([F] : Γ ⊩⟨ l′ ⟩ F)
67
- ([G[u]] : Γ ⊩⟨ l′ ⟩ G [ u ])
68
- ([ΠFG] : Γ ⊩⟨ l ⟩Π Π F ▹ G)
69
- ([t≡t′] : Γ ⊩⟨ l ⟩ t ≡ t′ ∷ Π F ▹ G / Π-intr [ΠFG])
70
- ([u] : Γ ⊩⟨ l′ ⟩ u ∷ F / [F])
71
- ([u′] : Γ ⊩⟨ l′ ⟩ u′ ∷ F / [F])
72
- ([u≡u′] : Γ ⊩⟨ l′ ⟩ u ≡ u′ ∷ F / [F])
73
- → Γ ⊩⟨ l′ ⟩ t ∘ u ≡ t′ ∘ u′ ∷ G [ u ] / [G[u]]
74
- app-congTerm′ {F′} {G′} {t = t} {t′ = t′} {Γ = Γ}
75
- [F] [G[u]] (noemb (Π F G D ⊢F ⊢G A≡A [F]₁ [G] G-ext))
76
- (Πₜ₌ f g [ ⊢t , ⊢f , d ] [ ⊢t′ , ⊢g , d′ ] funcF funcG t≡u
77
- (Πₜ f′ [ _ , ⊢f′ , d″ ] funcF′ f≡f [f] [f]₁)
78
- (Πₜ g′ [ _ , ⊢g′ , d‴ ] funcG′ g≡g [g] [g]₁) [t≡u])
79
- [a] [a′] [a≡a′] =
80
- let [ΠFG] = Π′ F G D ⊢F ⊢G A≡A [F]₁ [G] G-ext
81
- ΠFG≡ΠF′G′ = whnfRed* (red D) Π
82
- F≡F′ , G≡G′ = Π-PE-injectivity ΠFG≡ΠF′G′
83
- f≡f′ = whrDet*Term (d , functionWhnf funcF) (d″ , functionWhnf funcF′)
84
- g≡g′ = whrDet*Term (d′ , functionWhnf funcG) (d‴ , functionWhnf funcG′)
85
- F≡wkidF′ = PE.trans F≡F′ (PE.sym (wk-id _))
86
- t∘x≡wkidt∘x : {a b : Term} → U.wk id a Term.∘ b PE.≡ a ∘ b
87
- t∘x≡wkidt∘x {a} {b} = PE.cong (λ x → x ∘ b) (wk-id a)
88
- t∘x≡wkidt∘x′ : {a : Term} → U.wk id g′ Term.∘ a PE.≡ g ∘ a
89
- t∘x≡wkidt∘x′ {a} = PE.cong (λ x → x ∘ a) (PE.trans (wk-id _) (PE.sym g≡g′))
90
- wkidG₁[u]≡G[u] = PE.cong (λ x → x [ _ ])
91
- (PE.trans (wk-lift-id _) (PE.sym G≡G′))
92
- wkidG₁[u′]≡G[u′] = PE.cong (λ x → x [ _ ])
93
- (PE.trans (wk-lift-id _) (PE.sym G≡G′))
94
- ⊢Γ = wf ⊢F
95
- [u]′ = irrelevanceTerm′ F≡wkidF′ [F] ([F]₁ T.id ⊢Γ) [a]
96
- [u′]′ = irrelevanceTerm′ F≡wkidF′ [F] ([F]₁ T.id ⊢Γ) [a′]
97
- [u≡u′]′ = irrelevanceEqTerm′ F≡wkidF′ [F] ([F]₁ T.id ⊢Γ) [a≡a′]
98
- [G[u′]] = irrelevance′ wkidG₁[u′]≡G[u′] ([G] T.id ⊢Γ [u′]′)
99
- [G[u≡u′]] = irrelevanceEq″ wkidG₁[u]≡G[u] wkidG₁[u′]≡G[u′]
100
- ([G] T.id ⊢Γ [u]′) [G[u]]
101
- (G-ext T.id ⊢Γ [u]′ [u′]′ [u≡u′]′)
102
- [f′] : Γ ⊩⟨ _ ⟩ f′ ∷ Π F′ ▹ G′ / [ΠFG]
103
- [f′] = Πₜ f′ (idRedTerm:*: ⊢f′) funcF′ f≡f [f] [f]₁
104
- [g′] : Γ ⊩⟨ _ ⟩ g′ ∷ Π F′ ▹ G′ / [ΠFG]
105
- [g′] = Πₜ g′ (idRedTerm:*: ⊢g′) funcG′ g≡g [g] [g]₁
106
- [f∘u] = appTerm [F] [G[u]] [ΠFG]
107
- (irrelevanceTerm″ PE.refl (PE.sym f≡f′) [ΠFG] [ΠFG] [f′])
108
- [a]
109
- [g∘u′] = appTerm [F] [G[u′]] [ΠFG]
110
- (irrelevanceTerm″ PE.refl (PE.sym g≡g′) [ΠFG] [ΠFG] [g′])
111
- [a′]
112
- [tu≡t′u] = irrelevanceEqTerm″ t∘x≡wkidt∘x t∘x≡wkidt∘x wkidG₁[u]≡G[u]
113
- ([G] T.id ⊢Γ [u]′) [G[u]]
114
- ([t≡u] T.id ⊢Γ [u]′)
115
- [t′u≡t′u′] = irrelevanceEqTerm″ t∘x≡wkidt∘x′ t∘x≡wkidt∘x′ wkidG₁[u]≡G[u]
116
- ([G] T.id ⊢Γ [u]′) [G[u]]
117
- ([g] T.id ⊢Γ [u]′ [u′]′ [u≡u′]′)
118
- d₁ = PE.subst (λ x → Γ ⊢ t ⇒* f ∷ x) (PE.sym ΠFG≡ΠF′G′) d
119
- d₂ = PE.subst (λ x → Γ ⊢ t′ ⇒* g ∷ x) (PE.sym ΠFG≡ΠF′G′) d′
120
- [tu≡fu] = proj₂ (redSubst*Term (app-subst* d₁ (escapeTerm [F] [a]))
121
- [G[u]] [f∘u])
122
- [gu′≡t′u′] = convEqTerm₂ [G[u]] [G[u′]] [G[u≡u′]]
123
- (symEqTerm [G[u′]]
124
- (proj₂ (redSubst*Term (app-subst* d₂ (escapeTerm [F] [a′]))
125
- [G[u′]] [g∘u′])))
126
- in transEqTerm [G[u]] (transEqTerm [G[u]] [tu≡fu] [tu≡t′u])
127
- (transEqTerm [G[u]] [t′u≡t′u′] [gu′≡t′u′])
128
- app-congTerm′ [F] [G[u]] (emb 0<1 x) [t≡t′] [u] [u′] [u≡u′] =
129
- app-congTerm′ [F] [G[u]] x [t≡t′] [u] [u′] [u≡u′]
130
-
131
- -- Application congurence of reducible terms.
132
- app-congTerm : ∀ {F G t t′ u u′ Γ l l′}
133
- ([F] : Γ ⊩⟨ l′ ⟩ F)
134
- ([G[u]] : Γ ⊩⟨ l′ ⟩ G [ u ])
135
- ([ΠFG] : Γ ⊩⟨ l ⟩ Π F ▹ G)
136
- ([t≡t′] : Γ ⊩⟨ l ⟩ t ≡ t′ ∷ Π F ▹ G / [ΠFG])
137
- ([u] : Γ ⊩⟨ l′ ⟩ u ∷ F / [F])
138
- ([u′] : Γ ⊩⟨ l′ ⟩ u′ ∷ F / [F])
139
- ([u≡u′] : Γ ⊩⟨ l′ ⟩ u ≡ u′ ∷ F / [F])
140
- → Γ ⊩⟨ l′ ⟩ t ∘ u ≡ t′ ∘ u′ ∷ G [ u ] / [G[u]]
141
- app-congTerm [F] [G[u]] [ΠFG] [t≡t′] =
142
- let [t≡t′]′ = irrelevanceEqTerm [ΠFG] (Π-intr (Π-elim [ΠFG])) [t≡t′]
143
- in app-congTerm′ [F] [G[u]] (Π-elim [ΠFG]) [t≡t′]′
144
-
145
24
-- Application of valid terms.
146
25
appᵛ : ∀ {F G t u Γ l}
147
26
([Γ] : ⊩ᵛ Γ)
0 commit comments