MCPcopy Create free account
hub / github.com/argumentcomputer/ix / good_fun_eta_dep

Function good_fun_eta_dep

crates/kernel/src/tutorial/defeq.rs:171–217  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

169 /// funEtaDep : ∀ (α : Type) (β : α → Type) (f : ∀ a, β a), (fun a => f a) = f
170 #[test]
171 fn good_fun_eta_dep() {
172 let mut env = KEnv::<Meta>::new();
173 add_eq_axioms(&mut env);
174
175 // At depth 3: f=var(0), β=var(1), α=var(2)
176 // f : ∀ (a : α), β a. At depth 2: α=var(1), β=var(0)
177 // f_ty = ∀ (a : α), β a = npi("a", var(1), app(var(1), var(0)))
178 // Inside f_ty pi: a=var(0), β=var(1), α=var(2). β a = app(var(1), var(0))
179 let f_ty = npi("a", var(1), app(var(1), var(0)));
180
181 // eta_lhs = fun a => f a. At depth 3: α=var(2), f=var(0)
182 // lambda domain: α at depth 3 = var(2)
183 // Inside lambda (depth 4): a=var(0), f=var(1), β=var(2), α=var(3)
184 let eta_lhs = nlam("a", var(2), app(var(1), var(0)));
185
186 // ∀ a, β a at depth 3 (for Eq type arg):
187 // npi("a", var(2), app(var(2), var(0))) — inside pi: β shifts from 1→2
188 let pi_ty = npi("a", var(2), app(var(2), var(0)));
189
190 // Eq.{1} (∀ a, β a) (fun a => f a) f
191 let eq_app = eq_expr(usucc(uzero()), pi_ty.clone(), eta_lhs, var(0));
192
193 // β : α → Type. At depth 1: α = var(0). β_ty = npi("a", var(0), sort1())
194 // But β is NOT the pi type, it's a variable of type α → Type
195 let beta_ty = pi(var(0), sort1()); // α → Type (non-dependent arrow)
196
197 let ty = npi(
198 "α",
199 sort1(),
200 npi("β", beta_ty.clone(), npi("f", f_ty.clone(), eq_app)),
201 );
202
203 // fun α β f => Eq.refl.{1} (∀ a, β a) f
204 let val = nlam(
205 "α",
206 sort1(),
207 nlam(
208 "β",
209 beta_ty,
210 nlam("f", f_ty, eq_refl_expr(usucc(uzero()), pi_ty, var(0))),
211 ),
212 );
213
214 let (id, c) = mk_thm("funEtaDep", 0, vec![], ty, val);
215 env.insert(id.clone(), c);
216 check_accepts(&mut env, &id);
217 }
218
219 // ==========================================================================
220 // Batch 10: Structure eta (Tutorial.lean line 967–968)

Callers

nothing calls this directly

Calls 15

add_eq_axiomsFunction · 0.85
npiFunction · 0.85
nlamFunction · 0.85
eq_exprFunction · 0.85
usuccFunction · 0.85
uzeroFunction · 0.85
eq_refl_exprFunction · 0.85
mk_thmFunction · 0.85
check_acceptsFunction · 0.85
varFunction · 0.50
appFunction · 0.50
piFunction · 0.50

Tested by

no test coverage detected