สุดขีดอีกอันหนึ่งคือการพูดว่าโปรแกรมสองโปรแกรมนั้นมีค่าเทียบเท่าหากพวกเขาคำนวณฟังก์ชันเดียวกัน (หรือแสดงพฤติกรรมที่สังเกตได้เหมือนกันในสภาพแวดล้อมที่คล้ายกัน) แต่สิ่งเหล่านี้ไม่ดี: ไม่ใช่ทุกโปรแกรมที่ตรวจสอบสภาพดั้งเดิมเหมือนกัน เราสามารถเพิ่มบรรทัดของโค้ดโดยไม่มีผลกับผลลัพธ์และเราจะยังคงพิจารณาว่าเป็นโปรแกรมเดียวกัน
สิ่งนี้ไม่ได้เป็นสุดขีด: จะต้องกำหนดความเท่าเทียมกันของโปรแกรมโดยสัมพันธ์กับความคิดในการสังเกต
คำจำกัดความที่พบบ่อยที่สุดในการวิจัย PL คือความเท่าเทียมกันทางบริบท ในการเทียบบริบทบริบทแนวคิดคือเราสังเกตโปรแกรมโดยใช้มันเป็นส่วนประกอบของโปรแกรมขนาดใหญ่ (บริบท) ดังนั้นหากสองโปรแกรมคำนวณค่าสุดท้ายเดียวกันสำหรับบริบททั้งหมดจากนั้นโปรแกรมจะถูกตัดสินว่ามีค่าเท่ากัน เนื่องจากคำจำกัดความนี้วัดปริมาณตามบริบทของโปรแกรมที่เป็นไปได้ทั้งหมดจึงเป็นการยากที่จะทำงานกับโดยตรง ดังนั้นโปรแกรมการวิจัยทั่วไปใน PL คือการค้นหาหลักการการใช้เหตุผลเชิงองค์ประกอบซึ่งบ่งบอกถึงความเท่าเทียมทางบริบท
อย่างไรก็ตามนี่ไม่ใช่ความคิดเดียวที่เป็นไปได้ของการสังเกต ตัวอย่างเช่นเราสามารถพูดได้อย่างง่ายดายว่าหน่วยความจำเวลาหรือพฤติกรรมพลังงานของโปรแกรมสามารถสังเกตได้ ในกรณีนี้มีโปรแกรมที่เทียบเท่ากันน้อยลงเนื่องจากเราสามารถแยกแยะโปรแกรมต่าง ๆ ได้มากขึ้น (เช่นตอนนี้การรวมกันสามารถแยกได้จาก Quicksort) หากคุณต้องการ (พูด) การออกแบบภาษาที่มีภูมิคุ้มกันต่อการโจมตีช่องสัญญาณเวลาหรือการออกแบบภาษาการเขียนโปรแกรมที่มีขอบเขตพื้นที่แล้วนี่คือสิ่งที่คุณต้องทำ
นอกจากนี้เราอาจเลือกที่จะตัดสินสถานะขั้นกลางบางส่วนของการคำนวณว่าสามารถสังเกตได้ สิ่งนี้มักจะเกิดขึ้นกับภาษาที่เกิดขึ้นพร้อมกันเนื่องจากอาจมีสัญญาณรบกวน แต่คุณอาจต้องการใช้มุมมองนี้แม้ในภาษาที่เรียงตามลำดับตัวอย่างเช่นถ้าคุณต้องการให้แน่ใจว่าไม่มีการคำนวณที่จัดเก็บข้อมูลที่ไม่ได้เข้ารหัสในหน่วยความจำหลักคุณต้องคำนึงถึงการเขียนลงในหน่วยความจำหลัก
โดยทั่วไปไม่มีความคิดเดียวของความเท่าเทียมกันของโปรแกรม มันสัมพันธ์กับแนวคิดในการสังเกตที่คุณเลือกและขึ้นอยู่กับแอปพลิเคชันที่คุณนึกไว้