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

Function quot_env

crates/kernel/src/tutorial/reduction.rs:1467–1628  ·  view source on GitHub ↗

Build Quot environment: Quot, Quot.mk, Quot.lift, Quot.ind as KConst::Quot. Also includes Eq as full inductive (needed for Quot.lift validation).

()

Source from the content-addressed store, hash-verified

1465 name: mk_name("Quot"),
1466 level_params: vec![mk_name("u")],
1467 kind: QuotKind::Type,
1468 lvls: 1,
1469 ty: quot_ty,
1470 },
1471 );
1472
1473 // Quot.mk.{u} : {α : Sort u} → (r : α → α → Prop) → α → Quot r
1474 // depth 2 (inside α, r): α=var(1), r=var(0)
1475 // depth 3 (inside a): a=var(0), r=var(1), α=var(2)
1476 // Quot α r = app(app(Quot.{u}, var(2)), var(1))
1477 let quot_mk_ty = ipi(
1478 "α",
1479 sort(param(0)),
1480 npi(
1481 "r",
1482 pi(var(0), pi(var(1), sort0())),
1483 npi("a", var(1), app(app(cnst("Quot", &[param(0)]), var(2)), var(1))),
1484 ),
1485 );
1486 env.insert(
1487 mk_id("Quot.mk"),
1488 KConst::Quot {
1489 name: mk_name("Quot.mk"),
1490 level_params: vec![mk_name("u")],
1491 kind: QuotKind::Ctor,
1492 lvls: 1,
1493 ty: quot_mk_ty,
1494 },
1495 );
1496
1497 // Quot.lift.{u,v} :
1498 // {α : Sort u} → {r : α → α → Prop} → {β : Sort v} →
1499 // (f : α → β) → (h : ∀ a b, r a b → f a = f b) → Quot r → β
1500 //
1501 // d0: α
1502 // d1: r. α=var(0)
1503 // d2: β. r=var(0), α=var(1)
1504 // d3: f. β=var(0), r=var(1), α=var(2). f : α → β = pi(var(2), var(1))
1505 // Inside f's pi: var(0)=arg, var(1)=β, var(2)=r, var(3)=α. body=var(1)=β ✓
1506 // d4: h. f=var(0), β=var(1), r=var(2), α=var(3)
1507 // h : ∀ (a b : α), r a b → Eq.{v} β (f a) (f b)
1508 // d5: a. a=var(0), f=var(1), β=var(2), r=var(3), α=var(4)
1509 // d6: b. b=var(0), a=var(1), f=var(2), β=var(3), r=var(4), α=var(5)
1510 // r a b = app(app(var(4), var(1)), var(0))
1511 // d7: (inside r a b →)
1512 // f a = app(var(3), var(2)), f b = app(var(3), var(1))
1513 // Eq.{v} β (f a) (f b) = eq_expr(param(1), var(4), app(var(3), var(2)), app(var(3), var(1)))
1514 // h_ty = npi("a", var(3), npi("b", var(4),
1515 // pi(app(app(var(4), var(1)), var(0)),
1516 // eq_expr(param(1), var(4), app(var(3), var(2)), app(var(3), var(1))))))
1517 // d5: (inside h). h=var(0), f=var(1), β=var(2), r=var(3), α=var(4)
1518 // Quot r → β: pi(Quot α r, β)
1519 // Quot α r = app(app(Quot.{u}, var(4)), var(3))
1520 // d6: (inside pi) β = var(3)
1521 let f_ty = pi(var(2), var(1)); // α → β at d3
1522 let h_ty = npi(
1523 "a",
1524 var(3),

Callers 4

good_quot_mk_typeFunction · 0.70
good_quot_lift_typeFunction · 0.70
good_quot_ind_typeFunction · 0.70
good_quot_lift_reductionFunction · 0.70

Calls 15

add_eq_inductiveFunction · 0.85
ipiFunction · 0.85
sortFunction · 0.85
npiFunction · 0.85
eq_exprFunction · 0.85
appsFunction · 0.85
paramFunction · 0.50
piFunction · 0.50
varFunction · 0.50
sort0Function · 0.50
mk_idFunction · 0.50
mk_nameFunction · 0.50

Tested by 4

good_quot_mk_typeFunction · 0.56
good_quot_lift_typeFunction · 0.56
good_quot_ind_typeFunction · 0.56
good_quot_lift_reductionFunction · 0.56