Leonardo de Moura 2022-06-29 06:56:17 -07:00
parent 10b0eca41f
commit a888b21bce
2 changed files with 31 additions and 1 deletions

View file

@ -362,7 +362,9 @@ public:
minor = args[3];
else
minor = args[4];
return visit(mk_app(minor, pr_a, pr_b), root);
expr new_e = mk_app(minor, pr_a, pr_b);
new_e = mk_app(new_e, args.size() - 5, args.data() + 5);
return visit(new_e, root);
}
}

View file

@ -0,0 +1,28 @@
inductive FinInt: Nat → Type :=
| nil: FinInt 0
| next: Bool → FinInt n → FinInt (n+1)
deriving DecidableEq
def zero (sz: Nat): FinInt sz :=
match sz with
| 0 => .nil
| sz+1 => .next false (zero sz)
inductive Pair :=
| mk (sz: Nat) (lhs rhs: FinInt sz)
def makePair?: (n m: (sz: Nat) × FinInt sz) → Option Pair
| ⟨sz, lhs⟩, ⟨sz', rhs⟩ =>
if EQ: true /\ sz = sz' then
have rhs' : FinInt sz := by {
cases EQ;
case intro left right =>
simp [right];
exact rhs;
};
some (Pair.mk sz lhs rhs')
else none
def usePair: Pair → Bool := fun ⟨sz, lhs, rhs⟩ => lhs = rhs
#eval (makePair? ⟨8, zero 8⟩ ⟨8, zero 8⟩).map usePair